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

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

作者: 风炫安全 | 来源:发表于2021-01-15 23:23 被阅读0次

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

    0x03 任意文件下载漏洞

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

    • 有读取文件的函数
    • 读物文件的路径用户可控,且没有经过校验,或者校验不严格
    • 输出文件内容
    • 一个正常的网站,存在一个下载文件的功能,同时还会从浏览器接收文件名字

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

    <a href=”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:www.test.com/download?filename=文件名
    • 净化数据:对用户传过来的文件名参数进行硬编码或统一编码,对文件类型进行白名单控制,对包含恶意字符或者空字符的参数进行拒绝。
    • web应用程序可以使用chroot环境包含被访问的web目录,或者使用绝对路径+参数来访问文件目录,时使其即使越权也在访问目录之内。www目录就是一个chroot应用。由chroot创造出的那个根目录,叫做“chroot监狱”(所谓”监狱”就是指通过chroot机制来更改某个进程所能看到的根目录,即将某进程限制在指定目录中,保证该进程只能对该目录及其子目录的文件有所动作,从而保证整个服务器的安全。
      详细具体chroot的用法,可参考:blog.csdn.net/frozen_fish/article/details/2244870
    • 任意文件下载漏洞也有可能是web所采用的中间件的版本低而导致问题的产生,例如ibm的websphere的任意文件下载漏洞,需更新其中间件的版本可修复。
    • 要下载的文件地址保存至数据库中。
    • 文件路径保存至数据库,让用户提交文件对应ID下载文件。
    • 用户下载文件之前需要进行权限判断。
    • 文件放在web无法直接访问的目录下。
    • 不允许提供目录遍历服务。
    • 公开文件可放置在web应用程序下载目录中通过链接进行下载。
    • 记录文件下载日志。

    参考:
    http://blog.evalshell.com/2020/12/20/风炫安全web安全学习第三十五节课-文件下载和文件/

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/foawoktx.html