关于Forbidden
Forbidden是一款基于PycURL开发的网络安全工具,该工具可以帮助广大研究人员轻松绕过4xx HTTP响应状态码。
Forbidden使用了多线程机制,并基于暴力破解实现其功能,因此工具可能存在一些误报。除此之外,该脚本还支持色彩高亮输出。
工具处理结果支持按HTTP响应状态代码升序排列、内容长度降序排列和ID升序排列。
如果需要过滤误报信息,请使用项目提供的cURL命令手动检查每个内容长度。如果处理结果表明没有实现4xx HTTP响应状态码绕过,只需要直接忽略具有相同内容长度的所有其他结果即可。
测试 | 范围 |
各种HTTP方法 | 方法 |
各种带有'Content-Length: 0' Header的HTTP方法 | 方法 |
使用HTTP TRACE和TRACK方法的跨站追踪(XST) | 方法 |
使用HTTP PUT方法的文件上传 | 方法 |
各种HTTP方法覆盖 | 方法覆盖 |
各种HTTP Header | header |
各种URL覆盖 | header |
使用两个“Host” Header覆盖URL | header |
各种URL路径绕过 | 路径 |
各种URL方案覆盖 | 方案覆盖 |
基础认证/包含空会话的认证 | 认证 |
存在问题的URL解析器 | 解析器 |
注意:该工具目前已在Kali Linux v2021.4(64位)平台进行过测试。
工具下载
广大研究人员可以使用下列命令将该项目源码克隆至本地:
git clone https://github.com/ivan-sincek/forbidden.git
工具运行
打开你熟悉的终端窗口,切换至项目的/src/目录下,然后运行下列相关命令。
安装所需的依赖工具:
apt-get install -y curl
安装所需的代码包:
pip3 install -r requirements.txt
运行工具脚本:
python3 forbidden.py
注意:考虑到访问频率限制,如果你只想针对同一个域名进行测试并期望获取更好的结果,请在运行脚本时多给一些间隔时间。
某些网站可能需要设置用户代理Header,你可以从【这里】下载一个用户代理列表。
工具自动化使用
绕过“403 Forbidden” HTTP响应状态码:
count=0; for subdomain in $(cat subdomains_403.txt); do count=$((count+1)); echo "#${count} | ${subdomain}"; python3 forbidden.py -u "${subdomain}" -t method,method-override,header,path,scheme-override -f GET -o "forbidden_403_results_${count}.json"; done
绕过“401 Unauthorized” HTTP响应状态码:
count=0; for subdomain in $(cat subdomains_401.txt); do count=$((count+1)); echo "#${count} | ${subdomain}"; python3 forbidden.py -u "${subdomain}" -t auth -f GET -o "forbidden_401_results_${count}.json"; done
检查存在问题的URL解析器:
count=0; for subdomain in $(cat subdomains_live_long.txt); do count=$((count+1)); echo "#${count} | ${subdomain}"; python3 forbidden.py -u "${subdomain}" -t parser -f GET -o "forbidden_parser_results_${count}.json"; done
支持的HTTP方法
ACL ARBITRARY BASELINE-CONTROL BIND CHECKIN CHECKOUT CONNECT COPY DELETE GET HEAD INDEX LABEL LINK LOCK MERGE MKACTIVITY MKCALENDAR MKCOL MKREDIRECTREF MKWORKSPACE MOVE OPTIONS ORDERPATCH PATCH POST PRI PROPFIND PROPPATCH PUT REBIND REPORT SEARCH SHOWMETHOD SPACEJUMP TEXTSEARCH TRACE TRACK UNBIND UNCHECKOUT UNLINK UNLOCK UPDATE UPDATEREDIRECTREF VERSION-CONTROL
支持的HTTP Header
覆盖HTTP Header:
X-HTTP-Method X-HTTP-Method-Override X-Method-Override
HTTP Header:
Client-IP Cluster-Client-IP Connection Contact Forwarded Forwarded-For Forwarded-For-Ip From Host Origin Referer Stuff True-Client-IP X-Client-IP X-Custom-IP-Authorization X-Forward X-Forwarded X-Forwarded-By X-Forwarded-For X-Forwarded-For-Original X-Forwarded-Host X-Forwarded-Server X-Forward-For X-Forwared-Host X-Host X-HTTP-Host-Override X-Original-URL X-Originating-IP X-Override-URL X-ProxyUser-IP X-Real-IP X-Remote-Addr X-Remote-IP X-Rewrite-URL X-Wap-Profile X-Server-IP X-Target
HTTP Header方案覆盖:
X-Forwarded-Proto
X-Forwarded-Protocol
X-Forwarded-Scheme
X-Url-Scheme
X-URLSCHEME
URL路径
通过带斜杠和不带斜杠在URL路径的前面、后面以及前面和后面实现注入:
/ // %09 %20 %2e . .. ; .; ..; ;foo=bar;
在URL路径结尾处注入:
~ ~~ ~~random * ** **random # ## ##random ? ?? ??random
在URL路径结尾处注入(如果URL路径不以“/”结束):
.php .jsp .jspa .jspx .jhtml .html .sht .shtml .xhtml .asp .aspx .esp
处理结果数据样例
[ { "id":501, "url":"http://example.com:80/admin", "method":"GET", "headers":[ "Host: 127.0.0.1" ], "agent":"Forbidden/5.4", "proxy":null, "data":null, "command":"curl -m 5 --connect-timeout 5 -i -s -k -L --path-as-is -H 'Host: 127.0.0.1' -H 'User-Agent: Forbidden/5.4' -X 'GET' 'http://example.com:80/admin'", "code":200, "length":255408 }, { "id":541, "url":"http://example.com:80/admin", "method":"GET", "headers":[ "Host: 127.0.0.1:80" ], "agent":"Forbidden/5.4", "proxy":null, "data":null, "command":"curl -m 5 --connect-timeout 5 -i -s -k -L --path-as-is -H 'Host: 127.0.0.1:80' -H 'User-Agent: Forbidden/5.4' -X 'GET' 'http://example.com:80/admin'", "code":200, "length":255408 } ]
工具运行截图
项目地址
Forbidden:【GitHub传送门】
参考资料
https://webtechsurvey.com/common-response-headers
https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/User-Agents/UserAgents.fuzz.txt