## 漏洞详情
在struts2中,DefaultActionMapper类支持以"action:"、"redirect:"、"redirectAction:"作为导航或是重定向前缀,但是这些前缀后面同时可以跟OGNL表达式,由于struts2没有对这些前缀做过滤,导致利用OGNL表达式调用java静态方法执行任意系统命令。
这里以“redirect:”前缀举例,struts2会将“redirect:”前缀后面的内容设置到redirect.location当中,这里我们一步步跟踪,首先是这个getMapping函数跟入
![](https://images.seebug.org/contribute/a90f8e8f-f01e-4e84-ab07-e71c140f69a6-struts.jpg)
这里一直到这个handleSpecialParameters(),继续跟入
![](https://images.seebug.org/contribute/75fd3a08-4176-433f-b5a6-c929c0848b15-123.jpg)
![](https://images.seebug.org/contribute/a1d3d53d-f609-4a39-82c1-1e161e54947f-7.jpg)
这里真正传入OGNL表达式是在这个parameterAction.execute()中,继续跟入来到DefaultActionMapper.java的代码
![](https://images.seebug.org/contribute/4e670240-7751-4db1-9b12-69ebbe2c77fc-925.jpg)
然而上面的过程只是传递OGNL表达式,真正执行是在后面,这里是在FilterDispatcher类中的dispatcher.serviceAction()方法,这里的mapping对象中设置了传入的OGNL
![](https://images.seebug.org/contribute/be7a3eb9-0102-43ff-b9f9-2eb8e3d47b61-039.jpg)
这里跟入方法最终会在TextParseUtil这个类的调用stack.findValue()方法执行OGNL。
![](https://images.seebug.org/contribute/fda5b6ee-c51d-486f-9ee1-826aa85b7b67-4115.jpg)
详情来源:http://drops.wooyun.org/papers/902
暂无评论