文件上传漏洞

滥用压缩包

当文件上传功能接受并提取压缩包而没有适当的安全措施时,存在弱点。

滥用符号链接

tarzip 允许您在它们生成的压缩包中包含符号链接。如果应用程序没有正确验证压缩包的内容,它可能导致任意文件的读取/写入。

参考:

滥用 tar 权限

如果应用程序使用 Unix tar 命令提取 .tar 文件,删除符号链接并直接访问子目录,您可以尝试使用 tar 权限绕过符号链接删除过程。Unix tar 命令在创建压缩包时保留分配给它的 unix 权限。如果您创建一个没有人有读取权限的父目录(设置 chmod 为 300),同时创建具有完整权限的子目录(设置 chmod 为 700),您可以在子目录中包含符号链接,这些符号链接在符号链接删除过程中不会被找到,但在直接访问时会被找到,因为子目录具有读取权限。

$ mkdir parent
$ cd parent
$ tar cf a.tar . --mode=300
$ mkdir sub
$ cd sub
$ ln -s /etc/passwd file.txt
$ cd ..
$ tar -rf a.tar sub

Zip Slip

Zip Slip 利用可能包含文件的 zip,这些文件的名称中设置了特定的 payload,一旦提取,就会导致路径遍历,并且可以将任何文件写入 Web 服务器有权访问的任何目录。它可以影响多种压缩包格式,包括 tarjarwarcpioapkrar7z

滥用文件名

路径作为文件名

尝试使用不同类型的路径作为文件名:

  • 绝对路径,例如 filename=/etc/passwd

  • 相对路径,例如 filename=../../../../../../etc/passwd

  • UNC 路径,例如 filename=\\attacker-website.com\file.png

通过文件名注入

尝试通过文件名利用命令注入或 SQL 注入,例如 a$(whoami)z.pnga`whoami`z.pnga';select+sleep(10);--z.png

通过文件名进行 SSRF

尝试发送 URL 作为文件名来获取盲 SSRF,例如 filename=https://172.17.0.1/internal/file。您也可以尝试在请求中将 type="file" 更改为 type="url"

通过大文件名进行 DoS

尝试上传名称较大的文件,有时会导致 DoS。

参考:

绕过限制

Content-Type

尝试更改 Content-Type 值:

  • 允许的 MIME 类型 + 不允许的扩展名

  • 不允许的 MIME 类型 + 允许的扩展名

  • 删除 Content-Type

  • 在请求中发送两次 Content-Type,包含允许和不允许的 MIME 类型

魔数

如果应用程序使用文件的魔数来推断 Content-type,您可以尝试伪造允许文件的魔数来绕过安全措施。例如,如果允许 GIF 图像,您可以伪造 GIF 图像的魔数 GIF89a,使服务器认为我们正在向其发送有效的 GIF。

参考:

扩展名

尝试更改文件扩展名:

  • 不常见的扩展名,如 .phtml

  • 双重扩展名,如 .jpg.svg.svg.jpg

  • 带分隔符的扩展名,如 %0a%09%0d%00# 等。例如,file.png%00.svgfile.png\x0d\x0a.svg

  • 空扩展名,例如 file.

  • 大小写变化的扩展名,如 .sVG

  • 尝试用最大文件名长度切割允许的扩展名。

  • 空文件名,例如 .svg

  • 从右到左覆盖,例如 file.%E2%80%AEphp.jpg,参见报告:文件名中未剥离 RTL 覆盖符号

  • 在请求中发送两次文件名,包含允许和不允许的扩展名,例如 filename="file.png";filename="file.svg"

无效的正则表达式

Windows 点

在 Windows 中,当创建带有尾随句点的文件时,文件会在没有所述尾随字符的情况下保存,导致 Windows 文件上传上的潜在黑名单绕过。

例如,如果应用程序拒绝以 .aspx 结尾的文件,您可以上传名为 shell.aspx. 的文件。现在这个文件名将绕过黑名单,因为 .aspx != .aspx.,但在将文件保存到服务器时,Windows 会切掉尾随的 .,留下 shell.aspx

Windows ADS

备用数据流(ADS)是 NTFS 文件系统的一个鲜为人知的功能。它具有将数据分叉到现有文件而不改变其文件大小或功能的能力。换句话说,ADS 允许您将文件隐藏在另一个文件中。

以下示例将 calc.exe 的副本隐藏在 file.txt 中:

C:> echo Somedata > file.txt
C:> type file.txt
Somedata
C:> type c:\windows\system32\calc.exe > file.txt:calc.exe

要启动隐藏的 calc.exe 副本,您可以运行以下命令:

C:> start c:\file.txt:calc.exe

参考:

第三方漏洞

图像处理器中的漏洞

资源:

FFmpeg

ExifTool

ExifTool 版本 7.44 到 12.23(包括)在处理 djvu 文件时容易受到本地命令执行漏洞的攻击。如果应用程序接受上传文件,这些文件被传递给 ExifTool,它可能导致 RCE。

参考:

配置文件

一些服务器/框架在运行时使用配置文件来定义各种设置和限制。最著名的例子是 Apache httpd/Tomcat .htaccess 和 ASP.NET/IIS web.config 文件。您可以检查您的服务器/框架并尝试上传特定的配置来绕过一些安全措施甚至执行代码。

参考:

潜在危险的文件

ASP

尝试在 IIS 服务器上上传具有 aspashxasmxasaaspxcerxamlx 扩展名的文件以获得 RCE。

参考:

Adobe ColdFusion

尝试上传具有 cfmcfmlcfcdbm 扩展名的 ColdFusion 文件以获得 RCE。

Adobe ColdFusion SSRF

JSP

尝试上传具有 jspjspxjswjsvjspf 扩展名的 JSP 文件以获得 RCE。

Perl

尝试上传具有 plpmcgilib 扩展名的 perl 文件以获得 RCE。

SVG

XML

尝试上传带有外部实体的有效 XML 文件以获得 XXE。

参考:

竞态条件

文件上传竞态条件

如果应用程序在文件通过验证之前将文件直接上传到目标文件夹,您可以使用竞态条件来滥用这种行为。

假设文件上传具有以下流程:

  1. 将文件上传到目标文件夹

  2. 验证文件

  3. 如果验证失败,删除文件。否则,将链接发送给用户

您可以使用竞态条件在步骤 1 和 3 之间获取文件,而验证正在进行中。

参考:

基于 URL 的文件上传竞态条件

如果应用程序允许用户通过提供 URL 上传文件,并将文件提取到用户可访问的文件夹进行验证,您可以使用竞态条件来滥用这种行为。

假设文件上传具有以下流程:

  1. 从用户接收 URL

  2. 在用户可访问的文件夹中创建用于验证的本地副本

  3. 验证文件

  4. 如果验证失败,拒绝 URL。否则,将链接发送给用户

您可以使用竞态条件在步骤 2 和 4 之间获取文件,而验证正在进行中。

参考:

通过 HTTP 范围请求进行 SSRF

如果应用程序使用 HTTP 范围请求 从用户提供的链接下载文件,您可以尝试将请求的一个块重定向到内部服务器。

参考:

参考

最后更新于