CRLF注入
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/crlf-injection-g92c。
技能介绍
要解决的具体问题
HTTP 响应头通过 CRLF(即 \r\n,URL 编码为 %0D%0A)分隔。当用户输入被反射到响应头且未过滤时,攻击者可注入 CRLF 字符,伪造新头或直接插入响应体,导致 HTTP 响应拆分。这种漏洞常被扫描器忽略,却能串联成 XSS、会话固定、缓存投毒 等攻击链。
技能如何工作
该技能以「探测 → 利用 → 绕过 → 实战链」为主线,覆盖 CRLF 注入的核心能力与关键步骤:
- 检测机制:使用 双重 CRLF 作为基础探针。两个连续
CRLF会结束头部并开启响应体,直接验证体注入可行性。 - 利用场景:
- 通过 Set-Cookie 注入实现 会话固定;
- 利用双 CRLF 注入响应体触发 XSS;
- 污染 CDN/代理缓存,对所有用户返回恶意内容,造成 缓存投毒;
- 在日志字段(如 User-Agent、Referer)中注入 CRLF,伪造日志条目,实现 日志注入。
- 过滤绕过:针对常见过滤策略,提供多种绕过方式,例如:
- 当 %0D%0A 被拦截时,改用 %0D、%0A 或 Unicode 编码 %E5%98%8A%E5%98%8D;
- 当 URL 只解码一次时,采用双重编码 %250D%250A;
- 当仅过滤值部分时,尝试在参数名中注入。
- 实战链:支持 CRLF + 会话固定、CRLF → XSS(通过双
CRLF体注入)、302 Location 中的 CRLF → 重定向劫持 等真实攻击路径。
适用边界与注意点
- 依赖服务特性:Java 服务场景下,若
%0D%0A或\r\n被 WAF 拦截,需结合ghost-bits-cast-attack技能,通过 Unicode 字符(如瘍(U+760D,低字节\r)和瘊(U+760A,低字节\n))绕过,利用 Angus Mail、Jakarta Mail SMTP、Apache HttpClient 头、JDK HttpServer 响应、ActiveJ HTTP 等组件的解析特性。 - 过滤与编码:过滤规则可能仅拦截特定编码或位置,需根据实际环境调整注入方式(如参数名注入、Unicode 编码、双重编码等)。
- 实战限制:利用效果依赖目标服务是否缓存响应、是否反射用户输入到响应头,以及是否存在可利用的组件(如邮件客户端、HTTP 库)。
使用场景
- 在渗透测试中,当 Web 应用把 URL 参数回写到响应头时,用双重 CRLF 验证能否注入响应体或伪造 Set-Cookie
- 遇到 WAF 拦截 %0D%0A 时,尝试 %0D、%0A 或 Unicode 编码绕过过滤器,继续测试 CRLF 注入
- 排查缓存投毒风险时,向可被 CDN 缓存的接口注入 CRLF,观察是否对所有用户返回被污染的响应
- 测试 302 跳转功能时,检查 Location 头中的 CRLF 能否被利用做重定向劫持
适合人员
- Web 安全工程师,需要在渗透测试中验证 CRLF 注入并给出可复现的攻击路径
- 应用安全研发人员,需要在代码与中间件层设计防御并验证过滤绕过风险
- 运维与基础架构工程师,需要评估 CDN、代理和日志链路上的 CRLF 注入影响
- 安全测试团队,需要将 CRLF 注入纳入 Web 与接口安全测试用例清单