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

7.5 KiB
Raw Blame History

HTTP连接污染

☁️ HackTricks云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

本文内容摘自 https://portswigger.net/research/http-3-connection-contamination****

Web浏览器使用HTTP连接合并,允许它们为发送到不同网站的请求重用一个HTTP/2+连接,前提是这些网站解析到相同的IP地址并使用适用于两个主机名的TLS证书。

首次请求路由是一种危险的反向代理行为,代理分析连接上的第一个请求以确定将其路由到哪个后端,然后将该连接上的所有后续请求发送到同一个后端

连接合并和首次请求路由不兼容。例如假设secure.example.com和wordpress.example.com都位于一个反向代理后面使用一个对*.example.com有效的证书

$ 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,你可以利用它来危害secure.example.com

// 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" %}

fetch('//sub1.hackxor.net/', {mode: 'no-cors', credentials: 'include'}).then(()=>{ fetch('//sub2.hackxor.net/', {mode: 'no-cors', credentials: 'include'}) })

{% endcode %}

我还没有投入足够的时间来深入探索这个威胁或在野外进行扫描因为我认为它目前是罕见的有两个原因。首先第一次请求路由相对较少见而HTTP/2的实现复杂性意味着相对于HTTP/1.1唯一的HTTP/2服务器数量很少。其次连接合并意味着执行第一次请求路由的HTTP/2服务器可能会间断性地对真实访问者产生影响因此所有者可能会在没有攻击者鼓励的情况下修复漏洞。

尽管如此,对于攻击者来说并非全是坏消息。HTTP/3提议删除IP地址匹配的要求,这将暴露所有使用第一次请求路由并具有适用于多个主机的证书的前端的人

这也带来了第二个风险,与第一次请求路由无关 - 这意味着一个被入侵的具有通配符证书的服务器不再需要中间人攻击来利用。实际上,这极大地增加了可能从中获利的恶意行为者的数量。

为了在这些风险成为现实之前避免它们确保您的反向代理不执行第一次请求路由。您可以在Repeater中手动测试此功能方法是启用HTTP/1和HTTP/2连接重用并使用HTTP Request Smuggler中的'Connection-State'攻击进行扫描。此外请注意尽管通配符TLS证书从来都不是理想的选择但HTTP/3意味着一个被入侵的具有通配符证书的服务器现在可以用于攻击没有主动中间人攻击的同级域。

这些新的威胁延续了网络基础设施日益混乱的趋势,其中任何一个网站的弱点都会对整个系统的安全性产生许多非明显的连锁效应。有趣的是,我们将看到这些风险在实践中如何发挥作用。

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥