Host在请求头中的作用:在一般情况下,几个网站可能会部署在同一个服务器上,或者几个 web 系统共享一个服务器,通过host头来指定应该由哪个网站或者web系统来处理用户的请求。而很多WEB应用通过获取HTTP HOST头来获得当前请求访问的位置,但是很多开发人员并未意识到HTTP HOST头由用户控制,从安全角度来讲,任何用户输入都是认为不安全的。修改客户端请求头中的 Host 可以通过修改 Host 值修改为子域名或者ip来绕过来进行绕过二级域名;首先对该目标域名进行子域名收集,整理好子域名资产(host字段同样支持IP地址)。先Fuzz测试跑一遍收集到的子域名,这里使用的是Burp的Intruder功能。若看到一个服务端返回200的状态码,即表面成功找到一个在HOST白名单中的子域名。我们利用firefox插件来修改HOST值,成功绕过访问限制。
3.覆盖请求 URL
尝试使用 X-Original-URL和 X-Rewrite-URL 标头绕过 Web 服务器的限制。通过支持 X-Original-URL 和 X-Rewrite-URL 标头,用户可以使用 X-Original-URL 或 X-Rewrite-URL HTTP 请求标头覆盖请求 URL 中的路径,尝试绕过对更高级别的缓存和 Web 服务器的限制
RequestGET/auth/login HTTP/1.1ResponseHTTP/1.1403 Forbidden ReqeustGET/ HTTP/1.1X-Original-URL: /auth/loginResponseHTTP/1.1200 OK or: ReqeustGET/ HTTP/1.1X-Rewrite-URL: /auth/loginResponseHTTP/1.1200 OK
4.Referer 标头绕过
尝试使用 Referer 标头绕过 Web 服务器的限制。介绍:Referer 请求头包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。服务端一般使用 Referer 请求头识别访问来源。
RequestGET/auth/login HTTP/1.1Host: xxxResponseHTTP/1.1403 Forbidden ReqeustGET/ HTTP/1.1Host: xxxReFerer:https://xxx/auth/loginResponseHTTP/1.1200 OK or ReqeustGET/auth/login HTTP/1.1Host: xxxReFerer:https://xxx/auth/loginResponseHTTP/1.1200 OK
5.代理 IP
一般开发者会通过 Nginx 代理识别访问端 IP 限制对接口的访问,尝试使用 X-Forwarded-For、X-Forwared-Host 等标头绕过 Web 服务器的限制。