文件内容检测绕过

时间:2021-07-22 17:35:31   收藏:0   阅读:0

参考教程:《Upload Attack Framework V1.0》

1、文件上传检测
客户端javascript 检测(通常为检测文件扩展名)
服务端MIME 类型检测(检测Content-Type 内容)
服务端目录路径检测(检测跟path 参数相关的内容)、
服务端文件扩展名检测(检测跟文件extension 相关的内容)
服务端文件内容检测(检测内容是否合法或含有恶意代码)
服务端检测绕过(文件内容检测)
简介

如果文件内容检测设置得比较严格,那么上传攻击将变得非常困难

也可以说它是在代码层检测的最后一道关卡

如果它被突破了,就算没有代码层的漏洞

也给后面利用应用层的解析漏洞带来了机会

我们这里主要以最常见的图像类型内容检测来举例

检测内容:

 技术图片

 

 

2、文件幻数检测

主要是检测文件内容开始处的文件幻数,比如图片类型的文件幻数如下

要绕过jpg 文件幻数检测就要在文件开头写上下图的值

 技术图片

 

 

Value = FF D8 FF E0 00 10 4A 46 49 46

要绕过gif 文件幻数检测就要在文件开头写上下图的值

 技术图片

 

 

Value = 47 49 46 38 39 61

要绕过png 文件幻数检测就要在文件开头写上下面的值

 技术图片

 

 

Value = 89 50 4E 47

然后在文件幻数后面加上自己的一句话木马代码就行了,可以在文件结尾加上格式特有后缀

3、文件相关信息检测

图像文件相关信息检测常用的就是getimagesize()函数

只需要把文件头部分伪造好就ok 了,就是在幻数的基础上还加了一些文件信息

有点像下面的结构

GIF89a
(...some binary data for image...)
<?php phpinfo(); ?>
(... skipping the rest of binary data ...)

4、文件加载检测

简介

这个是最变态的检测了,一般是调用API 或函数去进行文件加载测试

常见的是图像渲染测试,再变态点的甚至是进行二次渲染(后面会提到)

对渲染/加载测试的攻击方式是代码注入绕过

对二次渲染的攻击方式是攻击文件加载器自身

对渲染/加载测试攻击- 代码注入绕过

可以用图像处理软件对一张图片进行代码注入

用winhex 看数据可以分析出这类工具的原理是

在不破坏文件本身的渲染情况下找一个空白区进行填充代码,一般会是图片的注释区

对于渲染测试基本上都能绕过,毕竟本身的文件结构是完整的

 

但如果碰到变态的二次渲染

基本上就没法绕过了,估计就只能对文件加载器进行攻击了

下面将来介绍二次渲染

比如上传文件前,文件的数据如下

 技术图片

 

 

然后上传这个 jpg 但把它重新下载回本地发现了奇怪的地方

 技术图片

 

 

我们的php 一句话木马不见了

可以看出上传后,图片被二次渲染过

新的JPG 图片内容里含有这个

CREATOR: gd-jpeg v1.0 (using IJG JPEG v62)

可以看出是调用的GD php 的gd 库

测试了gif 文件也一样

原文件内容是(虽然文件名是2.jpg,实际文件格式是 gif)

 技术图片

 

 

上传后下载回来对比

可以发现文件被重新渲染过

一句话代码也不见了

 技术图片

 

 

然后是进行 fuzzing 触发报错看下是被用什么 API 或函数进行的二次渲染

上传文件数据不完整的gif 文件

触发报错后,知道后台用的是 imagecreatefromgif() 这个函数

 技术图片

 

 

上传文件数据不完整的 png 文件

触发报错后,知道后台用的是 imagecreatefrompng()这个函数

 技术图片

 

 

某后台调用GD 库对图像进行二次渲染的代码

function image_gd_open($file, $extension)
{
$extension = str_replace(‘jpg‘, ‘jpeg‘, $extension);
$open_func = ‘imageCreateFrom‘. $extension; //函数名变成imageCreateFrompng 之类
if (!function_exists($open_func))
{
return FALSE;
}
return $open_func($file); //变成imagecreatefrompng(‘/tmp/php0lbTOn‘)
}


一般进行遇到二次渲染,想绕过,就目前个人经验还没想出方法

它相当于是把原本属于图像数据的部分抓了出来,再用自己的API 或函数进行重新渲染

在这个过程中非图像数据的部分直接就被隔离开了

能想到的一个思路就是基于数据二义性,即让数据既是图像数据也包含一句话木马代码

就像shellcode 通过数据二义性绕过IDS 检测特殊字符一样的道理

但现在我还不知道怎么构造出这样的图像文件

如果要对文件加载器进行攻击,常见的就是溢出攻击

上传自己的恶意文件后,服务器上的文件加载器会主动进行加载测试

加载测试时被溢出攻击执行shellcode

比如access/mdb 溢出

总之对文件完整性检测的绕过,通常就直接用个结构完整的文件进行代码注入即可

没必要再去测到底是检查的幻数还是文件头结构之类的了

 

原作者这个思路我貌似没有看到过,有哪位师傅尝试成功了请告诉小弟

这里分享一个二次渲染绕过的办法

https://blog.csdn.net/qq_40800734/article/details/105920149

 

还有个文件加密绕过

https://cloud.tencent.com/developer/article/1668787

 

来源:https://blog.csdn.net/Kevinhanser/article/details/81613003?utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-1.control

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!