开发者社区> 问答> 正文

linux 服务器出现Struts S2-045零日漏洞,被攻击,怎么办

今天,linux 服务器出现Struts S2-045零日漏洞,被攻击,怎么确定程序里是否使用了jakarta插件?



展开
收起
who2 2017-03-08 11:30:04 5276 0
4 条回答
写回答
取消 提交回答
  • 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就说明有问题了
    2017-03-09 13:19:36
    赞同 展开评论 打赏
  • 同问,程序里应该没有用到 jakarta插件,但是不确定,因为仍然受到攻击了,怎么确定到底用没用到 jakarta插件?
    2017-03-08 14:46:15
    赞同 展开评论 打赏
  • 静静的看着你们
    【漏洞公告】CVE-2017-5638:基于 Jakarta plugin插件的Struts远程代码执行漏洞
    https://bbs.aliyun.com/read/308847.html
    这个帖子有详细的介绍和漏洞修复建议
    2017-03-08 14:34:22
    赞同 展开评论 打赏
  • 回 楼主who2的帖子
    有人知道该咋整?

    -------------------------

    回 2楼不靠谱贝贝的帖子
    怎么j解决

    -------------------------

    回 5楼cofer的帖子
    那你升级Struts了?

    -------------------------

    回 8楼汝的帖子
    谢了,我试试
    2017-03-08 14:09:33
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
如何运维千台以上游戏云服务器 立即下载
网站/服务器取证 实践与挑战 立即下载
ECS快储存加密技术 立即下载