web漏洞挖掘方法 - 文件上传绕过篇

admin 2024年12月27日17:12:17评论47 views字数 2359阅读7分51秒阅读模式
上一篇讲了文件上传。这一篇讲一下文件上传绕过,文件上传功能如果没有妥善的防护,可能成为攻击者利用的一个重要漏洞。攻击者可以通过多种方式绕过文件上传的安全检查,上传并执行恶意文件,从而控制目标服务器。
web漏洞挖掘方法 - 文件上传绕过篇

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 BytesFF D8 FF E0 00 10 4A 46 49 46 <?php// PHP Web Shellif(isset($_REQUEST['cmd'])){echo"<pre>" . shell_exec($_REQUEST['cmd']) . "</pre>";}?>
文件类型
Magic Bytes(二进制值)
JPG
FF D8 FF E0 00 10 4A 46 49 46
GIF
47 49 46 38 39 61
PNG
89 50 4E 47
TIF
49 49 2A 00
BMP

42 4D

3. 后缀绕过

绕过方式:一些 Web 应用仅依赖文件扩展名(如 .php、.jpg)来检查文件类型。攻击者可以尝试上传带有绕过后缀的文件,利用服务器的解析引擎绕过上传限制。例子:PHP后缀绕过:在 PHP 环境下,有些服务器可能允许上传扩展名为 .php5、.phtml 等的文件。这些后缀仍然会被解析为 PHP 脚本,因此可以用于绕过检查。攻击步骤:将恶意 Web Shell 文件的扩展名从 .php 改为 .phtml 或 .php5,上传文件。由于某些 PHP 解析器对 .phtml 或 .php5 后缀的文件进行处理,上传的文件会被执行,从而触发恶意代码。php// 将以下 PHP Shell 保存为 shell.php5<?phpif (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.iniauto_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漏洞挖掘方法 - 文件上传绕过篇

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月27日17:12:17
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   web漏洞挖掘方法 - 文件上传绕过篇https://cn-sec.com/archives/3561311.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息