0x00簡介
Struts2框架是一個用于開發(fā)Java EE網(wǎng)絡應用程序的開放源代碼網(wǎng)頁應用程序架構。它利用并延伸了Java Servlet API,鼓勵開發(fā)者采用MVC架構。Struts2以WebWork優(yōu)秀的設計思想為核心,吸收了Struts框架的部分優(yōu)點,提供了一個更加整潔的MVC設計模式實現(xiàn)的Web應用程序框架。
0x01漏洞概述
Apache Struts于2020年12月08日披露 S2-061 Struts 遠程代碼執(zhí)行漏洞(CVE-2020-17530),在使用某些tag等情況下可能存在OGNL表達式注入漏洞,從而造成遠程代碼執(zhí)行,可能照成控制服務器等危害。S2-061是對S2-059沙盒進行的繞過
0x02影響范圍
Apache Struts 2.0.0-2.5.25
0x03環(huán)境搭建
1. s2-061漏洞搭建漏洞環(huán)境較為復雜而本次漏洞是對S2-059漏洞修復后的繞過,所以這里使用vluhub中的docker環(huán)境進行搭建,下載最新的vluhub。
vluhub下載地址:https://github.com/vulhub/vulhub
2. 因為使用docker搭建,在虛擬機中需要安裝docker以及安裝docker-compose命令,安裝方法請自行百度安裝
3. vulhub下載完成后傳入虛擬機解壓進入s2-061
cd vulhub-master/struts2/s2-061
4.進入目錄后使用docker-compose up -d啟動漏洞環(huán)境
5.在瀏覽器訪問目標地址http://your-ip:8080
0x04漏洞復現(xiàn)
1.在url處使用一下payload驗證漏洞是否存在。注:需要使用url編碼,<typo id="typo-749" data-origin="在" ignoretag="true">在</typo>查看元素查看結果
?id=%25%7b+%27test%27+%2b+(11+%2b+11).toString()%7d
2.方法一,可以看到執(zhí)行相加,這里直接構造payload執(zhí)行命令
3.方法二,在首頁使用burp抓包發(fā)送到重放模塊,并修改成POST傳輸
Payload:
4. 反彈shell,反彈命令需要使用base64編碼
編碼地址:http://www.jackson-t.ca/runtime-exec-payloads.html
5.方法三,使用腳本快捷執(zhí)行命令
小結
1. 本次漏洞復現(xiàn)需要使用docker環(huán)境搭建,需要會使用基本docker命令
2. 需要使用burp抓包改包,需要會使用基本的burp的方法
3. 需要使用到linux命令,需要了解linux命令用法和命令含義
4.使用python腳本進行驗證,需要安裝python3環(huán)境
0x05修復建議
1.建議升級至最新版本