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. 总结

  • 风险等级:高危(可导致敏感信息泄露,甚至远程代码执行)。
  • 修复优先级:需立即修复。
  • 推荐方案 :结合 白名单 + 路径规范化校验,实现多层防御。
相关推荐
IT古董3 小时前
【MES学习笔记系列】05 - MES 数据库设计
笔记·学习·mes
笨鸟先飞,勤能补拙4 小时前
AI 安全的下一个 5 年:从 Agent 到 AGI 的攻防博弈
人工智能·python·安全·web安全·网络安全·github·agi
LATASA5 小时前
【 从0到1构建 Agent Harness学习笔记】
网络·笔记·学习
数据知道5 小时前
SQL 注入从入门到精通:手工注入 + sqlmap 自动化
网络·数据库·sql·网络安全·自动化
weixin_431600445 小时前
做 Agent 会用到的 Node API(3):异步与流
前端·学习·ai·agent·ai编程
70asunflower6 小时前
Triton 从 0 到 1 完整学习教程
学习·triton
天国梦6 小时前
2026年英语教学数字化工具深度测评:天学网、腾讯英语君、翼课网横向对比
人工智能·学习
数据知道6 小时前
OWASP Top 10 实战通关指南:总览篇
网络·安全·网络安全
雨辰AI6 小时前
K8s 国产数据库慢 SQL 自动监控|Prometheus+Grafana 可视化全落地
数据库·sql·安全·容器·kubernetes·grafana·prometheus
oier_Asad.Chen8 小时前
【OI学习笔记】Floyed-Warshall算法解决传递闭包问题
c++·笔记·学习·算法·图论·最短路·传递闭包