2013-07-21|3120阅|作者:小蜜锋|举报 摘要: Struts2高危漏洞分析 此漏洞影响Struts2.0-Struts2.3所有版本,可直接导致服务器被黑客远程控制,从而引起数据泄露。漏洞根源在于,DefaultActionMapper类支持以"action:"、"redirect:"、"redirectAction:"
此漏洞影响Struts2.0-Struts2.3所有版本,可直接导致服务器被黑客远程控制,从而引起数据泄露。漏洞根源在于,DefaultActionMapper类支持以"action:"、"redirect:"、"redirectAction:"作为导航或是重定向前缀,但是这些前缀后面同时可以跟OGNL表达式,由于struts2没有对这些前缀做过滤,导致利用OGNL表达式调用java静态方法执行任意系统命令。 这里以“redirect:”前缀举例,struts2会将“redirect:”前缀后面的内容设置到redirect.location当中,如图所示:
key.substring(REDIRECT_PREFIX.length())便是前缀后面的内容也就是OGNL表达式,struts2会调用setLocation方法将他设置到redirect.location中。然后这里调用mapping.setResult(redirect)将redirect对象设置到mapping对象中的result里,如图所示:
然而上面的过程只是传递OGNL表达式,真正执行是在后面,这里是在FilterDispatcher类中的dispatcher.serviceAction()方法,
这里跟入方法最终会在TextParseUtil这个类的调用stack.findValue()方法执行OGNL。