一、文件下载漏洞

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

1.1 概述

    很多网站都会提供文件下载的功能,即用户可以通过点击下载链接,下载到链接所对应的文件。但是,如果文件下载功能设计不当,则可能导致攻击者可以通过构造文件路径,从而获取到后台服务器上的其他的敏感的文件。(又称:任意文件下载)

1.2 演示

1、我们打开pikachu平台上的对应的模块;

pikachu-不安全的文件下载和上传 Safe 第1张

2、看到下载提示页面

pikachu-不安全的文件下载和上传 Safe 第2张

3、我们为了演示,在名字上我们右击选择在新建标签页中打开。

pikachu-不安全的文件下载和上传 Safe 第3张

4、那我们是否可以更改filename的值来获取到后台其他的文件?我们来试一下

pikachu-不安全的文件下载和上传 Safe 第4张

5、下面我们来看一下代码。

pikachu-不安全的文件下载和上传 Safe 第5张

二、不安全的文件上传及客户端绕过

2.1 概述

因为业务功能的需要,很多web站点都有文件上传的接口,例如:

  1. 注册时上传头像文件(比如jpg,png,gif)
  2. 上传文件附件(doc,xls)

但是,如果在后台开发时,并没有对上传的文件功能进行安全考虑或者采用了有缺陷的措施,导致攻击者可以通过一些手段绕过安全措施从而上传一些恶意的文件(例如:一句话木马),从而通过对该恶意文件的访问来控制整个web后台。

文件上传漏洞测试流程如下:

pikachu-不安全的文件下载和上传 Safe 第6张

2.2 客户端验证绕过

1、我们来到对应的模块下。

pikachu-不安全的文件下载和上传 Safe 第7张

2、我们查看一下页面源代码。

pikachu-不安全的文件下载和上传 Safe 第8张

3、我们可以打开页面控制台选择器,选择对应的组件,取消对checkFileExt()函数的调用。

pikachu-不安全的文件下载和上传 Safe 第9张

4、上传我们的system.php文件,文件内容是:<?php system($_GET[x]);?>

pikachu-不安全的文件下载和上传 Safe 第10张

5、访问我们的一句话木马文件,获取主机IP地址。

pikachu-不安全的文件下载和上传 Safe 第11张

2.3 服务端验证绕过

2.3.1 MIME

1、MIME简介

pikachu-不安全的文件下载和上传 Safe 第12张

2、$_FILES()函数简介

pikachu-不安全的文件下载和上传 Safe 第13张

3、来到对应额mime模块。我们先看一下源代码。

pikachu-不安全的文件下载和上传 Safe 第14张

接着我们看upload函数

pikachu-不安全的文件下载和上传 Safe 第15张

4、回到我们的实验平台。打开burp suite。分别上传一次允许被上传的图片文件和不允许上传的其它类型文件(这里我们上传一句话木马文件system.php)

pikachu-不安全的文件下载和上传 Safe 第16张

pikachu-不安全的文件下载和上传 Safe 第17张

5、通过对比我们发现了不同,我们利用burp suite的重放模块,修改Content-Type的值,达到绕过的目的。

pikachu-不安全的文件下载和上传 Safe 第18张

6、通过访问我们上传的文件,就可以进行系统的控制。

2.3.2 getimagesize

    getimagesize()会读取图片16进制文件的头几位,从而加以判断,返回的结果中包含了文件的大小和类型,如果用这个函数来获取类型,从而判断是否是图片,会存在问题。

1、我们可以制作一张木马图片,首先我们准备一张图片和一个php文件,在文件里写入:<?php phpinfo();?> 用来获取数据库信息。

pikachu-不安全的文件下载和上传 Safe 第19张

2、在命令窗口执行:copy /b kb.png + system.php result.png

pikachu-不安全的文件下载和上传 Safe 第20张

3、我们将刚刚生成的图片木马上传至我们的站点。

pikachu-不安全的文件下载和上传 Safe 第21张

4、现在我们有一个问题,虽然我们绕过了后台的防护机制,由于我们上传的是一个图片,我们访问这个文件也只会显示一张图片,并不会执行我们嵌入到里边的PHP代码,那么我们该如何利用呢?我们可以结合文件包含漏洞进行测试。

pikachu-不安全的文件下载和上传 Safe 第22张

pikachu-不安全的文件下载和上传 Safe 第23张

回车后我们可能看不到结果,这说明我们的文件定位还不完全,那么我们累加../直到有结果输出为止。

pikachu-不安全的文件下载和上传 Safe 第24张

2.4 防范措施

pikachu-不安全的文件下载和上传 Safe 第25张

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄