别再死记硬背SSRF Payload了!从一道CTF题看file://协议绕过滤的N种思路
从防御者视角重构SSRF攻击file://协议绕过的系统化思维训练在CTF竞赛和实际渗透测试中服务器端请求伪造SSRF始终是Web安全领域的重点攻击向量。当防御方采用关键词过滤机制时攻击者往往需要突破常规思维框架通过协议特性、编码转换和路径解析的巧妙组合实现绕过。本文将以file://协议为例从防御原理出发逆向推导攻击路径帮助安全研究人员建立系统化的绕过思维模型。1. 理解防御机制关键词过滤的本质题目中的preg_match(/flag|proc|log/i, $url)是典型的黑名单过滤策略这种防御方式存在几个固有缺陷大小写不敏感匹配/i修饰符虽然扩大了拦截范围但无法防御编码变形静态关键词检测无法识别经过编码或混淆的路径表达协议特性盲区未考虑URI解析器与文件系统解析的差异性防御方视角的改进建议// 更严格的过滤方案示例 $parsed parse_url($url); if ($parsed[scheme] file) { $path urldecode($parsed[path]); $path preg_replace(/\//, /, $path); // 标准化路径 $path realpath($path); // 解析符号链接 if (preg_match(/\/(flag|proc|log)(\/|$)/i, $path)) { die(非法路径访问); } }2. 编码变形技术突破字符串匹配当直接的关键词被拦截时编码转换是最直接的绕过手段。不同层级的编码会产生迥异的效果2.1 单层URL编码将敏感字符转换为百分号编码file:///%66%6C%61%67 → flag file:///proc/self/cmdline → file:///%70%72%6F%63/%73%65%6C%66/%63%6D%64%6C%69%6E%652.2 双重编码攻击部分WAF只解码一次可利用二次编码绕过原始路径/flag 一次编码%2F%66%6C%61%67 二次编码%25%32%46%25%36%36%25%36%43%25%36%31%25%36%372.3 混合编码策略组合部分编码与明文形成混淆f%6Cag %66lag fl%61g3. 路径混淆艺术利用解析差异文件系统与URI解析器对路径的处理方式不同这种差异可被利用3.1 查询参数干扰插入?字符改变解析逻辑file:///etc/passwd?/ file:///etc/passwd%3F/ # URL编码版3.2 相对路径跳转结合目录遍历突破限制file:///var/www/../proc/self/status file:///tmp/../../etc/passwd3.3 路径标准化差异非常规路径表达示例file:///etc/./passwd file:///etc////passwd file:///etc/passwd/.4. 高级绕过技术动态字符串构造当基础过滤无法绕过时需要更精巧的构造技术4.1 环境变量拼接利用变量展开动态生成路径需特定环境支持file:${PATH%%:*}/etc/passwd file:$(echo fl echo ag)4.2 协议嵌套尝试某些场景下可尝试协议组合php://filter/convert.base64-encode/resourcefile:///etc/passwd4.3 特殊设备文件引用通过设备文件间接访问file:///dev/fd/3 # 需要预测文件描述符5. 防御对抗演进从绕过到防护现代防御体系已发展出多层次的SSRF防护方案防护层级技术实现绕过难度协议白名单只允许http/https★★★★★DNS重绑定检查验证目标IP范围★★★★请求结果校验检查返回内容特征★★★深度路径解析标准化后检测★★关键词过滤黑名单匹配★实际防御建议组合应用以下策略实施严格的协议白名单对file://协议强制路径标准化结合请求目标IP验证对返回内容进行敏感信息检测在CTF竞赛中遇到SSRF挑战时建议按照以下流程系统化思考确定可用协议file, http, dict等分析过滤规则关键词、长度、特殊字符测试基础编码绕过URL编码、双重编码尝试路径混淆技巧插入特殊字符、相对路径验证高级技巧变量拼接、协议嵌套理解这些技术原理的价值不仅在于CTF竞赛更能帮助安全工程师设计更健壮的防御方案。当你能系统性地思考绕过方法时自然也能构建出更完善的防护体系。