struts2實現文件上傳功能「struts2文件上傳步驟」

繼3月6日struts2爆出漏洞S2-045後,今天又爆出一個漏洞。Struts2官方已經確認該漏洞(S2-046),並定級為高危漏洞。S2-046漏洞的報告者來自三家:qualcomm(高通)、dbappsecurity(杭州安恆)、HPE(惠普企業)。

Struts2的使用範圍及其廣泛,國內外均有大量廠商使用該框架。

Struts2是一個基於MVC設計模式的Web應用框架,它本質上相當於一個servlet,在MVC設計模式中,Struts2作為控制器(Controller)來建立模型與視圖的數據交互。Struts 2是Struts的下一代產品,是在 struts 1和WebWork的技術基礎上進行了合併的全新的Struts 2框架。

漏洞分析

使用Jakarta插件處理文件上傳操作時可能導致遠程代碼執行漏洞。

Struts2-046漏洞的技術分析與解決方案

使用惡意的Content-Disposition值或者使用不合適的Content-Length頭就可能導致遠程命令執行。該漏洞與S2-045(CVE-2017-5638)相似,但使用了不同的攻擊向量。

觸發漏洞需要滿足的條件:

JakartaStreamMultipartRequest已開啟。也就是說,Struts2需要通過Jakarta stream parser配置(非默認)。在Struts2配置文件中檢查<constant name=」struts.multipart.parser」 value=」jakarta-stream」 />

上傳的文件大小根據Content-Length頭的聲明要大於Struts2默認允許的2GB大小

文件名中包含OGNL payload

漏洞的危害

攻擊者可通過修改HTTP請求頭部中的Content-Length字段大於Struts2允許的最大值(2GB),並修改Content-Disposition中的filename字段構造惡意代碼利用該漏洞,在受影響服務器上執行系統命令,進一步可完全控制該服務器,造成拒絕服務、數據泄露、網站遭篡改等影響。由於該漏洞利用所需組件默認啟用,因此漏洞危害較為嚴重

漏洞檢測

通過以下方式進行檢測:

查看web目錄下/WEB-INF/lib/目錄下的struts2-core-x.x.x.jar文件,如果x代表的版本號在2.3.5到2.3.31以及2.5到2.5.10之間且未修改默認配置則存在漏洞。

解決方案

目前網上已經有人公開了漏洞POC,為了保護您的資產安全,請按照下面方法及時修復該漏洞。

S2-046PoC如下:

Struts2-046漏洞的技術分析與解決方案

1. 嚴格過濾Content-Typefilename里的內容,嚴禁ognl表達式相關字段

2. 如果你正在使用基於Jakarta的文件上傳Multipart解析器,請將Apache Struts升級到2.3.32或2.5.10.1。

3. 和先前的漏洞一樣,也有相應的變通方案,即採用其他Mutipart解析器實施方案。Apache也提供2個插件作為解決方案(通過鏈接:
https://github.com/apache/struts-extras了解)——如果使用的是Apache Struts 2.3.8 – 2.5.5或者2.3.20 – 2.5.5版本,即可採用該解決方案。

4. 另外也可以從堆中移除File Upload Interceptor,定義自有堆並設為默認,該解決方案針對Struts2.5.8 – 2.5.10有效。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/209020.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-08 15:23
下一篇 2024-12-08 15:23

相關推薦

發表回復

登錄後才能評論