HOST头注入漏洞的分析

一、什么是HOST头?

host头是HTTP协议头中的一个字段,如下:

二、HOST头有什么用?

先来看一下上网流程解析:

  1. 用户在浏览器输入www.myweb1.com;
  2. 计算机先从本地host文件中解析www.myweb1.com对应什么IP(这个特性可以用来绕CDN或云waf),找到的话直接通过该IP找到目标服务器;
  3. 一般用户是不设置本地host文件的,所以大概率会通过DNS服务器去解析域名对应的IP;
  4. DNS查询后返回给客户端目标服务器的IP;
  5. 客户端拿着IP去请求目标服务器;
  6. 此时目标服务器接受请求。
    但很多单台服务器上面会通过中间件搭好几个虚拟主机,如10.24.22.108的服务器上面,一个apache服务里有两个网站,且两个网站的域名分别为www.myweb1.com和www.myweb2.com,端口也是同一个8080。
    这是apache里配置文件配置两个网站,域名不同,网站不同,但ip相同,端口相同。

这个时候中间件会拿着host头去解析,你这个请求该分配给哪个网站
用户输入的是www.myweb1.com,那么host头默认就是www.myweb1.com,此时服务器直接把请求定位到第一个网站。
这就是host头的用处,定位请求对象

三、host头注入的原理是什么?

一个网站想要完整的展示给用户需要从指定url加载图片、JS、CSS等资源,而web程序生成url时会利用函数从host中获取域名,并将域名拼接到url中,在php中,通常是_SERVER["HTTP_HOST"],下图就是目标站点通过host头内容拼接网页图片加载url,这里就存在host头注入漏洞了。

四、host头注入漏洞有哪些体现方式和检测方法?

以下host头全马赛克的是真实网站域名,47.?.?.15:10002是我的vps

1、拼接

这是正常的数据包

从burp中拦截并修改正常的数据包,修改host头为攻击者的vps服务器,这里我vps开启了http服务的监听

放行数据包后,vps监听到大量的请求,可见host被后端拼接了,后端把拼接后的url返回给用户,用户的浏览器从这些错误url去加载资源了(试想一下,如果这里是中间人修改了用户的请求数据包中的host头,把host头改成恶意的url,用户不自觉地去请求了恶意url,会发生什么有趣的事

2、跳转

这是正常的数据包,有跳转

修改一下host头再试试,还是改成vps的地址,发包,看到vps没动静,因为还没跳转

点击跟随跳转按钮,看到服务器返回404,因为我vps上没东西,而看到vps的监听,已经有动静了。

3、代码注入

这里不做演示了,变相的反射型XSS,在host头后追加xss代码,返回的页面存在xss代码,在用户浏览器被执行,找一张网图敷衍一下。

五、host头注入的危害有哪些?

其实掌握host头漏洞的原理和检测方式后,有什么危害自己可以品出来了,为啥这个漏洞被当作中危漏洞,可能是因为利用起来比较麻烦吧。看到网上说的两个,加上我个人的理解说一下吧。

1、密码重置

攻击者发送密码重置邮件,邮箱改成被害者,host头改成攻击者服务器。用户收到密码重置邮件时,这个链接其实是被篡改了的,点击后的请求是发到攻击者服务器的。而我们重置密码的请求往往是通过GET方式发的,里面携带了token等相关的参数,那么攻击者获取这些参数后再去重置用户的密码,就会非常容易,留下迟迟等不到网站回应的用户一脸懵逼。

2、缓存污染

中间人把host头改了,改成自己的服务器地址。用户访问的内容被攻击者恶意编辑,这些内容被缓存在服务器前端的缓存服务器中,例如varnish,用户就一直上着个假网……

六、host头注入漏洞怎么修?

  1. 修改中间件配置文件,携带不认识的host头的请求不往网站发,怎么改?我不记得了,运维知道,开发知道。或许是(Nginx改ngnix.conf文件;Apache改httpd.conf文件;Tomcat改server.xml文件)
  2. 别用函数截取host头内容做拼接url了,比如设置server_name白名单,仅仅拼接来自白名单的host。
    附上大佬的修复建议:https://www.freebuf.com/articles/web/178315.html

七、问题?

在第二点中,中间件通过host头判定请求往哪个网站发。可能有人会问,我明明改了host头,这个host肯定不在目标服务器上的,为啥我还能访问到目标站点?
答:我的猜测是,由于中间件配置了不认识的host头请求转发到默认站点。

上述内容如有不当之处,请各位前辈批评指正,相互学习。

posted @ 2020-04-26 17:19  大大大大大大菠萝  阅读(9785)  评论(1编辑  收藏  举报