浅析403bypass

本文最后更新于 2024年10月22日 下午

前言:本文简单的总结一下一些403bypass的绕过姿势

403的成因

  1. 某些敏感的URL路径配置为不允许访问
  2. 网络安全设备(如入侵检测系统或防火墙)可能会基于请求的特征或内容进行拦截,从而导致 403 错误
  3. 服务器配置成了只允许工作区的公网出口地址访问
  4. 服务器配置成了只允许某些特定的UA访问
  5. 服务器配置成了只允许某些特定的来源访问
  6. 因为在进行某些攻击活动,被检测到了,IP被ban
  7. 短时间内同一个IP过多地访问,被墙了
  8. 以HTTP协议访问需要HTTPS的站点
  9. 虽然域名的 DNS 解析记录已经设置了正确的 IP 地址,但是服务器在该 IP 地址上没有针对该域名的配置或绑定
  10. 服务器配置为了不允许使用IP地址访问,只能使用域名
  11. 上传的网页脚本文件在当前目录下没有执行权限
  12. 在不允许写/创建文件的目录中执行了创建/写文件操作
  13. 如果服务器对跨源请求进行了限制,而请求没有适当的 CORS 头部,可能会导致访问被拒绝
  14. DNS解析错误,手动更改DNS服务器地址
  15. 浏览器不支持SSL 128时访问SSL 128的连接

403绕过姿势

请求方式绕过

有些时候由于后端代码的疏忽,仅仅只对GET/POST请求做了访问控制,可以尝试FUZZ请求方式,试试看能不能绕过

1
2
3
4
5
6
7
8
9
GET
POST
PUT
DELETE
HEAD
OPTIONS
PATCH
CONNECT
TRACE

UA绕过

有的应用为了区分爬虫或者正常请求,会验证user-agent,伪造一个正常浏览器的UA头就可以绕过了

1
2
3
4
Chrome
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36
火狐
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/113.0

客户端IP绕过

如果服务器基于客户端IP做检测与访问控制,那么我们完全可以伪造客户端IP来绕过

1
2
3
4
5
6
7
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

Referer绕过

有时网站限制了访问来源,如果访问来源不符合,则也会返回403

设置referer为访问网站的host就行

url覆盖绕过

基本概念

  • **X-Original-URL**:记录请求的原始 URL。通常由代理服务器添加。
  • **X-Rewrite-URL**:记录实际请求的 URL,通常用于重写请求路径。

绕过 403 错误的原理

  1. 原始 URL 的访问控制
    • 服务器可以基于原始请求 URL 的路径(X-Original-URL)来进行访问控制。
    • 如果路径被配置为受限(如 /admin),某些用户可能会被禁止访问。
  2. 请求路径重写
    • 当请求经过代理或负载均衡器时,实际的请求 URL 可能会被重写。例如,将请求路径从 /user 重写为 /admin
    • 代理或负载均衡器可能会保留原始 URL(通过 X-Original-URL)以供后续处理。
  3. 利用标头绕过限制
    • 如果服务器在处理请求时检查 X-Original-URL 标头,而不是实际的请求路径,那么攻击者可以伪造 X-Original-URL 标头来尝试访问受限资源。
    • 例如:假设 /admin 路径受限,只允许某些用户访问。攻击者可以发起请求并伪造 X-Original-URL/admin,从而绕过限制。

示例

  1. 正常访问控制
    • 用户访问 /public,代理重写为 /admin
    • 服务器检查 X-Original-URL/admin,由于访问控制限制,返回 403 错误。
  2. 绕过访问控制
    • 攻击者伪造 X-Original-URL/admin,发送请求。
    • 如果服务器在验证访问权限时只依赖 X-Original-URL,而不是实际的请求路径,攻击者可能会绕过访问控制并访问 /admin,从而得到未授权的访问。
1
2
3
4
GET / HTTP/1.1
X-Original-URL: /admin
X-Rewrite-URL: /admin
Host: www.abc.com

image

在Header头中添加X-Original-URL标头,发现已经有权限可以删除Administrator、carlos、wiener 帐号的管理员权限

image

扩展名绕过

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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

绕过案例

某个后台地址 http://www.login.com 只允许工作区的公网出口IP访问,在局域网中,甲方让测试看能不能在外网访问到目标IP

端口绕过

外网进行访问返回403状态码。利用nmap进行全端口探测,发现除了80端口之外,还开放了一个web服务的8001端口,尝试使用8001端口访问(https://www.login.com:8001),总是充满惊喜。可直接绕过IP限制进行访问

image

通过沟通,由于疏忽未下线8001端口,导致访问控制缺失,这就是用到了信息收集而已

子域名绕过

外网进行访问返回403状态码

先爆破出一些子域名,再把子域名放在host中去访问

image

image

往往成功也离不开运气,看到一个服务端返回200的状态码。成功找到一个在HOST白名单中的子域名,这个子域名没有做好访问控制,这也属于信息收集

工具推荐

https://github.com/sting8k/BurpSuite_403Bypasser

image

burp插件商店有,需要配置Jython环境

image