【文件上传漏洞06】服务端文件内容检测与绕过实验+图片马制作方法(基于upload-labs-14靶场)

1 概述

1.1 目的

为了保障安全性,服务器还需要对文件内容进行检测。

1.2 检测方法

  1. 对于图片文件,PHP中有一个函数getimagesize(),这个函数本身检测图片大小,但是在检测之前还会判断目标文件是否是一张图片,因此,可以使用该函数来检测文件内容是否输出图片类型。
  2. 由于同一类型文件的头部内容也是一样的,服务器也常根据文件的头部内容进行判断。

2 图片马的制作方法

目的:让服务器对文件内容进行检测时,将文件判断为图片。

2.1 方法一:直接编辑

新建文件并命名为info.gif,文件内容如下。该文件在函数getimagesize()检测时,会被识别为gif图片,但是该文件无法直接在服务器端执行里面的代码,需要借助其他漏洞才能执行。

GIF89a
<?php
phpinfo();
?>

2.2 方法二:合并文件

  1. 准备一张图片,例如此处文件名为fighting_hawk.png。
    在这里插入图片描述
  2. 准备一个php一句话木马文件,比如此处文件名为info.php,内容为<?php phpinfo(); ?>
  3. 合并文件。在windows系统下,运行cmd,输入命令copy fighting_hawk.png/b+info.php/a muma.jpg。需要注意的是需要先cd到两个文件所在的路径下执行命令。
    在这里插入图片描述
  4. 以记事本方式打开生成的文件,可以看到里面包含着php代码语句。
    在这里插入图片描述

2.3 方法三:利用十六进制编辑器

  1. 需要了解的是,各种图片的文件头部都是相同的,比如说所有的jpg图片的头部文件是一致的;不同格式的图片之间的头部文件是不同的。
  2. 函数getimagesize()无法识别文件幻术生成的文件。
  3. 常见的图片文件类型如下:
文件格式头部
.gif47 49 46 38 39 61 F1 00 2C 01 F7 00 00 64 32 33
.jpgFF D8 FF E0 00 10 4A 46 69 46 00 01 01 01 01 2C
.png89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52
  1. 新建文件,命名为16.png,文件内容如下,需要在16进制编辑器中将第一行转换为ASCII码。
89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52
<?php phpinfo(); ?>

3 实验简介

3.1 实验目的

掌握绕过内容检测的方法,验证文件上传漏洞的存在。

3.2 实验环境

  1. 靶场:基于WAMP环境的upload-labs靶场,搭建过程可参考文章《基于WAMP环境的upload-labs漏洞测试平台搭建过程》。
  2. 攻击机:安装BurpSuite软件。

3.3 实验前准备

  1. 准备好一个图片马,该文件可能是木马,也可能是其他任意文件,本实验以php探针作为测试文件,来验证是否存在文件上传漏洞以及绕过漏洞检测的方法。
  2. 使用上面方法一生成的文件进行测试,文件名为:info.gif

4 实验过程

  1. 测试顺序:前端JS→MIME类型→文件后缀→文件内容。因为这个还要修改文件内容,相关工作量较大。
  2. 选择准备好的图片马进行上传。
    在这里插入图片描述
  3. 可以看到该文件直接上传成功,由于文件具体内容并非图片,因此此处无法正常显示图片内容。
    在这里插入图片描述
  4. 需要配合以后学习的文件包含漏洞、服务器解析漏洞等,才能让该文件成功执行。现在先直接在服务器找打上传的图片马,以记事本打开,可以看到里面的恶意代码并没有被删除,说明文件成功上传。
    在这里插入图片描述
  5. 结论:虽然服务器端无法运行文件中的代码(要执行需要配合服务器解析漏洞、文件包含漏洞等其他漏洞去实现,比如将该文件另存为php格式的文件等等),但是渗透测试报告中仍应记录该情况,存在任意文件上传漏洞。

5 总结

  1. 了解文件头部内容以及服务器检验文件内容与类型的方法;
  2. 掌握图片马的制作方法;
  3. 掌握绕过服务器端内容检测的方法。
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值