初识Host注入及Burp插件开发
字数 1295 2025-08-13 21:33:20

HTTP Host头注入漏洞分析与Burp插件开发指南

1. HTTP Host头基础

HTTP协议从1.0到1.1及后续版本中,Host头指定了请求资源的Internet主机和端口号。在HTTP/1.1中,Host头的主要功能是将客户端请求分发到内部具体的域名中。

1.1 Host头的作用机制

  • 虚拟主机区分:当一台服务器托管多个网站时,通过Host头区分不同域名
  • 解析流程
    客户端 → 请求 → URL → 解析IP地址 → 服务器 → 解析Host值 → 转发到具体域名
    

1.2 常见配置场景

  • 基于端口的虚拟主机:不同web程序通过不同端口区分
  • 基于域名的虚拟主机:多个域名解析到同一IP,通过Host头区分

2. Host头注入漏洞原理

2.1 漏洞成因

  • 用户可控制HTTP Host头
  • 服务器过度信任客户端提交的Host值
  • 应用程序可能支持额外标头:
    • X-Forwarded-Host
    • X-Host

2.2 常见危险代码示例

<link href=http://_SERVER["HTTP_HOST"]></link>  // 触发GET请求
<form method="POST"></form>  // 触发POST请求

3. Host头注入的安全风险

3.1 密码重置劫持

攻击流程

  1. 攻击者请求密码重置功能
  2. 修改Host头或添加X-Forwarded-Host为恶意域名
  3. 服务器使用伪造Host生成重置链接
  4. 受害者点击恶意链接,令牌泄露

示例

请求头:X-Forwarded-Host: evil.com
生成链接:https://evil.com/user/reset_password/...令牌...

3.2 XSS攻击

  • 网站根据Host加载CSS样式表
  • 恶意Host可插入HTML代码
  • 可能导致网络钓鱼攻击

3.3 Web缓存投毒

攻击原理

  • 发送导致有害响应的请求
  • 有害响应被缓存并服务其他用户

Nginx特殊行为

  • 只识别最后一个Host头
GET / HTTP/1.1
Host: test.com
Host: vuln.com

3.4 补充风险

  • 无效Host头通常被转发到第一个虚拟主机
  • Apache配置可能将任意Host请求转发给应用

4. Burp被动检测插件开发

4.1 插件设计思路

  1. 使用Burp Collaborator生成DNSLOG地址
  2. 过滤掉403和404响应
  3. 替换Host字段为DNSLOG地址
  4. 构造并发送请求
  5. 检测响应中的注入迹象

4.2 关键代码实现

class BurpExtender(IBurpExtender, IScannerCheck, IBurpCollaboratorClientContext):
    def registerExtenderCallbacks(self, callbacks):
        # 基本设置
        self._callbacks = callbacks
        self._helpers = callbacks.getHelpers()
        callbacks.setExtensionName('Host Scan')
        
        # 生成DNSLOG payload
        self.collaboratorContext = callbacks.createBurpCollaboratorClientContext()
        self.payload = self.collaboratorContext.generatePayload(True)
        
        # 注册扫描器
        callbacks.registerScannerCheck(self)
    
    def doPassiveScan(self, baseRequestResponse):
        # 获取请求头部
        request = baseRequestResponse.getRequest()
        analyzedRequest = self._helpers.analyzeRequest(request)
        request_header = analyzedRequest.getHeaders()
        
        # 构造新请求
        new_req_header = [h.replace("Host:", "Host: " + self.payload) for h in request_header]
        newMessage = self._helpers.buildHttpMessage(new_req_header, request_body)
        
        # 发送请求并分析响应
        newIHttpRequestResponse = self._callbacks.makeHttpRequest(httpService, newMessage)
        newResponse = newIHttpRequestResponse.getResponse()
        newResponseInfo = self._helpers.analyzeResponse(newResponse)
        
        # 检测注入迹象
        issues = []
        if str(newResponseStatus) in ['301', '302'] and self.payload in str(newResponseHeader):
            issues.append(self.createIssue("Host injection in Header!", "Medium"))
            
        if re.search(r'(http|https)(://|%3A%2F%2F)' + self.payload, newResponseBody):
            issues.append(self.createIssue("Host injection in Body!", "Medium"))
            
        if self.collaboratorContext.fetchCollaboratorInteractionsFor(self.payload):
            issues.append(self.createIssue("Host injection!", "High"))
            
        return issues

4.3 检测逻辑

  1. 响应头检测:检查301/302跳转中的Location头
  2. 响应体检测:搜索响应体中是否包含payload
  3. 交互检测:通过Collaborator检查是否有DNS/HTTP请求

4.4 扩展测试建议

  • 同时测试X-Forwarded-HostX-Host标头
  • 测试不同位置(参数、重定向等)的Host头注入

5. 防御措施

  1. 不信任原则:所有客户端可控的值都不可信
  2. 白名单验证:对Host头实施严格的白名单校验
  3. 路径处理
    • 优先使用相对路径:/test/1.php
    • 如需绝对路径,硬编码域名:https://example.com/test/1.php
  4. 禁用不必要标头:如X-Forwarded-HostX-Host
  5. 安全编码:对输出到页面的Host值进行HTML编码

6. 参考资源

  1. 实战web缓存中毒
  2. 浅谈http中的Cache-Control
  3. Burp Suite官方文档
  4. OWASP Host头注入防护指南

通过本文档,您可以全面了解HTTP Host头注入漏洞的原理、危害、检测方法及防御措施,并掌握基于Burp Suite的自动化检测插件开发技术。

HTTP Host头注入漏洞分析与Burp插件开发指南 1. HTTP Host头基础 HTTP协议从1.0到1.1及后续版本中,Host头指定了请求资源的Internet主机和端口号。在HTTP/1.1中,Host头的主要功能是将客户端请求分发到内部具体的域名中。 1.1 Host头的作用机制 虚拟主机区分 :当一台服务器托管多个网站时,通过Host头区分不同域名 解析流程 : 1.2 常见配置场景 基于端口的虚拟主机 :不同web程序通过不同端口区分 基于域名的虚拟主机 :多个域名解析到同一IP,通过Host头区分 2. Host头注入漏洞原理 2.1 漏洞成因 用户可控制HTTP Host头 服务器过度信任客户端提交的Host值 应用程序可能支持额外标头: X-Forwarded-Host X-Host 2.2 常见危险代码示例 3. Host头注入的安全风险 3.1 密码重置劫持 攻击流程 : 攻击者请求密码重置功能 修改Host头或添加 X-Forwarded-Host 为恶意域名 服务器使用伪造Host生成重置链接 受害者点击恶意链接,令牌泄露 示例 : 3.2 XSS攻击 网站根据Host加载CSS样式表 恶意Host可插入HTML代码 可能导致网络钓鱼攻击 3.3 Web缓存投毒 攻击原理 : 发送导致有害响应的请求 有害响应被缓存并服务其他用户 Nginx特殊行为 : 只识别最后一个Host头 3.4 补充风险 无效Host头通常被转发到第一个虚拟主机 Apache配置可能将任意Host请求转发给应用 4. Burp被动检测插件开发 4.1 插件设计思路 使用Burp Collaborator生成DNSLOG地址 过滤掉403和404响应 替换Host字段为DNSLOG地址 构造并发送请求 检测响应中的注入迹象 4.2 关键代码实现 4.3 检测逻辑 响应头检测 :检查301/302跳转中的Location头 响应体检测 :搜索响应体中是否包含payload 交互检测 :通过Collaborator检查是否有DNS/HTTP请求 4.4 扩展测试建议 同时测试 X-Forwarded-Host 和 X-Host 标头 测试不同位置(参数、重定向等)的Host头注入 5. 防御措施 不信任原则 :所有客户端可控的值都不可信 白名单验证 :对Host头实施严格的白名单校验 路径处理 : 优先使用相对路径: /test/1.php 如需绝对路径,硬编码域名: https://example.com/test/1.php 禁用不必要标头 :如 X-Forwarded-Host 、 X-Host 安全编码 :对输出到页面的Host值进行HTML编码 6. 参考资源 实战web缓存中毒 浅谈http中的Cache-Control Burp Suite官方文档 OWASP Host头注入防护指南 通过本文档,您可以全面了解HTTP Host头注入漏洞的原理、危害、检测方法及防御措施,并掌握基于Burp Suite的自动化检测插件开发技术。