<var id="skdjw"></var>

  • <meter id="skdjw"></meter><output id="skdjw"></output><label id="skdjw"></label>
    <code id="skdjw"></code>

    <label id="skdjw"><legend id="skdjw"></legend></label>

      <var id="skdjw"></var>
      Struts(S2-048)遠程命令執行漏洞分析
      時間:2017-07-08來源:點擊:8332分享:
      Apache的Struts2是一個優雅的,可擴展的開源MVC框架,主要用于創建企業級的Java Web應用程序。在Struts 2.3.X系列的Showcase插件中演示Struts2整合Struts 1的插件中存在一處任意代碼執行漏洞。當你的Web應用使用了Struts 2 Struts 1插件, 則可能導致Struts2執行由外部輸入的惡意攻擊代碼。

      一、漏洞分析

      1.1漏洞背景

      Apache的Struts2是一個優雅的,可擴展的開源MVC框架,主要用于創建企業級的Java Web應用程序。在Struts 2.3.X系列的Showcase插件中演示Struts2整合Struts 1的插件中存在一處任意代碼執行漏洞。當你的Web應用使用了Struts 2 Struts 1插件, 則可能導致Struts2執行由外部輸入的惡意攻擊代碼。

       

      1.2漏洞影響

      Apache Struts 2.3.x系列中啟用了struts2-struts1-plugin插件的版本。

       

       二、漏洞復現

      這里我們測試的是2.3.24版本中的showcase演示演示示例。

      下載struts-2.3.24-apps.zip,解壓當中的showcase 的war包到tomcat下

      1.png

      漏洞示例觸發位置在SaveGangsterAction.java中

      2.png

      找到itegration中的struts1 intergeration

      3.png


      打開后演示如下:

      4.png

      隨便填完submit然后抓包

      5.png

      修改 content-type,poc還是利用的OGNL,跟之前的s2-045和s2-046差不多

      6.png

      可以看到成功執行了whoami命令獲得了system權限。


      三、漏洞分析 

      3.1漏洞條件

      漏洞是在struts2中開啟了struts1的插件,org.apache.struts2.s1.Struts1Action類是把封裝了struts1的Action 以便兼容在struts2中。

       

      3.2漏洞觸發點

      漏洞出在org.apache.struts2.s1.Struts1Action類的execute方法中,

      7.png

      首先這里ActionForward forward = action.execute(mapping, actionForm, request, response);會把表單的請求處理回顯給客戶端。


      然后addActionMessage(getText(msg.getKey(), Arrays.asList(msg.getValues())));這里又調用了getText方法會把action messages傳遞給com.opensymphony.xwork2.util.LocalizedTextUtil.getDefaultMessage 。


      最后在其中又調用了com.opensymphony.xwork2.util.TextParseUtil.translateVariables,它用來調用OGNL 表達式用處理字符串表達式。漏洞利用OGNL表達式執行任意命令。

       

       四、修復建議

      4.0影響版本

      Apache Struts 2.3.x系列中啟用了struts2-struts1-plugin插件的版本


      4.1漏洞檢測 (檢測是否存在漏洞的方法)

      檢查Struts2框架的版本號


      4.2補丁地址

      暫無補丁,請升級到最新版Struts2


      4.3手工修復

      4.3.1不啟用struts2-struts1-plugin插件

      4.3.2建議升級到最新版本2.5.10.1

      4.3.3開發者通過使用resource keys替代將原始消息直接傳遞給ActionMessage的方式。如下所示

      messages.add("msg", new ActionMessage("struts1.gangsterAdded", gform.getName()));

      一定不要使用如下的方式

      messages.add("msg", new ActionMessage("Gangster " + gform.getName() + " was added"))。


      QUICK CONTACT
      快捷通道
      產品中心
      解決方案
      安全研究
      技術支持
      關于我們
      eeuss2012最新伦理电影