
Инструмент фаззинга регулярных выражений методом черного ящика, который генерирует полезные нагрузки для обхода проверок ввода, выявления нормализаций и обхода WAF в веб-приложениях.
REcollapse — это вспомогательный инструмент для black-box фаззинга регулярных выражений, предназначенный для обхода валидаций и обнаружения нормализаций в веб-приложениях.
Он также может быть полезен для обхода WAF и слабых средств смягчения уязвимостей. Для получения дополнительной информации ознакомьтесь с записью в блоге REcollapse.
Цель этого инструмента — генерация полезных нагрузок для тестирования. Непосредственный фаззинг следует выполнять с помощью других инструментов, таких как Burp (intruder), Caido (automate), ffuf или аналогичных.
Требования: Python 3
pip3 install recollapse или python3 setup.py install или pip3 install .
Docker
docker build -t recollapse . или 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
Рассмотрим this_is.an_example в качестве входных данных.
Режимы
$this_is.an_examplethis$_$is$.$an$_$examplethis_is.an_example$.^$*+-?()[]{}\|Кодировка
application/x-www-form-urlencoded или параметрами запроса/тела: %22this_is.an_exampleapplication/json: \u0022this_is.an_examplemultipart/form-data: "this_is.an_exampleДиапазон
Укажите диапазон байтов для фаззинга: -r 1-127. Это исключит буквенно-цифровые символы, если не указана опция -an.
Размер
Укажите размер фаззинга для режимов 1, 2 и 4. По умолчанию происходит фаззинг всех возможных значений для одного байта. Увеличение размера потребует больше ресурсов и сгенерирует гораздо больше входных данных, но может привести к обнаружению новых обходов.
Файл
Входные данные могут быть предоставлены как позиционный аргумент, через stdin или из файла с помощью опции -f.
Буквенно-цифровые символы
По умолчанию буквенно-цифровые символы исключаются из генерации выходных данных, так как они обычно неинтересны с точки зрения ответов. Вы можете разрешить их с помощью опции -an.
Максимальное количество нормализаций
Не все библиотеки нормализации ведут себя одинаково. По умолчанию для каждого индекса входных данных генерируется три варианта нормализации, что обычно достаточно. Используйте опцию -mn для увеличения.
Таблицы
Используйте опцию -nt для отображения таблицы нормализации, -ct для таблицы регистра и -tt для таблицы усечения. Вы также можете использовать опцию --html для вывода таблиц в формате HTML.
$ recollapse -nt --html > normalization_table.html
$ recollapse -tt --html > truncation_table.html
$ recollapse -ct --html > case_table.html
Использование Recollapse как инструмента командной строки:
$ 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
Использование Recollapse как библиотеки:
from recollapse import Recollapse
recollapse = Recollapse(modes=Recollapse.DEFAULT_MODES,
encoding=Recollapse.ENCODING_RAW)
variants = recollapse.generate("<script")
for variant in variants:
print(variant)
Эта техника была впервые представлена на BSidesLisbon 2022
Запись в блоге: https://0xacb.com/2022/11/21/recollapse/
Слайды:
Видео:
Таблицы:
Благодарности
и
Этот проект создан исключительно для образовательных и этических целей тестирования. Использование данного инструмента для атак на цели без предварительного взаимного согласия является незаконным. Разработчики не несут ответственности за неправомерное использование или ущерб, причиненный этим инструментом.