Struts2 遠(yuǎn)程代碼執(zhí)行漏洞(S2-046)漏洞復(fù)現(xiàn)

漏洞復(fù)現(xiàn)

繼 3 月 7 日爆發(fā)的 S2-045 遠(yuǎn)程命令執(zhí)行漏洞風(fēng)波之后,今日 Struts2 官方發(fā)布另一個(gè)高危漏洞 S2-046,CVE 編號(hào)依然是 CVE-2017-5638,據(jù)官方披露,最新的漏洞與 S2-045 類似,只是攻擊字段發(fā)生變化。修復(fù)方案依然與 S2-045 相同,升級(jí)至 2.3.32 或者 2.5.10.1 版本即可防御針對(duì)這兩個(gè)漏洞攻擊。

S2-046

Struts2 是一個(gè)基于 MVC 設(shè)計(jì)模式的 Web 應(yīng)用框架,它本質(zhì)上相當(dāng)于一個(gè) servlet,在 MVC 設(shè)計(jì)模式中,Struts2 作為控制器 (Controller) 來建立模型與視圖的數(shù)據(jù)交互。Struts2 的使用范圍及其廣泛,國(guó)內(nèi)外均有大量廠商使用該框架。


漏洞描述:

據(jù)漏洞提交者紕漏,S2-046 的利用條件有以下三個(gè)方面:

1、系統(tǒng)必須使用 Jakarta 插件,檢查 Struts2 配置文件中是否有以下配置:<constant name =“struts.multipart.parser”value =“jakarta-stream”/>
2、上傳文件的大?。ㄓ?Content-LSength 頭指定)大于 Struts2 允許的最大大?。?GB)
3、文件名內(nèi)容構(gòu)造惡意的 OGNL 內(nèi)容。
如果滿足以上要求,Struts2 受影響版本將創(chuàng)建一個(gè)包含攻擊者控制的異常文件名,使用 OGNL 值堆棧來定位錯(cuò)誤消息,OGNL 值堆棧將插入任何 OGNL 變量($ {}或%{})作為 OGNL 表達(dá)式,然后實(shí)現(xiàn)任意代碼執(zhí)行。

目前網(wǎng)絡(luò)上已披露出針對(duì) S2-046 的 POC

https://github.com/pwntester/S2-046-PoC

漏洞復(fù)現(xiàn):

我們?cè)诒镜卮罱ōh(huán)境進(jìn)行測(cè)試:

查看 Struts2 的配置文件,發(fā)現(xiàn)存在
<constant name =“struts.multipart.parser”value =“jakarta-stream”/>
Struts2 的配置文件
下面進(jìn)行網(wǎng)站上傳測(cè)試,構(gòu)造數(shù)據(jù)包如下,設(shè)定 Content-LSength 值大于 2GB,并構(gòu)造惡意文件名,如下圖所示:
構(gòu)造數(shù)據(jù)包

通過響應(yīng)數(shù)據(jù)包可看到惡意代碼成功執(zhí)行,攻擊成功,如下圖所示:

代碼成功執(zhí)行

友情提示:

1.請(qǐng)升級(jí)到 Apache Struts 2.3.32 或 2.5.10.1 版本,下載地址:
http://archive.apache.org/dist/struts/2.3.32/
http://archive.apache.org/dist/struts/2.5.10.1/
2.測(cè)試的時(shí)候設(shè)定 Content-LSength 值不大于 2GB也可以利用成功,原因未知。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容