S2-037 远程代码执行漏洞检测与利用

struts2 s2-037远程代码执行漏洞介绍

S2-037的漏洞利用思路建立在s2-033的基础只上,还是对method没有进行过滤导致的,漏洞影响Struts 2.3.20 – Struts 2.3.28.1版本,使用到REST插件的Struts2应用,会被攻击者实现远程代码执行攻击,struts2 历次的漏洞公告和详情官方都有专门的页面进行整理和汇总,可以从这个页面找到历次的struts2的漏洞。

https://cwiki.apache.org/confluence/display/WW/Security+Bulletins

struts2 s2-037漏洞详情分析

此次的s2-037是基于033的一个绕过,在033中,需要开启动态方法执行,也就是032的条件,同时还需要安装rest插件。而037中,不需要开启动态方法执行就能触发代码执行漏洞。

首先看看033触发过程

开启动态方法执行需要在struts.xml中配置,这和032没区别

在getMapping方法中,在处理动态代码执行过程中设置的属性没有做过滤

因为在uri中的!后面的属性加入到了mapping中,然后如果开启了动态代码执行,也就是allowDynamicMethodCalls开启,最后method会进入到com.opensymphony.xwork2.DefaultActionInvocation类的invokeAction方法,之后的就是跟032一样了,可以参考之前的我们分析struts2漏洞的文章。

接下来看看037怎么绕过开启动态方法,通杀所有rest插件的。

扫描二维码关注公众号,回复: 4532050 查看本文章

在调用完handleDynamicMethodInvocation(mapping, mapping.getName());后面又调用了

同时看到这里没有判断

所以这个地方不需要开启动态执行,同时也在这里给出了提示

这里加上了三目运算符才绕过测试结果如下:

可以看到成功执行了system命令。

Poc:

目前官方已经在该页面给出了公告。

https://cwiki.apache.org/confluence/display/WW/S2-037

受影响的用户请尽快升级您的版本到2.3.29。

猜你喜欢

转载自blog.csdn.net/Fly_hps/article/details/85036791