<menuitem id="dp1tl"><video id="dp1tl"><thead id="dp1tl"></thead></video></menuitem>
<progress id="dp1tl"></progress>
<ruby id="dp1tl"><video id="dp1tl"><progress id="dp1tl"></progress></video></ruby>
<cite id="dp1tl"><video id="dp1tl"><th id="dp1tl"></th></video></cite>
<progress id="dp1tl"><var id="dp1tl"><strike id="dp1tl"></strike></var></progress>
<menuitem id="dp1tl"><del id="dp1tl"></del></menuitem>
Struts(S2-048)遠程命令執行漏洞分析
時間:2017-07-08來源:點擊:3554分享:
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
快捷通道
產品中心
解決方案
安全研究
技術支持
關于我們
重庆时时彩开奖 官方
<menuitem id="dp1tl"><video id="dp1tl"><thead id="dp1tl"></thead></video></menuitem>
<progress id="dp1tl"></progress>
<ruby id="dp1tl"><video id="dp1tl"><progress id="dp1tl"></progress></video></ruby>
<cite id="dp1tl"><video id="dp1tl"><th id="dp1tl"></th></video></cite>
<progress id="dp1tl"><var id="dp1tl"><strike id="dp1tl"></strike></var></progress>
<menuitem id="dp1tl"><del id="dp1tl"></del></menuitem>
<menuitem id="dp1tl"><video id="dp1tl"><thead id="dp1tl"></thead></video></menuitem>
<progress id="dp1tl"></progress>
<ruby id="dp1tl"><video id="dp1tl"><progress id="dp1tl"></progress></video></ruby>
<cite id="dp1tl"><video id="dp1tl"><th id="dp1tl"></th></video></cite>
<progress id="dp1tl"><var id="dp1tl"><strike id="dp1tl"></strike></var></progress>
<menuitem id="dp1tl"><del id="dp1tl"></del></menuitem>