风炫安全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安全学习第三十五节课 文件下载和文件读取漏洞的更多相关文章

  1. 风炫安全web安全学习第三十六节课-15种上传漏洞讲解(一)

    风炫安全web安全学习第三十六节课 15种上传漏洞讲解(一) 文件上传漏洞 0x01 漏洞描述和原理 文件上传漏洞可以说是日常渗透测试用得最多的一个漏洞,因为用它获得服务器权限最快最直接.但是想真正把 ...

  2. 风炫安全web安全学习第三十四节课 文件包含漏洞防御

    风炫安全web安全学习第三十四节课 文件包含漏洞防御 文件包含防御 在功能设计上不要把文件包含的对应文件放到前台去操作 过滤各种../,https://, http:// 配置php.ini文件 al ...

  3. 风炫安全WEB安全学习第三十八节课 越权漏洞演示与讲解

    风炫安全WEB安全学习第三十八节课 越权漏洞演示与讲解 越权漏洞 0x01 漏洞介绍 越权漏洞的危害与影响主要是与对应业务的重要性相关,比如说某一页面服务器端响应(不局限于页面返回的信息,有时信息在响 ...

  4. 风炫安全web安全学习第三十三节课 文件包含漏洞基础以及利用伪协议进行攻击

    风炫安全web安全学习第三十三节课 文件包含漏洞基础以及利用伪协议进行攻击 文件包含漏洞 参考文章:https://chybeta.github.io/2017/10/08/php文件包含漏洞/ 分类 ...

  5. 风炫安全web安全学习第三十节课 命令执行&代码执行基础

    风炫安全web安全学习第三十节课 命令执行&代码执行基础 代码执行&命令执行 RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统. 远程系统命令执行 ...

  6. 风炫安全web安全学习第三十七节课 15种上传漏洞讲解(二)

    风炫安全web安全学习第三十七节课 15种上传漏洞讲解(二) 05后缀名黑名单校验之上传.htaccess绕过 还是使用黑名单,禁止上传所有web容器能解析的脚本文件的后缀 $is_upload = ...

  7. 风炫安全web安全学习第三十二节课 Python代码执行以及代码防御措施

    风炫安全web安全学习第三十二节课 Python代码执行以及代码防御措施 Python 语言可能发生的命令执行漏洞 内置危险函数 eval和exec函数 eval eval是一个python内置函数, ...

  8. 风炫安全web安全学习第三十一节课 命令执行以及代码执行演示

    风炫安全web安全学习第三十一节课 命令执行以及代码执行演示 参考: http://blog.evalshell.com/2020/12/20/风炫安全web安全学习第三十一节课-命令执行以及代/

  9. centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课

    centos   shell脚本编程1 正则  shell脚本结构  read命令  date命令的用法  shell中的逻辑判断  if 判断文件.目录属性  shell数组简单用法 $( ) 和$ ...

随机推荐

  1. jarvisoj babyphp

    jarvisoj babyphp 涉及知识点: (1)GitHack处理.git源码泄露 (2)php代码注入 解析: 进入题目界面. 看到题目中的用了git那么第一反应肯定是可能存在.git源码泄露 ...

  2. vertical-align什么时候使用?常用的值分别有什么作用?

    设置元素的垂直对齐方式 常用的值: 1.baseline:默认.元素放置在父元素的基线上. 2.sub:垂直对齐文本的下标. 3.super:垂直对齐文本的上标 4.top:把元素的顶端与行中最高元素 ...

  3. Spring framework核心

    这一部分涵盖了Spring框架绝对不可或缺的所有技术. 1.IOC容器 1.1Spring IoC容器和beans介绍 org.springframework.beans和org.springfram ...

  4. ASP数据库连接方法语法总结

    经常使用到有关数据库的操作.包括连接代码,SQL命令等等,又不曾刻意去记忆它们(我本人是不愿意去记这东东),所以常常在用到的时候又去查书本,翻来翻去.一些比较少用的数据库还不一定能顺利找到,所以现在把 ...

  5. spark中map和mapPartitions算子的区别

    区别: 1.map是对rdd中每一个元素进行操作 2.mapPartitions是对rdd中每个partition的迭代器进行操作 mapPartitions优点: 1.若是普通map,比如一个par ...

  6. EHCACHE实现登录错误次数账号锁定

    使用EHCACHE实现账号密码登录校验失败5次锁定10分钟 <?xml version="1.0" encoding="UTF-8"?> <e ...

  7. 记一次storm提交任务遇到的坑

    摘要:主要是自己没有真正理解storm jar命令参数的意义. 情景复现: 在storm集群中使用命令提交后,在UI界面中,一直看不见任务提交上来的任务,但是在集群提交的shell界面中,是可以看到相 ...

  8. Sense Sense (Beta)安装及解决部分Chrome插件安装时程序包无效:"CRX_HEADER_INVALID"

    下载地址  http://down.cnplugins.com/down/down.aspx?fn=1412/www.cnplugins.com_lhjgkmllcaadmopgmanpapmpjgm ...

  9. 解决IDEA Maven下载依赖包速度慢问题

    右键项目,maven选项,"Open setting.xml"或"Create setting.xml",在 mirrors 节点添加下面代码. <mir ...

  10. Kubernetes【K8S】(一):Kubernetes组件

    什么是Kubernetes ​ Kubernetes 是一个可移植的.可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化.Kubernetes拥有一个庞大且快速增长的生态系统. ...