风炫安全web安全学习第三十五节课 文件下载和文件读取漏洞

风炫安全web安全学习第三十五节课 文件下载和文件读取漏洞

0x03 任意文件下载漏洞

一些网站由于业务需求,往往需要提供文件下载功能,但若对用户下载的文件不做限制,则恶意用户就能够下载任意敏感文件,这就是文件下载漏洞。
漏洞产生原因

有读取文件的函数

读物文件的路径用户可控,且没有经过校验,或者校验不严格

输出文件内容

一个正常的网站,存在一个下载文件的功能,同时还会从浏览器接收文件名字

文件下载的两种方式
1、直接下载:

<a href=http://www.likecs.com/”http:/www.a.com/xxx.rar”>下载</a>

2、增加header头

<?php $filename = $_GET['filename']; echo '<h1>开始下载文件</h1><br /><br />'; echo file_get_contents($filename); header('Content-Type: imgage/jpeg'); header('Content-Disposition: attachment; filename='.$filename); header('Content-Lengh: '.filesize($filename)); ?> 0x05 实战利用方式

读取配置文件进行信息收集

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:

/root/.ssh/authorized_keys //如需登录到远程主机,需要到.ssh目录下,新建authorized_keys文件,并将id_rsa.pub内容复制进去
/root/.ssh/id_rsa //ssh私钥,ssh公钥是id_rsa.pub
/root/.ssh/id_ras.keystore //记录每个访问计算机用户的公钥
/root/.ssh/known_hosts
//ssh会把每个访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。
/etc/passwd // 账户信息
/etc/shadow // 账户密码文件
/etc/my.cnf //mysql 配置文件
/etc/httpd/conf/httpd.conf // Apache配置文件
/root/.bash_history //用户历史命令记录文件
/root/.mysql_history //mysql历史命令记录文件
/proc/self/fd/fd[0-9]*(文件标识符)
/proc/mounts //记录系统挂载设备
/porc/config.gz //内核配置文件
/var/lib/mlocate/mlocate.db //全文件路径
/porc/self/cmdline //当前进程的cmdline参数

读取代码漏洞审计

0x06 漏洞防御修复

通用

过滤 . 点,使用户在url中不能回溯上级目录

正则严格判断用户输入的参数

php.ini配置open_basedir限定文件访问范围

文件下载漏洞修复

download id path ------- download.php?id=1

将下载区独立出来,放在项目路径外,给每个下载资源固定的URL,而不是所有的下载资源都是统一的URL:?filename=文件名

净化数据:对用户传过来的文件名参数进行硬编码或统一编码,对文件类型进行白名单控制,对包含恶意字符或者空字符的参数进行拒绝。

web应用程序可以使用chroot环境包含被访问的web目录,或者使用绝对路径+参数来访问文件目录,时使其即使越权也在访问目录之内。www目录就是一个chroot应用。由chroot创造出的那个根目录,叫做“chroot监狱”(所谓”监狱”就是指通过chroot机制来更改某个进程所能看到的根目录,即将某进程限制在指定目录中,保证该进程只能对该目录及其子目录的文件有所动作,从而保证整个服务器的安全。
详细具体chroot的用法,可参考:blog.csdn.net/frozen_fish/article/details/2244870

任意文件下载漏洞也有可能是web所采用的中间件的版本低而导致问题的产生,例如ibm的websphere的任意文件下载漏洞,需更新其中间件的版本可修复。

要下载的文件地址保存至数据库中。

文件路径保存至数据库,让用户提交文件对应ID下载文件。

用户下载文件之前需要进行权限判断。

文件放在web无法直接访问的目录下。

不允许提供目录遍历服务。

公开文件可放置在web应用程序下载目录中通过链接进行下载。

记录文件下载日志。

参考:
风炫安全web安全学习第三十五节课-文件下载和文件/

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsspsg.html