hacktricks/pentesting-web/abusing-hop-by-hop-headers.md
2023-08-03 19:12:22 +00:00

7.7 KiB
Raw Blame History

逐跳头部

☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 YouTube 🎥

RootedCON是西班牙最重要的网络安全活动之一,也是欧洲最重要的网络安全活动之一。作为促进技术知识的使命,这个大会是技术和网络安全专业人士的热点交流平台。

{% embed url="https://www.rootedcon.com/" %}

什么是逐跳头部?

逐跳头部是设计为由当前处理请求的代理进行处理和消费的头部,而不是端到端头部。

根据RFC 2616HTTP/1.1规范默认将以下头部视为逐跳头部:Keep-AliveTransfer-EncodingTEConnectionTrailerUpgradeProxy-AuthorizationProxy-Authenticate。当在请求中遇到这些头部时,符合规范的代理应该处理或执行这些头部所指示的操作,而不将它们转发到下一个跳点。

除了这些默认值,请求还可以通过将它们添加到Connection头部来定义一组自定义的逐跳头部,如下所示:

Connection: close, X-Foo, X-Bar

滥用逐跳头的理论

理论上,代理应该在发送到下一个地址之前删除接收到的逐跳头。但你会发现在实际中,有些代理确实这样做了,而其他代理则会发送所有头部,并添加自己的Connection头部。

测试逐跳删除

如果你发现某个头部在设置或不设置时会导致服务器响应发生显著变化那么你可以搜索逐跳删除。例如如果设置了Cookie头部包含有效内容服务器的响应将与不发送Cookie头部时截然不同。

因此发送一个带有有效头部的请求并使用以下Connection头部的值Connection: close, Cookie如果响应与未发送Cookie时相同则存在一个删除头部的代理。

你可以使用此脚本找出如果删除某个头部会导致服务器响应有何不同。然后,如果你传入已知头部的列表,例如此列表,你可以观察到哪些头部会产生效果,尽管它们不在你的原始请求中:

for HEADER in $(cat headers.txt); do python poison-test.py -u "https://target" -x "$HEADER"; sleep 1; done

这将循环遍历整个头列表,并打印出如果其在逐跳列表中的存在导致不同的状态码或响应体大小。

滥用 X-Forwarded-For

通常,代理会在 X-Forwarded-For 头中添加客户端的 IP以便下一个跳点知道请求的来源。然而如果攻击者发送一个类似 Connection: close, X-Forwarded-For 的 Connection 值,并且第一个代理发送了带有其值的逐跳头(它发送了特殊的 Connection 值),那么第二个值可能会删除 X-Forward-For 头。
最终的应用程序将不知道是谁发送了请求,并可能认为是最后一个代理发送的,而在这种情况下,攻击者可能能够访问由 IP 白名单保护的资源(也许是一些 /admin ?)。

根据目标系统的不同,您还可能有 ForwardedX-Real-IP 和其他一些不太常见的头。

检测代理和指纹识别服务

这种技术可能有助于检测代理(使用 cookie 技术)甚至检测服务。例如,如果您滥用此技术删除头 X-BLUECOAT-VIA 并抛出错误,则可以确定正在使用 Bluecoat。

其他攻击

  • 有关滥用此技术进行可能导致 DoS 缓存污染的攻击,请阅读原始链接
  • 这在可能允许您插入新头的攻击中可能很有用(概率较低)
  • 还可以用于绕过防御功能。例如,如果缺少一个头意味着请求不应该由 WAF 处理,您可以使用此技术绕过 WAF。

参考资料

{% embed url="https://nathandavison.com/blog/abusing-http-hop-by-hop-request-headers" %}

RootedCON西班牙最重要的网络安全活动之一,也是欧洲最重要的网络安全活动之一。作为促进技术知识的使命,这个大会是技术和网络安全专业人士在各个领域的热点交流。

{% embed url="https://www.rootedcon.com/" %}

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