当文件上传功能接受并提取压缩包而没有适当的安全措施时,存在弱点。
tar 和 zip 允许您在它们生成的压缩包中包含符号链接。如果应用程序没有正确验证压缩包的内容,它可能导致任意文件的读取/写入。
参考:
如果应用程序使用 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,这些文件的名称中设置了特定的 payload,一旦提取,就会导致路径遍历,并且可以将任何文件写入 Web 服务器有权访问的任何目录。它可以影响多种压缩包格式,包括 tar、jar、war、cpio、apk、rar 和 7z。
尝试使用不同类型的路径作为文件名:
绝对路径,例如 filename=/etc/passwd
相对路径,例如 filename=../../../../../../etc/passwd
UNC 路径,例如 filename=\\attacker-website.com\file.png
尝试通过文件名利用命令注入或 SQL 注入,例如 a$(whoami)z.png、a`whoami`z.png 或 a';select+sleep(10);--z.png
尝试发送 URL 作为文件名来获取盲 SSRF,例如 filename=https://172.17.0.1/internal/file。您也可以尝试在请求中将 type="file" 更改为 type="url"。
尝试上传名称较大的文件,有时会导致 DoS。
参考:
尝试更改 Content-Type 值:
在请求中发送两次 Content-Type,包含允许和不允许的 MIME 类型
如果应用程序使用文件的魔数来推断 Content-type,您可以尝试伪造允许文件的魔数来绕过安全措施。例如,如果允许 GIF 图像,您可以伪造 GIF 图像的魔数 GIF89a,使服务器认为我们正在向其发送有效的 GIF。
参考:
尝试更改文件扩展名:
双重扩展名,如 .jpg.svg 或 .svg.jpg
带分隔符的扩展名,如 %0a、%09、%0d、%00、# 等。例如,file.png%00.svg 或 file.png\x0d\x0a.svg
在请求中发送两次文件名,包含允许和不允许的扩展名,例如 filename="file.png";filename="file.svg"
在 Windows 中,当创建带有尾随句点的文件时,文件会在没有所述尾随字符的情况下保存,导致 Windows 文件上传上的潜在黑名单绕过。
例如,如果应用程序拒绝以 .aspx 结尾的文件,您可以上传名为 shell.aspx. 的文件。现在这个文件名将绕过黑名单,因为 .aspx != .aspx.,但在将文件保存到服务器时,Windows 会切掉尾随的 .,留下 shell.aspx。
备用数据流(ADS)是 NTFS 文件系统的一个鲜为人知的功能。它具有将数据分叉到现有文件而不改变其文件大小或功能的能力。换句话说,ADS 允许您将文件隐藏在另一个文件中。
以下示例将 calc.exe 的副本隐藏在 file.txt 中:
要启动隐藏的 calc.exe 副本,您可以运行以下命令:
参考:
资源:
Zeronights 2021:Emil Lerner – HotPics
ExifTool 版本 7.44 到 12.23(包括)在处理 djvu 文件时容易受到本地命令执行漏洞的攻击。如果应用程序接受上传文件,这些文件被传递给 ExifTool,它可能导致 RCE。
参考:
一些服务器/框架在运行时使用配置文件来定义各种设置和限制。最著名的例子是 Apache httpd/Tomcat .htaccess 和 ASP.NET/IIS web.config 文件。您可以检查您的服务器/框架并尝试上传特定的配置来绕过一些安全措施甚至执行代码。
参考:
尝试在 IIS 服务器上上传具有 asp、ashx、asmx、asa、aspx、cer 或 xamlx 扩展名的文件以获得 RCE。
参考:
Adobe ColdFusion
尝试上传具有 cfm、cfml、cfc 或 dbm 扩展名的 ColdFusion 文件以获得 RCE。
Adobe ColdFusion SSRF
尝试上传具有 jsp、jspx、jsw、jsv 或 jspf 扩展名的 JSP 文件以获得 RCE。
尝试上传具有 pl、pm、cgi 或 lib 扩展名的 perl 文件以获得 RCE。
尝试上传带有外部实体的有效 XML 文件以获得 XXE。
参考:
如果应用程序在文件通过验证之前将文件直接上传到目标文件夹,您可以使用竞态条件来滥用这种行为。
假设文件上传具有以下流程:
您可以使用竞态条件在步骤 1 和 3 之间获取文件,而验证正在进行中。
参考:
基于 URL 的文件上传竞态条件
如果应用程序允许用户通过提供 URL 上传文件,并将文件提取到用户可访问的文件夹进行验证,您可以使用竞态条件来滥用这种行为。
假设文件上传具有以下流程:
如果验证失败,拒绝 URL。否则,将链接发送给用户
您可以使用竞态条件在步骤 2 和 4 之间获取文件,而验证正在进行中。
参考:
通过 HTTP 范围请求进行 SSRF
如果应用程序使用 HTTP 范围请求 从用户提供的链接下载文件,您可以尝试将请求的一个块重定向到内部服务器。
参考: