第32天-WEB 漏洞-文件操作之文件下载读取全解

导图

请添加图片描述

漏洞判断

1.文件被解析,则是文件包含漏洞
2.显示源代码,则是文件读取漏洞
3.提示文件下载,则是文件下载漏洞

任意文件下载

漏洞介绍

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

漏洞产生原因

任意语言代码下载功能函数

漏洞检测

白盒检测

  • 代码审计

    Javaweb 文件下载代码

    https://blog.csdn.net/Cheng_May/article/details/78600833

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath =
    request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <a href="/download/DownloadServlet?filename=1.jpg">文件下载</a>
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    response.setCharacterEncoding("UTF-8");
    //设置 ContentType 字段值
    response.setContentType("text/html;charset=utf-8");
    //获取所要下载的文件名称
    String filename = request.getParameter("filename");
    //下载文件所在目录
    String folder = "/filename/";
    //通知浏览器以下载的方式打开
    response.addHeader("Content-type", "appllication/octet-stream");
    response.addHeader("Content-Disposition", "attachment;filename="+filename);
    //通知文件流读取文件
    InputStream in = getServletContext().getResourceAsStream(folder+filename);
    //获取 response 对象的输出流
    OutputStream out = response.getOutputStream();
    byte[] buffer = new byte[1024];
    int len;
    //循环取出流中的数据
    while((len = in.read(buffer)) != -1){
    out.write(buffer,0,len);
    }
    }
    

黑盒检测

  • 漏洞扫描工具

  • 公开漏洞

  • 手工查看参数值及功能点(资源下载)

一般链接形式

  • download.php?path=

  • download.php?file=

  • down.php?file=

  • data.php?file=

  • readfile.php?file=

  • read.php?filename=

包含参数

  • &RealPath=
  • &FilePath=
  • &filepath=
  • &Filepath=
  • &Path=
  • &path=
  • &inputFile=
  • &Inputfile=
  • &url=
  • &urls=
  • &Lang=
  • &dis=
  • &data=
  • &Data=
  • &readfile=
  • &filep=
  • &src=
  • &menu=
  • META-INF
  • WEB-INF

漏洞利用

任意文件下载漏洞的利用主要是为了信息收集,我们通过对服务器配置文件的下载,获取到大量的配置信息、源码,从而根据获取的信息来进一步挖掘服务器漏洞从而入侵。

index.php?f=…/…/…/…/…/…/etc/passwd

index.php?f=…/index.php

index.php?f=file:///etc/passwd

readfile.php?file=/etc/passwd

常见文件
  • 后台首页日志等可见文件
敏感文件
  • 数据库配置文件
  • 各种接口文件
  • 密钥信息等文件

常见的敏感文件路径

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配置信息

C:\Windows\win.ini //Windows系统的一个基本系统配置文件

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 //记录每个访问计算机用户的公钥

/etc/passwd //账户信息

/etc/shadow //账户密码文件

/etc/my.cnf //mysql配置文件

/etc/httpd/conf/httpd.conf //apache配置文件

/root/.bash_history //用户历史命令记录文件

/root/.mysql_history //mysql历史命令记录文件

/proc/mounts //记录系统挂载设备

/porc/config.gz //内核配置文件

/var/lib/mlocate/mlocate.db //全文件路径

/porc/self/cmdline //当前进程的cmdline参数

/usr/local/app/php5/lib/php.ini //PHP配置文件

漏洞修复

  • 部罢WAF产品

  • 过滤“.(点)”,使用户在url中不能回溯上级目录

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

  • 配置限定文件访问范围,目录权限设置或单独文件权限设置

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

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

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

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

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

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

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

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

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

  • 记录文件下载日志。

任意文件读取

漏洞介绍

任意文件读取是属于文件操作漏洞的一种,一般任意文件读取漏洞可以读取配置信息甚至系统重要文件。

漏洞产生原因

任意语言代码读取功能函数

文件读取函数

readfile()、file_get_contents()、fopen()中

$filename没有经过校验或者校验不合格

用户可控制变量读取任意文件,如/etc/passwd、./index.php、/config.ini

漏洞检测

手工查看参数值及功能点(资源下载)

漏洞利用

readfile.php?f=../../../../../../etc/passwd

读取文件:配置文件(数据库,平台,各种敏感文件等)

漏洞修复

涉及案例:

Pikachu-文件下载测试-参数

请添加图片描述

Zdns-文件下载真实测试-功能点

请添加图片描述

下在漏洞在哪里测?下载漏洞怎么判断存在
拿到下载文件的url, 再观察路径规律;然后再拿到你想下载的文件的ur,
根据url的规律,是否加密

小米路由器-文件读取真实测试-漏洞

RoarCTF2019-文件读取真题复现-比赛

百度杯 2017 二月-Zone 真题复现-比赛拓展

爬虫扫描地址-分析参数名参数值-文件操作安全-对应脚本
修改提交方式测试-读取 WEB 配置文件 WEB-INF/web.xml
访问读取对应地址-访问读取 flag 对应 class 文件-
(WEB-INF/classes/com/wm/ctf/FlagController.class)

涉及资源:

https://www.seebug.org/vuldb/ssvid-98122
https://www.ichunqiu.com/battalion?t=1&r=57475
https://blog.csdn.net/Cheng_May/article/details/78600833
https://buuoj.cn/challenges#%5BRoarCTF%202019%5DEasy%20Java

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值