
Strumento di fuzzing regex a scatola nera che genera payload per bypassare le validazioni degli input, scoprire normalizzazioni ed eludere i WAF nelle applicazioni web.
REcollapse è uno strumento di supporto per il fuzzing regex black-box per bypassare le validazioni e scoprire normalizzazioni nelle applicazioni web.
Può anche essere utile per bypassare WAF e mitigazioni deboli delle vulnerabilità. Per maggiori informazioni, dai un'occhiata al post sul blog di REcollapse.
L'obiettivo di questo strumento è generare payload per i test. Il vero fuzzing va eseguito con altri strumenti come Burp (intruder), Caido (automate), ffuf o simili.
Requisiti: Python 3
pip3 install recollapse oppure python3 setup.py install oppure pip3 install .
Docker
docker build -t recollapse . oppure 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 è uno strumento di supporto per il fuzzing regex black-box per bypassare validazioni e scoprire normalizzazioni nelle applicazioni web
positional arguments:
input input originale
options:
-h, --help mostra questo messaggio di aiuto ed esce
-m, --modes, -p, --positions MODES
modalità di variazione. Esempio: 1,2,3,4,5,6,7 (default). 1: inizio, 2: separatore, 3: normalizzazione, 4:
terminazione, 5: metacaratteri regex, 6: case folding/maiuscolo/minuscolo, 7: troncamento byte
-e, --encoding {1,2,3,4}
1: formato URL-encoded (default), 2: formato Unicode, 3: formato Raw, 4: formato Double URL-encoded
-r, --range RANGE intervallo di byte per il fuzzing. Esempio: 0,0xff (default)
-s, --size SIZE numero di byte per il fuzzing (default: 1)
-f, --file FILE legge input da file
-an, --alphanum include byte alfanumerici nell'intervallo di fuzzing
-mn, --maxnorm MAXNORM
numero massimo di normalizzazioni (default: 3)
-mt, --maxtrunc MAXTRUNC
numero massimo di troncamenti (default: 3)
-nt, --normtable stampa la tabella di normalizzazione
-tt, --trunctable stampa la tabella di troncamento
-ct, --casetable stampa la tabella dei case
--html output delle tabelle in formato HTML
--version mostra la versione di recollapse
Consideriamo this_is.an_example come input.
Modalità
$this_is.an_examplethis$_$is$.$an$_$examplethis_is.an_example$.^$*+-?()[]{}\|Codifica
application/x-www-form-urlencoded o parametri query/body: %22this_is.an_exampleapplication/json: \u0022this_is.an_examplemultipart/form-data: "this_is.an_exampleIntervallo
Specifica un intervallo di byte per il fuzzing: -r 1-127. Questo escluderà i caratteri alfanumerici a meno che non venga fornita l'opzione -an.
Dimensione
Specifica la dimensione del fuzzing per le modalità 1, 2 e 4. L'approccio predefinito è fuzzare tutti i possibili valori per un byte. Aumentare la dimensione consumerà più risorse e genererà molti più input, ma può portare alla scoperta di nuovi bypass.
File
L'input può essere fornito come argomento posizionale, stdin o un file tramite l'opzione -f.
Alfanumerico
Per impostazione predefinita, i caratteri alfanumerici saranno esclusi dalla generazione dell'output, il che di solito non è interessante in termini di risposte. Puoi permetterli con l'opzione -an.
Numero massimo di normalizzazioni
Non tutte le librerie di normalizzazione hanno lo stesso comportamento. Per impostazione predefinita, vengono generate tre possibilità di normalizzazione per ogni indice di input, il che di solito è sufficiente. Usa l'opzione -mn per andare oltre.
Tabelle
Usa l'opzione -nt per mostrare la tabella di normalizzazione, l'opzione -ct per mostrare la tabella dei case e l'opzione -tt per mostrare la tabella di troncamento. Puoi anche usare l'opzione --html per produrre le tabelle in formato HTML.
$ recollapse -nt --html > normalization_table.html
$ recollapse -tt --html > truncation_table.html
$ recollapse -ct --html > case_table.html
Utilizzo di Recollapse come strumento da riga di comando:
$ 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
Utilizzo di Recollapse come libreria:
from recollapse import Recollapse
recollapse = Recollapse(modes=Recollapse.DEFAULT_MODES,
encoding=Recollapse.ENCODING_RAW)
variants = recollapse.generate("<script")
for variant in variants:
print(variant)
Questa tecnica è stata originariamente presentata a BSidesLisbon 2022
Post sul blog: https://0xacb.com/2022/11/21/recollapse/
Slide:
Video:
Tabelle:
Ringraziamenti
e
Questo progetto è realizzato solo per scopi educativi e di test etici. L'utilizzo di questo strumento per attaccare target senza previo consenso reciproco è illegale. Gli sviluppatori non si assumono alcuna responsabilità e non sono responsabili per qualsiasi uso improprio o danno causato da questo strumento.