前言
遇到个Host-header-injection,简单的查查资料,总结一下这方面的知识。
漏洞原理
在互联网上,大部分情况下一个web服务器,有着一个IP和多个网站。那么当我们向web服务器做出请求时,web服务器是如何识别到底是访问其中的哪个网站呢?这就是host存在的理由。
而当服务器获取host的方式不当时,就会产生很多问题。
例如下面的代码。
1  | <a href="http://<?php echo _SERVER['HOST'] ?>">Redirect</a>  | 
SERVER['HOST']是可以通过抓包修改的。一切用户的输入都是不可相信的。
正常
Request
1  | GET / HTTP/1.1  | 
Response
1  | HTTP/1.1 302 Object moved  | 
黑盒测试
三种修改方式
- 直接修改
 
1  | Host: bywalks.com  | 
- 参数污染
 
1  | Host: google.com  | 
- 伪造请求头
 
1  | X-Forwarded-For: bywalks.com  | 
漏洞危害
- 缓存投毒
 
1  | 1:用浏览器访问example.com  | 
- Open Redirection
 
1  | 302跳转  | 
- CRLF
 
1  | POC  | 
- 密码重置
 
1  | 网站一般都存在这密码修改功能,直接输入email即可。账号绑定的email就会接收到邮件。  | 
如何修复
1:HOST白名单
2:获取真实HOST。
在别人博客看到的一句话,谨记于心:
Anyone who stops learning is old, whether at twenty or eighty. Anyone who keeps learning STAYS YOUNG !" So keep learning !