hacktricks/pentesting-web/http-connection-contamination.md
2023-08-03 19:12:22 +00:00

73 lines
7.5 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.

# HTTP连接污染
<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>🐦 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>
**本文内容摘自** [**https://portswigger.net/research/http-3-connection-contamination**](https://portswigger.net/research/http-3-connection-contamination)\*\*\*\*
Web浏览器使用[**HTTP连接合并**](https://daniel.haxx.se/blog/2016/08/18/http2-connection-coalescing),允许它们为发送到**不同网站**的请求**重用**一个**HTTP/2+连接**,前提是这些网站**解析到相同的IP地址**并使用适用于两个主机名的TLS证书。
**首次请求路由**是一种危险的反向代理行为,代理分析连接上的**第一个请求**以确定将其路由到**哪个后端**,然后将该连接上的所有**后续请求**发送到**同一个后端**。
**连接合并和首次请求路由不兼容**。例如假设secure.example.com和wordpress.example.com都位于一个反向代理后面使用一个对\*.example.com有效的证书
```shell-session
$ nslookup wordpress.example.com
52.16.179.7 // reverse proxy that supports HTTP/2 and does first-request routing
$ nslookup secure.example.com
52.16.179.7 // same reverse proxy
$ openssl s_client -connect x.portswigger-labs.net:443
subject=/CN=*.example.com // wildcard TLS certificate
```
如果浏览器尝试发送一个请求到`wordpress.example.com`,然后是`secure.example.com`,浏览器连接合并将强制将这两个请求通过单个连接发送到前端。首次请求路由将导致将请求发送到`secure.example.com`的错误路由到WordPress后端。这意味着如果你在`wordpress.example.com`上发现了[XSS](https://portswigger.net/web-security/cross-site-scripting),你可以利用它来危害`secure.example.com`
```javascript
// create HTTP/2+ connection
fetch('https://wordpress.example.com/', {credentials: 'include'})
// connection coalescing will force this down the same connection...
// ...leading to the front-end misrouting it to WordPress
// the browser thinks our injected JS is coming from secure.example.com
// exposing saved passwords, cookies, etc.
location='https://secure.example.com/plugin/x?q=<script>stealPasswords()'
```
你可以使用Chrome开发者工具中的网络选项卡下的**时间图**或者如果你是个受虐狂可以使用Wireshark来**探索连接合并**。使用fetch()发出请求对并观察图表是否显示第二个请求的“初始连接”所花费的时间并且连接ID列是否匹配
{% code overflow="wrap" %}
```javascript
fetch('//sub1.hackxor.net/', {mode: 'no-cors', credentials: 'include'}).then(()=>{ fetch('//sub2.hackxor.net/', {mode: 'no-cors', credentials: 'include'}) })
```
{% endcode %}
<figure><img src="../.gitbook/assets/image (1) (1) (3).png" alt=""><figcaption></figcaption></figure>
我还没有投入足够的时间来深入探索这个威胁或在野外进行扫描因为我认为它目前是罕见的有两个原因。首先第一次请求路由相对较少见而HTTP/2的实现复杂性意味着相对于HTTP/1.1唯一的HTTP/2服务器数量很少。其次连接合并意味着执行第一次请求路由的HTTP/2服务器可能会间断性地对真实访问者产生影响因此所有者可能会在没有攻击者鼓励的情况下修复漏洞。
尽管如此,对于攻击者来说并非全是坏消息。**HTTP/3提议**[**删除IP地址匹配的要求**](https://www.rfc-editor.org/rfc/rfc9114.html#name-connection-reuse)**,这将暴露所有使用第一次请求路由并具有适用于多个主机的证书的前端的人**。
这也带来了第二个风险,与第一次请求路由无关 - 这意味着一个**被入侵的具有通配符证书的服务器不再需要中间人攻击来利用**。实际上,这极大地增加了可能从中获利的恶意行为者的数量。
为了在这些风险成为现实之前避免它们确保您的反向代理不执行第一次请求路由。您可以在Repeater中手动测试此功能方法是启用HTTP/1和HTTP/2连接重用并使用[HTTP Request Smuggler](https://github.com/PortSwigger/http-request-smuggler)中的'Connection-State'攻击进行扫描。此外请注意尽管通配符TLS证书从来都不是理想的选择但HTTP/3意味着一个被入侵的具有通配符证书的服务器现在可以用于攻击没有主动中间人攻击的同级域。
这些新的威胁延续了网络基础设施日益混乱的趋势,其中任何一个网站的弱点都会对整个系统的安全性产生许多非明显的连锁效应。有趣的是,我们将看到这些风险在实践中如何发挥作用。
<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)
* 发现我们的独家[NFT收藏品**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>