CTFHUB靶场 信息泄露——目录遍历

0 阅读9分钟

做题步骤

开启靶场

在这里插入图片描述

在这里插入图片描述

点击开始寻找falg

在这里插入图片描述 可以看到是一个很简单的目录遍历漏洞

在这里插入图片描述

一个个查找即可

这里使用python代码

# 导入requests库,用于发送HTTP请求(这是Python处理网络请求的常用库)
import requests

# 定义目标基础URL,这是CTF挑战的目标地址
url = "http://challenge-b67d0cce15305e62.sandbox.ctfhub.com:10800/flag_in_here/"

# 外层循环:遍历0-4的数字(共5次),模拟第一层目录遍历
for i in range(5):
    # 内层循环:遍历0-4的数字(共5次),模拟第二层目录遍历
    for j in range(5):
        # 拼接完整的测试URL,格式为 基础URL/外层数字/内层数字
        # 例如:http://xxx/flag_in_here/0/0、http://xxx/flag_in_here/0/1 等
        url_test = url + "/" + str(i) + "/" + str(j)
        
        # 发送GET请求到拼接好的测试URL,获取响应对象
        r = requests.get(url_test)
        
        # 设置响应内容的编码格式为UTF-8,避免中文/特殊字符乱码
        r.encoding = 'utf-8'
        
        # 提取响应的文本内容(即网页的HTML源码或目录列表)
        get_file = r.text
        
        # 判断响应内容中是否包含"flag.txt"字符串(目标文件)
        if "flag.txt" in get_file:
            # 如果找到包含flag.txt的目录,打印该目录的完整URL
            print(url_test)

在这里插入图片描述

提交即可

在这里插入图片描述

目录遍历解析

目录遍历漏洞(也常被称为路径遍历漏洞 / 目录穿越漏洞)是 Web 安全领域中一类典型的文件系统访问控制漏洞,核心是攻击者利用应用程序对用户输入的路径参数处理不当,突破 Web 应用或服务器预设的访问边界,访问到系统中本不应被外部访问的目录和文件。以下从多个维度详细拆解:

一、漏洞的本质与核心成因

目录遍历漏洞的本质是应用程序对文件系统路径的访问控制失效,其核心成因可归纳为以下几点:

1.用户输入验证缺失 / 不足

应用程序未对用户提交的路径类输入(如文件名、目录名、文件路径参数)进行严格校验,既未过滤具有路径遍历意义的特殊字符 / 标识符,也未限制输入的长度、格式或范围,导致攻击者可构造恶意路径输入。

2.路径拼接逻辑缺陷

应用将用户可控的路径输入直接拼接到预设的基础路径(如 Web 根目录、应用工作目录)上,且未对拼接后的路径做 “规范化解析” 和 “边界校验”,使得拼接后的路径可指向预设范围外的目录 / 文件。

3.对文件系统权限的错误配置

运行 Web 应用的进程(如 Apache 的 www-data、Nginx 的 nginx 用户)被赋予了超出业务需求的文件系统权限,即使应用存在路径遍历的逻辑漏洞,若进程权限足够低,也无法访问敏感文件;反之则会放大漏洞危害。

4.依赖 “不可信的客户端输入”

开发者错误地假设 “用户输入是安全的”,直接使用用户提供的路径参数调用文件系统访问 API(如读取文件、写入文件、列出目录),未将用户输入视为 “不可信数据” 进行安全处理。

5.使用不安全的文件访问 API

部分编程语言 / 框架提供的文件访问 API 本身不具备路径校验能力,若开发者直接使用这类 API 且未做额外安全处理,极易触发路径遍历问题。

二、漏洞的核心运行机制

目录遍历漏洞的触发依赖于文件系统的路径解析规则和应用的路径处理逻辑,核心机制包括:

1.特殊路径标识符的解析

所有操作系统都定义了具有 “路径导航” 意义的特殊标识符(如../表示父目录、./表示当前目录、/表示根目录、~表示用户主目录),攻击者可通过构造包含这些标识符的输入,让应用程序解析出超出预设访问范围的路径。不同操作系统的路径分隔符差异(Linux/Unix 用/,Windows 用\或/)也会影响漏洞的触发形式,但核心逻辑一致。

2.路径规范化失效

应用程序未对拼接后的路径做 “规范化处理”(即解析所有特殊路径标识符,将相对路径转换为绝对路径),导致拼接后的路径在文件系统层面被解析为超出授权范围的绝对路径。例如,若应用预设路径为/var/www/html/,攻击者构造../etc/拼接后,未规范化的路径为/var/www/html/../etc/,而规范化后的绝对路径是/etc/,若应用未校验该绝对路径是否在授权范围内,就会访问到系统 /etc 目录。

3.Web 根目录与系统目录的边界突破

Web 应用通常会限定访问范围在 “Web 根目录”(Web Root)内(即对外提供服务的目录),目录遍历漏洞的核心是绕过这个边界,让应用访问 Web 根目录之外的系统级目录 / 文件(如系统配置目录、用户数据目录、系统日志目录等)。

三、漏洞的常见变体(触发形式)

目录遍历漏洞并非单一形式,攻击者会通过不同方式绕过应用的简易防护,常见变体包括: **1.直接路径遍历:**攻击者构造的输入直接包含路径遍历标识符(如../),应用未过滤直接解析,触发漏洞。 **2./编码绕过型:**攻击者对路径遍历标识符进行编码(如 URL 编码、Unicode 编码、双重编码等),绕过应用的简单字符过滤,应用在解析输入时会自动解码,最终仍解析出恶意路径。 **3.空字节截断绕过:**部分老旧的解析器 / 编程语言在处理文件路径时,遇到空字节(如%00)会截断后续内容,攻击者利用这一特性绕过应用对文件后缀的校验,访问任意文件。 **4.路径长度绕过:**利用部分系统 / 应用对路径长度的处理限制,构造超长路径绕过应用的字符过滤逻辑,最终解析出恶意路径。 **5.符号链接绕过:**攻击者利用文件系统的符号链接(软链接),让应用访问符号链接指向的未授权目录 / 文件,间接实现目录遍历。

四、漏洞的危害等级与具体影响

目录遍历漏洞的危害程度取决于应用进程的权限、目标系统的配置和攻击者的利用能力,核心危害包括: **1.敏感信息泄露:**攻击者可读取系统核心配置文件、应用源代码、用户隐私数据、系统日志、证书 / 密钥文件等,这些信息可能成为进一步攻击的基础。 **2.数据篡改 / 删除:**若应用进程具备写入 / 删除权限,攻击者可修改或删除应用核心文件、系统配置文件,导致应用崩溃、系统异常。 **3.权限提升:**通过读取系统权限配置文件(如用户密码哈希文件、权限策略文件),攻击者可进一步获取服务器的高权限账号,实现权限提升。 **4.服务器接管:**结合其他漏洞(如代码执行、命令注入),利用目录遍历获取的敏感信息,攻击者可实现对服务器的完全控制。 **5.合规性违规:**泄露用户隐私数据、企业核心数据会违反数据保护相关法规(如 GDPR、《个人信息保护法》),导致企业面临法律风险和声誉损失。

五、漏洞的核心防御机制

防御目录遍历漏洞的核心是 “阻断恶意路径的解析” 和 “限制访问边界”,具体防御手段可归纳为:

1.严格的输入验证(白名单优先)

优先使用 “白名单机制”:仅允许预定义的合法路径 / 文件名输入,拒绝所有未在白名单内的输入(比黑名单更安全,可避免绕过)。 **黑名单兜底:**若无法使用白名单,需过滤 / 转义所有路径遍历标识符(包括其编码形式),但需覆盖所有可能的变体。

2.路径规范化与边界校验

对拼接后的路径执行 “规范化解析”:使用编程语言 / 框架内置的路径规范化函数(如 Python 的os.path.abspath()、Java 的Paths.get().normalize()),将相对路径转换为绝对路径。 **边界校验:**校验规范化后的绝对路径是否在预设的授权目录(如 Web 根目录、应用工作目录)内,若超出则直接拒绝访问。

3. 最小权限原则

严格限制运行 Web 应用的进程权限,仅赋予其 “完成业务所需的最小文件系统权限”,即使漏洞被利用,也无法访问 / 修改高权限文件。

4.禁用危险 API 与安全编码

避免直接使用拼接路径的文件访问 API,优先使用框架提供的安全文件访问接口(如限定访问目录的封装接口)。 禁止将用户输入直接作为文件路径的一部分,若必须使用,需经过多层校验和规范化处理。

5.服务器层面的防护

配置 Web 服务器的访问限制:禁止 Web 服务器访问 Web 根目录外的目录(如 Apache 的DocumentRoot、Nginx 的root配置)。 启用服务器级别的安全模块:如 Apache 的mod_security、Nginx 的安全模块,可拦截常见的路径遍历攻击请求。

6.安全测试与持续监控

开发阶段:通过静态代码分析(SAST)检测路径拼接、文件访问相关的不安全代码。 上线前:通过动态应用安全测试(DAST)、渗透测试验证是否存在目录遍历漏洞。 运行阶段:监控异常的文件访问行为(如访问系统敏感目录、高频次路径遍历请求),及时告警并阻断。