Pikachu靶场-目录遍历

目录遍历是一种常见的安全漏洞,攻击者通过操纵文件路径参数访问服务器上的受限文件或目录。以下是对该漏洞的详细解析:

1. 漏洞原理

核心问题:应用程序未对用户输入的文件路径进行严格验证,导致攻击者可构造特殊路径跳出预期目录。

常见场景

  • 文件下载/查看功能(如download.php?file=report.pdf)。
  • 文件包含(如include($_GET['page'] . '.php'))。
  • 上传文件路径处理不当。

2. 攻击方式

相对路径遍历

  • 使用../返回上级目录,如../../etc/passwd。
  • 组合使用路径分隔符(如..\、..//)。

绝对路径遍历

  • 直接输入系统绝对路径(如/var/www/config.php)。

编码绕过

  • URL编码:%2e%2e%2f(对应../)。
  • 双重编码:%252e%252e%252f(解码两次后为../)。
  • Unicode/UTF-8编码:如%c0%af(对应/)。

操作系统特性利用

  • Windows:使用反斜杠(..\)、..%5c或UNC路径(\\localhost\C$\file)。
  • Linux:使用正斜杠(/)或空字节绕过扩展名检查(../../etc/passwd%00.jpg)。

3. 漏洞危害

  • 敏感文件泄露:如/etc/passwd、/etc/shadow(Linux)或C:\Windows\win.ini(Windows)。
  • 应用程序配置暴露:数据库凭证(config.php)、日志文件等。
  • 系统文件篡改:若结合写入权限,可能植入后门或破坏系统。

4. 防御措施

输入验证与过滤

  • 白名单机制:仅允许指定字符(如字母、数字、短横线)。
  • 黑名单过滤:禁止../、..\等符号(需谨慎,易被绕过)。

路径规范化处理

  • 使用编程语言内置函数解析绝对路径(如Java的getCanonicalPath()、PHP的realpath())。
  • 确保最终路径限制在目标目录内(如检查是否以/var/www/uploads/开头)。

文件系统权限控制

  • 运行Web服务器的用户应仅有必要目录的最小权限。
  • 禁止Web用户访问系统关键文件。

安全配置

  • 关闭服务器目录列表功能。
  • 避免在错误信息中暴露文件路径。

安全编码实践

  • 使用安全的API处理文件操作(如Python的os.path.join()避免路径拼接)。
  • 禁用危险函数(如PHP的include直接包含用户输入)。

5. 测试与验证

手动测试

  • 修改参数值为../、..%2f等,观察是否返回敏感文件。
  • 尝试读取已知文件(如/etc/passwd)验证漏洞。

工具辅助

  • Burp Suite:拦截请求并修改参数进行Fuzzing。
  • OWASP ZAP:自动化扫描目录遍历漏洞。
  • DotDotPwn:专门测试路径遍历的工具。

6. 实际案例

  • 案例1:某CMS的图片下载功能未过滤file参数,攻击者通过image.php?file=../../../wp-config.php窃取数据库密码。
  • 案例2:文件共享服务允许用户输入绝对路径(C:\Users\admin\Documents\secret.txt),导致数据泄露。
  • 修复方案:更新版本中限制路径在指定目录,并过滤所有非字母数字字符。

7. 常见误区

  • 仅过滤部分字符:如仅替换../,但忽略编码或大小写变种(如..%255c)。
  • 依赖黑名单:更安全的做法是采用白名单+路径规范化。
  • 忽略操作系统差异:需针对部署环境(Linux/Windows)分别测试。

靶场实验部分:

1,观察网站,网站URL栏通过接收GET请求参数去实现文件包含功能

使用目录遍历的常见套路就能够读取危险的敏感文件

缺点是只能读取不能被PHP解释器解析的文件,无法通过泄露的源代码进行审计而后制定攻击形式

代码审计分析(目录遍历漏洞)

1. 漏洞位置

filename = _GET['title'];

require "soup/$filename";

  • 关键问题:未对用户输入的 title 参数进行过滤,直接拼接进文件路径并加载文件。
  • 攻击入口:通过构造 title 参数的值,攻击者可跳出 soup/ 目录,访问任意文件。

2. 漏洞利用示例

读取系统敏感文件

GET /dir_list.php?title=../../../../etc/passwd HTTP/1.1

实际加载路径:soup/../../../../etc/passwd,可能泄露 Linux 系统用户信息。

读取 Web 应用配置文件

GET /dir_list.php?title=../../../config.php HTTP/1.1

可能暴露数据库密码等敏感配置。

3. 漏洞成因

  1. 未校验用户输入
  • _GET\['title'\] 直接赋值给 filename,未过滤 ../ 等特殊字符。
  1. 路径拼接风险
  • 使用相对路径拼接 "soup/$filename",未限制文件访问范围。
  1. 危险函数调用
  • require 直接包含用户可控文件,若文件内容包含 PHP 代码,可能导致代码执行(需结合文件上传等其他漏洞)。

4. 修复建议

方案1:白名单限制文件名

// 仅允许指定文件名(如 jarheads.php、truman.php)

$allowed_files = ['jarheads.php', 'truman.php'];

if (in_array(_GET\['title'\], allowed_files)) {

filename = _GET['title'];

require "soup/$filename";

} else {

die("Invalid request!");

}

  • 优点:彻底杜绝目录遍历。
  • 缺点:需提前明确合法文件名列表。

方案2:剥离路径字符

// 使用 basename() 去除路径部分

filename = basename(_GET['title']);

require "soup/$filename";

  • 作用:确保 $filename 不含 / 或 \,例如 ../../etc/passwd 会被转换为 passwd。
  • 风险:若攻击者知道 soup/ 同级目录下的敏感文件名,仍可能访问非预期文件。

方案3:路径规范化校验

$base_dir = realpath('soup/'); // 获取 soup 目录绝对路径

filename = realpath("soup/" . _GET['title']);

// 校验路径是否在允许的目录下

if (filename !== false \&\& strpos(filename, $base_dir) === 0) {

require $filename;

} else {

die("Invalid file path!");

}

  • 优点:严格限制文件必须位于 soup/ 或其子目录下。
  • 注意:需处理 realpath() 返回 false 的情况(如文件不存在)。

5. 其他安全增强

  • 关闭错误回显
    ini_set('display_errors', 0);
    避免路径信息通过错误消息泄露。
  • 限制文件类型 (若适用):
    extension = pathinfo(_GET['title'], PATHINFO_EXTENSION);
    if ($extension !== 'php') {
    die("Only PHP files are allowed!");
    }

6. 漏洞验证测试

  1. 正常请求

GET /dir_list.php?title=jarheads.php HTTP/1.1

预期结果:正常加载 soup/jarheads.php。

  1. 恶意遍历请求

GET /dir_list.php?title=../../header.php HTTP/1.1

  • 预期结果(修复前):成功读取 header.php 文件内容。
  • 预期结果(修复后):返回错误提示。

7. 总结

  • 风险等级:高危(可导致敏感信息泄露,甚至远程代码执行)。
  • 修复优先级:需立即修复。
  • 推荐方案 :结合 白名单 + 路径规范化校验,实现多层防御。
相关推荐
用户9623779544815 小时前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机18 小时前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机18 小时前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户9623779544819 小时前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star19 小时前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954481 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher3 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
一次旅行6 天前
网络安全总结
安全·web安全
西岸行者6 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
red1giant_star6 天前
手把手教你用Vulhub复现ecshop collection_list-sqli漏洞(附完整POC)
安全