影响版本
Struts 2.3.20 - Struts Struts 2.3.28(2.3.20.3和2.3.24.3除外)
吐槽:这个漏洞其实和S2-016差不多。
0x01 土亢
v2.3.20因该是误报,可能开发时候没注意写死了
DefaultActionMapper.allowDynamicMethodCalls == false
,恰好避免了漏洞 XD
需要开启
动态代码调试
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
0x02 分析
跟进分析
在前期准备阶段进入PrepareOperations解析mapping
进入后进行特殊参数解析this.handleSpecialParameters(),RestActionMapper继承自DefaultActionMapper,实际调用后者的此方法
这里循环尝试分析后面的参数,使用
前缀树
进行解析
我也不知道该怎么解释这种代码结构,java不好,反正最后这里先判断是否前追为
method
,是的话判断开启动态代码调试,开启就添加method,最后到DefaultActionInvocation#invokeActionOnly内执行。
流程梳理
太懒,放弃
0x03 利用条件
开启动态调试
0x04 利用方式
method后跟payload即可
例:http://localhost:8088/orders?method: