Apache Struts2(S2-045)漏洞利用

0x00 前言

       Apache Struts是美国阿帕奇(Apache)软件基金会负责维护的一个开源项目,是一套用于创建企业级Java Web 应用的开源MVC框架,主要提供两个版本框架产品:    Struts 1和Struts 2。 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。
0x01 漏洞原理
1、基于Jakarta(Jakarta Multipart parser)插件的文件上传功能
2、恶意攻击者精心构造Content-Type的值
3、通过版本比对定位漏洞原因
\core\src\main\java\org\apache\struts2\dispatcher\multipart\MultiPartRequestWrapper.java
\core\src\main\java\org\apache\struts2\dispatcher\multipart\JakartaMultiPartRequest.java
\core\src\main\java\org\apache\struts2\dispatcher\multipart\JakartaStreamMultiPartRequest.java

0x02漏洞危害

ApacheStruts 2.3.5 – 2.3.31版本及2.5 – 2.5.10版本存在远程代码执行漏洞(CNNVD-201703-152 ,CVE-2017-5638)。该漏洞是由于上传功能的异常处理函数没有正确处理用户输入的错误信息。导致远程攻击者可通过发送恶意的数据包,利用该漏洞在受影响服务器上执行任意命令。    

0x03 漏洞检测

1、在线检测:
https://cloud.nsfocus.com/#/krosa/views/initcdr/productandservice?page_id=12
http://matrix.cubesec.cn/src/views/scaning.html
2、使用EXP检测:
python s2_045.py http://www.xxx.cn/_web/search/doSearch.do;下载链接:http://pan.baidu.com/s/1bpMQ4Ab 密码:gt54
python st2-045.py 链接:http://pan.baidu.com/s/1pLAqIHt 密码:5jn5  
3、简单检测
执行命令检测:s2-045.exe  链接:http://pan.baidu.com/s/1dE0R4QX 密码:b8p2
友情检测:VSRC-(S2-045).exe 直接进行检测;下载链接:http://pan.baidu.com/s/1pKSX2cz 密码:dvxo
4、脆弱测试环境
https://github.com/mottoin/S2-045

0x04 修复建议

1、升级版本: 正在使用Jakarta文件上传插件或者是存在漏洞的Struts 2版本请升级至Struts2安全版本
Struts 2.3.32:https://cwiki.apache.org/confluence/display/WW/Version+Notes+2.3.32 
Struts 2.5.10.1:https://cwiki.apache.org/confluence/display/WW/Version+Notes+2.5.10.1 
2、 过滤验证
使用Servlet过滤器验证Content-Type过滤不匹配的请求multipart/form-data
欢迎大家分享更好的思路,热切期待^^_^^ !

你可能感兴趣的:(struts,struts2.0,漏洞,S2-045)