日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

struts2漏洞监测_CVE20190233: S2060 拒绝服务漏洞分析

發布時間:2024/10/8 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 struts2漏洞监测_CVE20190233: S2060 拒绝服务漏洞分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

更多全球網絡安全資訊盡在邑安全

0x01 漏洞簡述

2020年8月11日,360CERT監測發現Apache官方發布了S2-060的風險通告,該漏洞編號為CVE-2019-0233,漏洞等級:中危。漏洞評分:6.8。

當使用getter對文件上傳執行一個暴露文件的操作時,攻擊者可能會構造特定請求,從而將上傳文件的工作目錄設置為只讀。因此,對該文件的后續操作將失敗并出現錯誤。還可以將Servlet容器的temp目錄設置為只讀,這樣后續的上載操作就會失敗,對業務造成影響。

對此,360CERT建議廣大用戶及時將?Struts2?升級到最新版。與此同時,請做好資產自查以及預防工作,以免遭受黑客攻擊。

0x02 風險等級

360CERT對該漏洞的評定結果如下

評定方式等級
威脅等級中危
影響面一般
360CERT評分6.8分

0x03 影響版本

  • Apache Struts2:2.0.0-2.5.20

0x04 漏洞詳情

從ParametersInterceptor攔截器開始看,該攔截器對請求的參數進行處理,前面的過程是ActionInvocation對攔截器進行回調處理。

從ActionContext獲取請求中的請求參數,?

此時有四個參數(具體Action構造見參考鏈接):

1. [文件名參數] - 這是用戶已上傳的實際文件。在Action中被設置為“upload”

2. [文件名參數]ContentType - 這是上傳的文件的內容類型。在Action中被設置為“uploadContentType”

3. [文件名參數]FileName - 這是上傳的文件的名稱。在Action中被設置為“uploadFileName”

4. [文件名參數].parentFile.writable - 構造的利用poc

這里要注意原始上傳的文件類型是一個File類型。然后會調用setParameters方法:?

參數校驗

然后對所有Parameters的key進行檢測,調用isAcceptableParameter方法。?由于自定義Action不是ParameterNameAware的實現類,于是,parameterNameAware為null,?先調用acceptableName方法。?依次調用isWithinLengthLimit,isExcluded,isAccepted。

isWithinLengthLimit判斷最大長度默認為100。

isExcluded進行表達式正則的檢測,是否包含_memberAccess等字符。?

可以發現,我們的payload沒有包含特殊字符。

繼續跟到DefaultExcludedPatternsChecker#isExcluded,初始化了正則表達式的黑名單。?

最后調用isAccepted,跟到DefaultExcludedPatternsChecker#isAccepted。?

對一些不可見字符做處理。

三個函數調用完之后,就將其put到acceptableParameters?Map里。

繼續往下走,會根據原有的valueStack,創建一個新的valueStack,叫做newStack,之后把前面的幾個對key檢測的正則表達式加到這個新的valueStack里面,?

ognl表達式執行

接著,調用OgnlValueStack.setParameter,這里會執行setValue操作,而執行的過程中就會造成ognl表達式的執行,這里會將root作為參數傳入,而root里保存著Action信息。

payload是一個ognl表達式,由于訪問的是ValueStack的root里的屬性,所有不需要加#就能進行訪問,而這里的upload是我們自定義上傳Action里的File類型。

首先target值是一開始傳入的root里的上傳Action,然后會調用target對應的setter和getter方法。

然后獲取返回的upload,類型為File,此時target被賦值為File,經過AST語法解析,getParentFile的調用棧為:

中間會根據傳入的payload調用getGetMethod,獲取File對象對應的getter,也就是getParentFile。在調用method之前,會進行黑名單的檢測,具體是在com.opensymphony.xwork2.ognl.SecurityMemberAccess#isAccessible方法里進行黑名單檢測,黑名單來自struts-?然后getParentFile的返回值被return,?

依然替換作為target,值還是File,繼續調用setter。?

setWriteable的調用棧為:

執行結果:?接著,后續的上傳都會失效。

版本修復

升級到Struts 2.5.22版本,默認情況下將java.io和java.nio中的類加入黑名單。?

總結

該漏洞總體來說,危害不是很大,但是能夠造成服務器功能失效,對于業務來說,還是具有一定的影響力,該漏洞主要是通過Action的getter方法,獲取到上傳的File類型的filename,再通過ognl執行流,去配合執行File的getter/setter,最終造成文件無法后續上傳,由于我們的ognl表達式不涉及黑名單也不涉及特殊字符,所以不受沙箱的影響。

轉自安全客

歡迎收藏并分享朋友圈,讓五邑人網絡更安全

歡迎掃描關注我們,及時了解最新安全動態、學習最潮流的安全姿勢!

推薦文章

1

新永恒之藍?微軟SMBv3高危漏洞(CVE-2020-0796)分析復現

2

重大漏洞預警:ubuntu最新版本存在本地提權漏洞(已有EXP) 

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的struts2漏洞监测_CVE20190233: S2060 拒绝服务漏洞分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。