CuteKe网站开发与安全3——HOST头攻击与防御

  承接上文,记录的url不一致极大可能就是Host头攻击,所以本章内容围绕Host头攻击展开,讲述Host头攻击的原理、实践、和防御,让大家能对Host头攻击有足够的认识。

1. Host头原理

1.1 HTTP头——Host

  众所周知HTTP报文由报文首部、空行(CR+LF)和报文主体组成,在报文首部中有一个字段,在具体是请求报文的首部字段:Host。
  首部字段Host会告知服务器,请求的资源所处的互联网主机名和端口号。Host首部字段在HTTP/1.1规范内是唯一一个必须被包含在请求内的首部字段。

  首部字段Host和以单台服务器分配多个域名的虚拟主机的工作机制有密切的关联,这是首部字段Host必须存在的意义。请求被发送至服务器时,请求中的主机名会用IP地址直接替换解决,但如果这时,相同的IP地址下部署运行着多个域名,那么服务器就会无法理解究竟是那个域名对应的请求。因此,就需要使用首部字段Host来明确指出请求的主机名。
  我在本地打开了我的CuteKe网站,用chrome浏览器访问主页,看一下请求里面的Host,如下图1所示:

访问CuteKe的Host头

图1. 访问CuteKe的后台Host头

1.2 Host头攻击样例

  上面的例子都是Host正常的例子,如果我们在请求的时候修改Host的值后果会怎么样呢?服务器能不能识别呢?让我们来看一下下面几种Host头攻击的实例

攻击样例主要来自参考资料2,我这边就直接引用并简单地讲述一下,想进一步了解的话,可以访问原网站

1.2.1 密码重置污染攻击

  核心:生成url会用到Host,或者说利用请求头里面的Host字段来生成url,例如在生成密码重置链接的时候,如下图2所示:

密码重置污染攻击

图2. 密码重置污染攻击样例

  对应的用户请求头为:

POST /password/reset HTTP/1.1
Host: evil.com
.....

1.2.2 缓存污染

  上面一个例子是服务器出错,那针对缓存服务器呢?就要用到缓存污染了,其实这种攻击还是比较困难的,因为现在的缓存设备能够识别Host,他们不会弄混淆。所以我在这里就不具体讲述了,详情请看参考资料2。

2. HOST头攻击实践

  让我们尝试一下攻击一下本地的CuteKe网站,本地的CuteKe网站的地址为:http://localhost,访问这地址以后会重定向到http://localhost/index,然后再重定向到http://localhost/blogs,我们使用postman来完成Host攻击,分别针对:http://localhosthttp://localhost/blogs来进行Host攻击,两者主要区别主要是重定向问题:

  • http://localhos/blogst

    • 在postman里面添加Host头:www.baidu.com:80,然后访问,如图所示:

      host头攻击实践1

    • 可以能正确返回CuteKe网站里面的首页的内容

  • http://localhost

    • 同样也在postman里面添加Host头:www.baidu.com:80,然后访问,如图所示:

      host头攻击实践2

    • 这次返回的就有点奇怪了,为啥是页面不存在_百度搜索呢,因为在重定向的时候会自动使用Host的值+重定向地址,这里面重定向的最终地址为:http://www.baidu.com:80/index,所以会返回页面不存在的提示。

  • 最后让我们来看看后台记录的地址,如图所示:

    host头攻击实践3

    也就是上篇文章出现的情况了

3. HOST攻击防御

  主要两种方式来避免:

  1. 服务器配置的时候指定Host,例如Tomcat里面配置。
  2. 编程时过滤掉那些修改过Host头的请求,例如Filter里面白名单和黑名单机制。

一般来说只要不在页面生成的时候使用Host字段,就不会出现问题,例如我这种主页两次重定向的方式,也不会出现大的错误。 这两种情况的具体方式可以阅读参考资料3

4. 参考资料

[1] 图解HTTP
[2] 利用HTTP host头攻击的技术 – 龙臣
[3] URL存在http host头攻击漏洞-修复方案

猜你喜欢

转载自blog.csdn.net/u012397189/article/details/80559028
今日推荐