Host-header-injection
字数 1183 2025-08-29 08:32:09
Host Header Injection 漏洞分析与防御指南
0x01 漏洞原理
Host Header Injection(主机头注入)是一种由于服务器对Host头部处理不当而导致的安全漏洞。其核心原理如下:
-
HTTP Host头部的作用:在共享主机环境下,一个Web服务器通常托管多个网站,Host头部用于区分客户端请求的是哪个网站。
-
漏洞产生原因:当服务器直接信任并使用了客户端提供的Host头部值,而没有进行适当的验证和过滤时,就可能产生安全问题。
-
典型漏洞代码示例:
<a href="http://<?php echo $_SERVER['HOST'] ?>">Redirect</a>
这段代码直接使用了$_SERVER['HOST'](可通过HTTP请求修改)来构建重定向链接,存在安全隐患。
0x02 黑盒测试方法
测试步骤
-
直接修改Host头部:
GET / HTTP/1.1 Host: malicious.com -
参数污染技术:
GET / HTTP/1.1 Host: example.com Host: malicious.com -
使用伪造请求头:
GET / HTTP/1.1 Host: example.com X-Forwarded-For: malicious.com
测试用例
- 观察服务器响应中是否直接使用了提供的Host值
- 检查是否有基于Host头部的重定向行为
- 验证是否有缓存机制会受到Host头部影响
0x03 漏洞危害
1. 缓存投毒 (Cache Poisoning)
攻击流程:
- 正常访问example.com
- 服务器返回302跳转到
https://www.example.com/login - 修改请求头Host为malicious.com
- 服务器返回302跳转到
https://www.malicious.com/login - 后续用户访问example.com时可能被直接跳转到恶意网站
2. 开放重定向 (Open Redirection)
通过修改Host头部,攻击者可构造恶意重定向链接:
HTTP/1.1 302 Found
Location: http://malicious.com
3. CRLF注入
利用Host头部注入CRLF(回车换行)字符:
Host: example.com%0d%0aSet-Cookie:test=true;
可能导致HTTP响应头注入,设置恶意cookie等。
4. 密码重置劫持
攻击流程:
- 正常密码重置链接:
http://www.example.com/Token/ - 修改Host为malicious.com
- 用户收到的重置链接变为:
http://www.malicious.com/Token/ - 用户点击后,攻击者可从服务器日志获取Token
0x04 修复方案
1. Host白名单验证
$allowed_hosts = ['example.com', 'www.example.com'];
if (!in_array($_SERVER['HTTP_HOST'], $allowed_hosts)) {
die("Invalid Host header");
}
2. 获取真实Host
- 配置Web服务器只响应特定的Host
- 在Nginx中:
server {
listen 80;
server_name example.com www.example.com;
if ($host !~* ^(example.com|www.example.com)$ ) {
return 444;
}
...
}
3. 其他防御措施
- 避免直接使用Host头部构建URL或重定向
- 对用户提供的Host值进行严格验证和过滤
- 使用SERVER_NAME代替HTTP_HOST(但需注意其可能受服务器配置影响)
- 实施严格的CRLF过滤
总结
Host Header Injection是一种由于服务器过度信任客户端提供的Host头部而导致的安全漏洞,可能导致缓存投毒、开放重定向、CRLF注入和密码重置劫持等多种攻击。通过实施Host白名单、严格验证用户输入和正确配置服务器,可以有效防御此类漏洞。