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


 
这也是 Dangling Markup技术 的精髓所在,该技术的核心点在于:

可控变量后面是否接着需要窃取的关键数据(包括Token、密码等)
在攻击者服务器上可以看到被Host头攻击转发上来的请求,里面成功窃取了受害者重置后的密码:
HTTP Host 头攻击,是什么鬼?

文章插图
 
5.2 Host头攻击+缓存投毒当存在Host头攻击的web站点不存在密码重置的功能的时候,此时该漏洞就显得没有影响,因为不可能驱使用户去抓包修改Host头,辅助攻击者完成一系列的攻击 。
但是,如果目标站点使用Web缓存,则可以通过缓存投毒给其他用户提供带有病毒的缓存响应 。此时的Host头攻击漏洞转变为类似XSS存储型类的漏洞 。要构造Web缓存投毒攻击:
1. 需要寻找映射到其他用户请求的缓存键;
2. 下一步则是缓存此恶意响应;
3. 然后,此恶意缓存将提供给尝试访问受影响页面的所有用户 。
 
  • 第一步,寻找Host头攻击点:
通过对站点的主页添加重复的Host值,可以达到覆盖的效果,并验证存在Host头攻击:
HTTP Host 头攻击,是什么鬼?

文章插图
 
  • 第二步,寻找是否使用了Web缓存?缓存键是什么?
从上图中也可以发现,站点使用了Wen缓存功能,并且配合Host头攻击,可以缓存/resources/js/tracking.js资源文件 。
  • 第三步,在攻击者服务器上创建一个同名的 /resources/js/tracking.js资源文件,内容为:
alert(document.cookie);然后通过Host头注入攻击者服务器域名,可以看到在响应中正确地对应了我们的 /resources/js/tracking.js资源文件:
HTTP Host 头攻击,是什么鬼?

文章插图
 
发送多次请求,使该请求的响应变为缓存:
HTTP Host 头攻击,是什么鬼?

文章插图
 
当其他用户请求站点主页时,服务端就会提供该恶意缓存给用户,造成缓存投毒 。
5.3 Host头攻击绕过访问控制出于安全考虑,通常网站对某些功能的访问限制为内部用户使用 。但是通过Host头攻击一定可能上可以绕过这些限制 。
对于一个站点,从发现Host头攻击到利用,下面来展示一个完整的流程:
  • 第一步,访问主页,随意修改Host的值:

HTTP Host 头攻击,是什么鬼?

文章插图
 
注意,这里的Host的值不会出现响应包中,但是依然可能存在Host头攻击,因为响应依然成功,说明服务端没有对Host头做验证 。
  • 第二步,寻找敏感页面,通过 /robots.txt 知道 /admin 为做了访问控制的页面:

HTTP Host 头攻击,是什么鬼?

文章插图
 
可以错误信息提示,/admin 页面只允许本地用户访问 。
  • 第三步,将Host改为服务端内部地址,从而绕过IP访问控制:

HTTP Host 头攻击,是什么鬼?

文章插图
 
5.4 Host头攻击+SSRFHost头攻击可能会导致基于路由的SSRF攻击,称为:Host SSRF Attack 。
经典的SSRF攻击通常基于XXE或可利用的业务逻辑,将用户可控的URL作为HTTP请求发送;而基于路由的SSRF依赖于云部署的体系结构中,包括负载均衡和反向代理,这些中间件将请求分配发送到对应的后端服务器处理,如果服务端未校验Host头转发的请求,则攻击者可能会将请求发送(重定向)到体系中的任意系统 。
这可能需要知道内部系统的IP地址(私有地址),一般可以通过信息收集或者Fuzz来判断有效的私有IP地址(如枚举192.168.1.1/16) 。
5.4.1 基础Host头攻击+SSRF
比如,普通方式访问不到 /admin 页面(404):
HTTP Host 头攻击,是什么鬼?

文章插图
 
猜测 /admin 存在于内网中,需要内网机器才能访问,但是配合Host头攻击+SSRF可以绕过并访问 。
  • 第一步,判断Host是否被使用,可用DNSLog外带
这里我使用Burp自带的 “Burp Collaborator client” 来实现外带:
HTTP Host 头攻击,是什么鬼?

文章插图
 
说明服务端是根据Host头的域名来请求资源的 。


推荐阅读