HTTP Host 头攻击,是什么鬼?( 二 )

有时候也可以尝试不同的协议,如HTTP或HTTPS 。
添加缩进或换行当一些站点block带有多个Host头的请求时,可以通过添加缩进字符的HTTP头来绕过:
GET /example HTTP/1.1 Host: attack-stuffHost: vulnerable-website.com注入覆盖Host头的字段与Host头功能相近的字段,如X-Forwarded-Host、X-Forwarded-For等,这些有时候是默认开启的 。
GET /example HTTP/1.1Host: vulnerable-website.comX-Forwarded-Host: attack-stuff诸如此类,还有其他的字段:

  • X-Host
  • X-Forwarded-Server
  • X-HTTP-Host-Override
  • Forwarded
忽略端口仅校验域名当修改、添加重复Host头被拦截的时候,可以尝试了解Web应用程序是怎样解析Host头的 。
比如,一些解析算法会忽略Host头中的端口值,仅仅校验域名 。这时候可以将Host修改为如下形式:
GET /example HTTP/1.1Host: vulnerable-website.com:attack-stuff保持域名不变,修改端口值为非端口号的其他值(非数字),将Host头攻击的payload放在端口值处,同样能进行Host头攻击 。
 
5. HTTP Host头攻击漏洞示例5.1 密码重置中毒根据HTTP Host头攻击的攻击特点,它被广泛应用于密码重置中毒:攻击者可以操纵网站在重置密码情况下生成的密码重置链接,使其发送攻击者指定的域下,利用此来窃取重置任意用户密码的令牌 。
HTTP Host 头攻击,是什么鬼?

文章插图
 
一个重设密码(忘记密码)功能的大致流程如下:
用户输入其用户名或电子邮件地址,然后提交密码重置请求 。
该网站检查该用户是否存在,然后生成一个临时的、唯一的、复杂的令牌,该令牌与后端的用户帐户相关联 。
该网站向用户发送一封电子邮件,其中包含用于重置其密码的链接 。重置令牌的参数包含在相应的URL中:
https://normal-website.com/reset?token=0a1b2c3d4e5f6g7h8i9j
4. 当用户访问此URL时,网站将检查提供的令牌是否有效,并使用它来确定要重置哪个帐户 。如果一切都符合,则可以进入用户重置密码步骤 。最后,令牌被销毁 。
以上步骤的安全性依赖于:只有目标用户才能访问其电子邮件,从而可以访问其唯一的令牌 。
密码重置中毒是窃取此令牌以更改另一个用户密码的一种漏洞 。
如果网站重置密码的流程完全依赖用户的可控输入(如HTTP Host头),这可能导致密码重置中毒:
1. 攻击者获取受害者的用户名或者电子邮件,作为提交重置密码的请求,攻击者会拦截请求并修改HTTP Host头为其指定的域,如evil-user.net
2. 受害者会收到一封重置密码的邮件,但由于攻击者修改了Host头,而web程序生成重置链接又完全依赖于Host头,导致生成以下URL:
https://evil-user.net/reset?token=0a1b2c3d4e5f6g7h8i9j
3. 如果受害者点击了该链接,重置密码的令牌就会发送到攻击者的服务器 evil-user.net 上
4. 当攻击者获取到虫子密码的令牌之后,就会进行相应的构造访问真实重置密码的URL进行密码重置 。
5.1.1 密码重置中毒—基础详细了解了上面的密码重置中毒的流程和原理之后,这里通过HTTP Host头攻击导致的基础的密码重置中毒来演示 。
首先输入用户名或者用户的电子邮箱来重置指定用户的密码:
HTTP Host 头攻击,是什么鬼?

文章插图
 
提交之后,会发送一封重置密码的电子邮件到wiener用户的邮箱中(数据包如右图):
HTTP Host 头攻击,是什么鬼?

文章插图
 
注意重置密码的链接,可能是受Host头的值的影响?
我们来验证一下是否存在HTTP Host头攻击,修改Host头的值为 baidu.com:
HTTP Host 头攻击,是什么鬼?

文章插图
 
发现请求是可以被后端服务器接收的,所以是存在HTTP Host头攻击的 。
【HTTP Host 头攻击,是什么鬼?】这里就输入受害用户carlos进行重置密码,然后抓包将Host头的值改为我们自己的服务器:
HTTP Host 头攻击,是什么鬼?

文章插图
 
然后在我们自己的服务器上就可以通过访问日志看到被窃取的重置密码Token:
HTTP Host 头攻击,是什么鬼?

文章插图
 
然后根据已知链接规律,构造重置密码的链接:


推荐阅读