這篇文章將為大家詳細(xì)講解有關(guān)Struts2-052漏洞示例分析,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
創(chuàng)新互聯(lián)主營(yíng)商南網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,app軟件定制開(kāi)發(fā),商南h5成都微信小程序搭建,商南網(wǎng)站營(yíng)銷(xiāo)推廣歡迎商南等地區(qū)企業(yè)咨詢(xún)
2017 年 9 月 5 日,由國(guó)外安全研究組織 lgtm.com 的安全研究人員發(fā)現(xiàn)的嚴(yán)重漏洞在Apache Struts 2官方發(fā)布,漏洞編號(hào)為 CVE-2017-9805(S2-052), 攻擊者可以傳入精心構(gòu)造的xml數(shù)據(jù),遠(yuǎn)程命令執(zhí)行。
Struts2 REST插件的XStream組件存在反序列化漏洞,使用XStream組件對(duì)XML格式的數(shù)據(jù)包進(jìn)行反序列化操作時(shí),未對(duì)數(shù)據(jù)內(nèi)容進(jìn)行有效驗(yàn)證,存在安全隱患,可被遠(yuǎn)程命令執(zhí)行。
利用條件:使用 REST 插件并在受影響版本范圍內(nèi)。
利用方式:攻擊者構(gòu)建惡意數(shù)據(jù)包遠(yuǎn)程利用。
影響版本:Struts 2.1.2 - Struts 2.3.33, Struts 2.5 - Struts 2.5.12
1)下載官方源碼:
git clone https://github.com/apache/Struts.git
2)切換到2.5.12分支:
git checkout STRUTS_2_5_12
3) 把源碼包中src/apps/rest-showcase整個(gè)文件夾拷貝出來(lái),新建一個(gè)項(xiàng)目
4)用IDEA或者eclipse導(dǎo)入該maven項(xiàng)目
5) debug模式運(yùn)行后就可以愉快的調(diào)試了
根據(jù)官方公告知道該漏洞出現(xiàn)在 XstreamHandler 類(lèi),在 struts2-rest-plugin-2.5.12.jar 包內(nèi)。
于是查看該類(lèi),該類(lèi)中有一個(gè)toObject方法,其作用就是對(duì)xml內(nèi)容進(jìn)行反序列化。
先在此方法內(nèi)打一個(gè)斷點(diǎn),然后構(gòu)造數(shù)據(jù)包
發(fā)送數(shù)據(jù)包后,會(huì)跳到斷點(diǎn)處,此時(shí),看到是上層調(diào)用棧中是ContentTypeInterceptor調(diào)用了該方法
ContentTypeInterceptor類(lèi)中intercept方法會(huì)根據(jù)傳入的Content-Type的值生成相應(yīng)的對(duì)象,由于我們傳入的是application/xml,所以對(duì)應(yīng)生成一個(gè)xml的處理對(duì)象XStreamHandler。
繼續(xù)f5,看到執(zhí)行反序列化的函數(shù)unmarshal,在這個(gè)函數(shù)執(zhí)行時(shí)沒(méi)有進(jìn)行數(shù)據(jù)安全檢查,導(dǎo)致遠(yuǎn)程命令執(zhí)行。
接著進(jìn)入unmarshal函數(shù)內(nèi),繼續(xù)往下調(diào)試,AbstractReflectionConverter會(huì)一步步解析我們提交的xml標(biāo)簽和值,最終調(diào)用poc中代碼
在頁(yè)面http://localhost:8080//struts2-rest-showcase/orders/3/edit中點(diǎn)擊Submit,
攔截HTTP請(qǐng)求并將請(qǐng)求體改為POC Payload,同時(shí)將Content-Type Header改為application/xml。
payload為:
發(fā)送請(qǐng)求后,彈出計(jì)算器
官方補(bǔ)丁,官方的修復(fù)方案中, 主要就是將 xml 中的數(shù)據(jù)白名單化,把 Collection 和 Map,一些基礎(chǔ)類(lèi),時(shí)間類(lèi)放在白名單中,這樣就能阻止 XStream 反序列化的過(guò)程中帶入一些有害類(lèi)
Version 2.3.0 to 2.3.33升級(jí)到Struts 2.3.34版本
Version 2.5.0 to 2.5.12升級(jí)到Struts 2.5.13版本
關(guān)于Struts2-052漏洞示例分析就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。