
Outil de fuzzing d'expressions régulières en boîte noire qui génère des charges utiles pour contourner les validations d'entrée, découvrir les normalisations et échapper aux WAF dans les applications web.
REcollapse est un outil auxiliaire pour le fuzzing de regex en boîte noire afin de contourner les validations et découvrir les normalisations dans les applications web.
Il peut également être utile pour contourner les WAF et les atténuations de vulnérabilités faibles. Pour plus d'informations, consultez le billet de blog REcollapse.
Le but de cet outil est de générer des payloads pour les tests. Le fuzzing proprement dit doit être effectué avec d'autres outils comme Burp (intruder), Caido (automate), ffuf, ou similaires.
Prérequis: Python 3
pip3 install recollapse ou python3 setup.py install ou pip3 install .
Docker
docker build -t recollapse . ou docker pull 0xacb/recollapse
$ recollapse -h
usage: recollapse [-h] [-m MODES] [-e {1,2,3,4}] [-r RANGE] [-s SIZE] [-f FILE] [-an] [-mn MAXNORM] [-mt MAXTRUNC] [-nt] [-tt] [-ct]
[--html] [--version]
[input]
REcollapse is a helper tool for black-box regex fuzzing to bypass validations and discover normalizations in web applications
positional arguments:
input original input
options:
-h, --help show this help message and exit
-m, --modes, -p, --positions MODES
variation modes. Example: 1,2,3,4,5,6,7 (default). 1: starting, 2: separator, 3: normalization, 4:
termination, 5: regex metacharacters, 6: case folding/upper/lower, 7: byte truncation
-e, --encoding {1,2,3,4}
1: URL-encoded format (default), 2: Unicode format, 3: Raw format, 4: Double URL-encoded format
-r, --range RANGE range of bytes for fuzzing. Example: 0,0xff (default)
-s, --size SIZE number of fuzzing bytes (default: 1)
-f, --file FILE read input from file
-an, --alphanum include alphanumeric bytes in fuzzing range
-mn, --maxnorm MAXNORM
maximum number of normalizations (default: 3)
-mt, --maxtrunc MAXTRUNC
maximum number of truncations (default: 3)
-nt, --normtable print normalization table
-tt, --trunctable print truncation table
-ct, --casetable print case table
--html output tables in HTML format
--version show recollapse version
Prenons this_is.an_example comme entrée.
Modes
$this_is.an_examplethis$_$is$.$an$_$examplethis_is.an_example$.^$*+-?()[]{}\|Encodage
application/x-www-form-urlencoded ou les paramètres de requête/corps : %22this_is.an_exampleapplication/json : \u0022this_is.an_examplemultipart/form-data : "this_is.an_examplePlage
Spécifiez une plage d'octets pour le fuzzing : -r 1-127. Cela exclura les caractères alphanumériques sauf si l'option -an est fournie.
Taille
Spécifiez la taille du fuzzing pour les modes 1, 2 et 4. L'approche par défaut est de fuzzer toutes les valeurs possibles pour un octet. Augmenter la taille consommera plus de ressources et générera beaucoup plus d'entrées, mais cela peut permettre de trouver de nouveaux contournements.
Fichier
L'entrée peut être fournie comme argument positionnel, stdin, ou un fichier via l'option -f.
Alphanumérique
Par défaut, les caractères alphanumériques seront exclus de la génération de sortie, ce qui n'est généralement pas intéressant en termes de réponses. Vous pouvez les autoriser avec l'option -an.
Nombre maximum de normalisations
Toutes les bibliothèques de normalisation n'ont pas le même comportement. Par défaut, trois possibilités de normalisation sont générées pour chaque index d'entrée, ce qui est généralement suffisant. Utilisez l'option -mn pour aller plus loin.
Tables
Utilisez l'option -nt pour afficher la table de normalisation, l'option -ct pour afficher la table de casse, et l'option -tt pour afficher la table de troncature. Vous pouvez également utiliser l'option --html pour produire les tables au format HTML.
$ recollapse -nt --html > normalization_table.html
$ recollapse -tt --html > truncation_table.html
$ recollapse -ct --html > case_table.html
Utilisation de Recollapse en ligne de commande :
$ recollapse -e 1 -m 1,2,4 -r 10-11 https://legit.example.com
%0ahttps://legit.example.com
%0bhttps://legit.example.com
https%0a://legit.example.com
https%0b://legit.example.com
...
$ echo "[email protected]" | recollapse
%[email protected]
%[email protected]
...
$ echo "<svg/onload=alert(1)>" | recollapse | ffuf -w - -u "https://example.com/?param=FUZZ" -mc 200,403,500
Utilisation de Recollapse comme bibliothèque :
from recollapse import Recollapse
recollapse = Recollapse(modes=Recollapse.DEFAULT_MODES,
encoding=Recollapse.ENCODING_RAW)
variants = recollapse.generate("<script")
for variant in variants:
print(variant)
Cette technique a été présentée à l'origine au BSidesLisbon 2022
Article de blog: https://0xacb.com/2022/11/21/recollapse/
Diapositives :
Vidéos :
Tables :
Remerciements
et
Ce projet est réalisé uniquement à des fins de tests éducatifs et éthiques. L'utilisation de cet outil pour attaquer des cibles sans consentement mutuel préalable est illégale. Les développeurs déclinent toute responsabilité et ne sont pas responsables de tout usage abusif ou dommage causé par cet outil.