
Black-Box-Regex-Fuzzing-Tool, das Payloads generiert, um Eingabevalidierungen zu umgehen, Normalisierungen zu entdecken und WAFs in Webanwendungen zu umgehen.
REcollapse ist ein Hilfstool für Black-Box-Regex-Fuzzing, um Validierungen zu umgehen und Normalisierungen in Webanwendungen zu entdecken.
Es kann auch hilfreich sein, um WAFs und schwache Schwachstellenminderungen zu umgehen. Weitere Informationen findest du im REcollapse-Blogbeitrag.
Das Ziel dieses Tools ist es, Payloads für Tests zu generieren. Das eigentliche Fuzzing sollte mit anderen Tools wie Burp (Intruder), Caido (Automate), ffuf oder ähnlichen durchgeführt werden.
Voraussetzungen: Python 3
pip3 install recollapse oder python3 setup.py install oder pip3 install .
Docker
docker build -t recollapse . oder 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
Betrachten wir this_is.an_example als Eingabe.
Modi
$this_is.an_examplethis$_$is$.$an$_$examplethis_is.an_example$.^$*+-?()[]{}\|Kodierung
application/x-www-form-urlencoded oder Query/Body-Parametern: %22this_is.an_exampleapplication/json: \u0022this_is.an_examplemultipart/form-data: "this_is.an_exampleBereich
Gib einen Bereich von Bytes zum Fuzzen an: -r 1-127. Dadurch werden alphanumerische Zeichen ausgeschlossen, sofern nicht die Option -an angegeben wird.
Größe
Gib die Größe des Fuzzings für die Modi 1, 2 und 4 an. Der Standardansatz besteht darin, alle möglichen Werte für ein Byte zu fuzzen. Eine Erhöhung der Größe verbraucht mehr Ressourcen und generiert viele weitere Eingaben, kann aber zur Entdeckung neuer Umgehungen führen.
Datei
Die Eingabe kann als positionsbezogenes Argument, über stdin oder eine Datei mittels der Option -f bereitgestellt werden.
Alphanumerisch
Standardmäßig werden alphanumerische Zeichen von der Ausgabegenerierung ausgeschlossen, was hinsichtlich der Antworten normalerweise nicht interessant ist. Du kannst dies mit der Option -an erlauben.
Maximale Anzahl von Normalisierungen
Nicht alle Normalisierungsbibliotheken verhalten sich gleich. Standardmäßig werden drei Möglichkeiten für Normalisierungen pro Eingabeindex generiert, was normalerweise ausreicht. Verwende die Option -mn, um weiter zu gehen.
Tabellen
Verwende die Option -nt, um die Normalisierungstabelle anzuzeigen, die Option -ct für die Groß-/Kleinschreibungstabelle und die Option -tt für die Trunkierungstabelle. Du kannst auch die Option --html verwenden, um Tabellen im HTML-Format auszugeben.
$ recollapse -nt --html > normalization_table.html
$ recollapse -tt --html > truncation_table.html
$ recollapse -ct --html > case_table.html
Verwendung von Recollapse als Kommandozeilenwerkzeug:
$ 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
Verwendung von Recollapse als Bibliothek:
from recollapse import Recollapse
recollapse = Recollapse(modes=Recollapse.DEFAULT_MODES,
encoding=Recollapse.ENCODING_RAW)
variants = recollapse.generate("<script")
for variant in variants:
print(variant)
Diese Technik wurde ursprünglich auf der BSidesLisbon 2022 vorgestellt.
Blogbeitrag: https://0xacb.com/2022/11/21/recollapse/
Folien:
Videos:
Tabellen:
Danksagungen
und
Dieses Projekt dient ausschließlich zu Bildungs- und ethischen Testzwecken. Die Verwendung dieses Werkzeugs zum Angriff auf Ziele ohne vorherige gegenseitige Zustimmung ist illegal. Die Entwickler übernehmen keine Haftung und sind nicht verantwortlich für Missbrauch oder Schäden, die durch dieses Werkzeug verursacht werden.