<video id="hkztx"><input id="hkztx"></input></video>

        <i id="hkztx"><sub id="hkztx"></sub></i>
        1. Struts(S2-048)遠程命令執行漏洞分析
          時間:2017-07-08來源:點擊:7980分享:
          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
          快捷通道
          產品中心
          解決方案
          安全研究
          技術支持
          關于我們
          hezyo高清 一本道 综合