主机头注入是一种 Web 漏洞,当 Web 应用程序在未进行适当验证的情况下信任 HTTP 请求中的 Host 头值时,就会出现这种漏洞。攻击者可以操纵此头来影响服务器处理请求的方式,从而可能导致缓存中毒、密码重置中毒、Web 缓存欺骗,甚至在某些情况下导致完全帐户接管。
了解操纵主机头的各种方法对于攻击者和防御者都至关重要。下面我们将通过实际示例和说明,探讨最常见和最先进的主机头操纵技术。
常见的主机头注入技术
利用恶意域名进行欺骗
在 Host 标头中提供一个恶意域,以诱骗应用程序生成指向攻击者服务器的链接或重定向。
例子:
GET /reset-passwordHTTP/1.1Host: attacker.com
添加前缀
GET/admin.php HTTP/1.1Host: attackertarget.com
绝对 URL 路径
一些应用程序将 Host 标头解析为完整 URL 的一部分,这可能会被滥用来绕过过滤器或混淆后端逻辑。
例子:
GET/admin.php HTTP/1.1Host: https://target.com/admin.php
子域名绕过
使用子域名有时可以绕过仅查找主域名是否存在的简单主机验证检查。
例子:
GET/admin.php HTTP/1.1Host: subdomain.target.com
前导空格或制表符注入
某些服务器或代理可能会忽略或错误处理包含前导空格或制表符的标头,这可能会导致解析不一致和意外行为
例子:
GET/admin.php HTTP/1.1Host: target.com
指定不同的端口
在主机头中指定端口有时可以绕过基于主机的访问控制或混淆后端逻辑。
例子:
GET/admin.php HTTP/1.1Host: target.com:8080
使用 X-Forwarded-Host 标头
许多应用程序和代理使用 X-Forwarded-Host 标头来确定客户端请求的原始主机,使其成为注入的主要目标。
例子:
GET/admin.php HTTP/1.1X-Forwarded-Host: attacker.com
使用服务器的IP地址
提供服务器的 IP 地址而不是域名有时可以绕过虚拟主机路由或访问控制。
例子:
GET/admin.php HTTP/1.1Host: <target IP>
空白主机头
Host当标头为空时,某些服务器会出现异常行为或默认为第一个虚拟主机。
例子:
GET/admin.php HTTP/1.1Host:
多个主机头
发送多个主机头可以利用不同服务器组件(例如前端和后端解析)之间的不一致性。
例子:
GET/admin.php HTTP/1.1Host: target.comHost: attacker.com
同一 IP 上的另一个网站
如果同一台服务器上托管多个域,则指定不同的有效域有时可能会泄露敏感信息或访问非预期资源。
例子:
GET/admin.php HTTP/1.1Host: target2.com
高级且不太常见的技术
例子:
Host: internal-service.local
用例:绕过 SSRF 保护以访问内部 API 或元数据服务。
通过主机头注入进行 DNS 重新绑定
当与 DNS 重新绑定结合时,攻击者可能会使用恶意主机诱骗应用程序信任重新绑定域。
例子:
Host: rebinding.attacker.com
内部 Web 应用程序可能会处理该请求,从而允许攻击者绕过同源策略或内部网络保护
rbndr.us DNS 重绑定服务--本页面将帮助您生成用于测试软件中 DNS 重绑定漏洞的主机名。https://lock.cmpxchg8b.com/rebinder.html
带有特殊字符的主机头
注入特殊字符(例如空字节、CRLF 或 Unicode)有时可以绕过过滤器或导致解析错误。
例子:
GET/admin.php HTTP/1.1Host: target.com%00.attacker.com
带有路径遍历的主机头
一些配置错误的应用程序可能会将主机解析为路径的一部分,从而导致意外行为。
例子:
GET/admin.php HTTP/1.1Host: ../../attacker.com
带有编码值的主机头
URL 编码或双重编码主机值有时可以绕过验证。
例子:
GET /admin.php HTTP/1.1Host: %74%61%72%67%65%74.com
链接 X-Forwarded 标头以进行 SQLi 和 XSS 注入
滥用 HTTP 标头进行 XSS 和 SQLi:使用 X-Forwarded-Host 和 X-Forwarded-For 的技巧:
X-Forwarded-Host: evil.com"><img src/onerror=prompt(document.cookie)>X-Forwarded-Host:0'XOR(if(now()=sysdate(),sleep(10),0))XOR'Z
查找标头注入错误的工具
cURL
一款用于手动测试标头注入漏洞的多功能工具。
快速发送带有自定义标头的精心设计的请求,以识别错误配置或潜在漏洞。
例子:
curl -I -H "Host: attacker.com" https://target.comcurl -I -H "X-Forwarded-Host: attacker.com" https://target.com
Burp 插件
前往“Repeater”选项卡,选择“Host Header Injection”选项,然后选择所需的配置。该工具将开始逐个扫描主机头注入漏洞。您可以在“Flow”选项卡中监控进度。扫描完成后,您可以查看 Burp 仪表板,查看是否检测到任何主机头注入漏洞。
例子:
nuclei -u https://target.com -t x-forwarded.yaml
https://github.com/coffinxp/nuclei-templates/blob/main/x-forwarded.yamlFfuf
例子:
ffuf -u https://target.com -H "Host: FUZZ" -w hosts.txt
Gau / Waybackurls Gau/Waybackurls
cat domains.txt | whileread url; do curl -H "Host: attacker.com""$url"; done
自动化工具https://github.com/devanshbatham/headerpwn
现实世界的影响
主机头注入可能导致多种攻击,包括:
-
Web 缓存中毒:使用恶意内容毒害共享缓存。
-
密码重置中毒:导致密码重置电子邮件包含攻击者控制的链接。
-
开放重定向:将用户重定向到恶意网站。
-
绕过访问控制:获得对内部资源的未经授权的访问。
缓解策略
严格主机验证:仅允许预定义的受信任主机列表。
使用主机白名单:使用前根据已知安全列表验证主机名。
避免使用主机头:不要依赖主机头来构建关键链接或逻辑。
禁用不必要的标题:除非绝对必要,否则避免使用 X-Forwarded-Host、X-Host 等。
结论
主机头注入仍然是现代 Web 应用程序中的一个关键漏洞,尤其是在依赖虚拟主机或反向代理的应用程序中。通过了解和测试各种操纵技术,安全专业人员可以在攻击者利用这些问题之前更好地识别并修复这些问题。
原文始发于微信公众号(Ots安全):掌握主机头注入:技术、有效载荷和实际场景
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论