当前位置: 首页 > news >正文

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

  • 风险等级:高危(可导致敏感信息泄露,甚至远程代码执行)。
  • 修复优先级:需立即修复。
  • 推荐方案:结合 白名单 + 路径规范化校验,实现多层防御。

 

 

 

 

 

相关文章:

  • 单相交直交变频电路设计——matlab仿真+4500字word报告
  • Python multiprocessing.Pool中,pool.close() 和 pool.join() 的作用
  • 【JavaScript】关系运算符--非数值类型、Unicode编码表
  • Pmax非英语国家投广,Feed语言和货币问题解决策略
  • Laravel5.7的一些用法
  • DuckDB:现代数据分析的“SQLite“内核革命
  • 人类社会的第四阶段
  • web字符转义
  • 特伦斯智慧钢琴:开启智能钢琴新体验
  • 国产免费工作流引擎star 5.9k,Warm-Flow版本升级1.7.0(新增大量好用功能)
  • FreeMarker语法深度解析与Node.js集成实践指南
  • 使用Nestjs, Bun 和 NCC 打造高效的 Node.js 应用构建流程
  • 高校毕业论文管理系统小程序实现
  • Spring MVC 多个拦截器的执行顺序
  • AI测试工具Testim——告别自动化测试维护难题
  • 开源|上海AILab:自动驾驶仿真平台LimSim Series,兼容端到端/知识驱动/模块化技术路线
  • git每次push都要输入用户名和密码很繁琐,只在第一次输入之后都不需要的解决方法
  • 企业架构之旅(1):TOGAF 基础入门
  • AI如何重塑DDoS防护行业?六大变革与未来展望
  • 【计算机网络分类全解析】从局域网到广域网的工程实践
  • 北京公园使用指南
  • 新经济与法|如何治理网购刷单与控评?数据合规管理是关键
  • 国家发改委:建立实施育儿补贴制度
  • 黄永年:说狄仁杰的奏毁淫祠
  • 游戏论|迟来的忍者与武士:从《刺客信条:影》论多元话语的争议
  • 永辉超市一季度净利降近八成,未来12个月至18个月是改革成果集中释放期