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没区别

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

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

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

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

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

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

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

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

同时看到这里没有判断

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

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

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

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

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

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

Poc:

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

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

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

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

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

相关文章:

  • 2021-10-30
  • 2021-04-26
  • 2021-05-27
  • 2021-06-02
  • 2021-08-16
  • 2021-07-30
  • 2021-04-20
  • 2021-11-26
猜你喜欢
  • 2021-07-24
  • 2021-06-20
  • 2021-06-20
  • 2022-01-02
  • 2022-01-01
  • 2021-09-29
相关资源
相似解决方案