Представляет собой вспомогательный инструмент для фаззинга регулярных выражений методом чёрного ящика, который позволяет обходить проверки и обнаруживать нормализации в веб-приложениях. Также может быть полезен для обхода WAF и слабых механизмов защиты от уязвимостей.
Цель этого инструмента — генерация полезных нагрузок (payloads) для тестирования. Фактическое фаззинг-тестирование должно проводиться с помощью других инструментов, таких как Burp, Caido, ffuf и др.
Установить можно через python или docker следующими командами.
git clone https://github.com/0xacb/recollapse.git
cd recollapse
#Python 3
python3 setup.py install
#Docker
docker build -t recollapse .
⁉️ Объяснение параметров
Режимы работы
Предположим, что входная строка — this_is.an_example.
⏺️Вставка полезной нагрузки в начало строки: $this_is.an_example
⏺️Вставка байтов до/после символов-разделителей: this$_$is$.$an$_$example
⏺️Подстановка всех возможных байтов в соответствии с таблицей нормализаций.
⏺️Добавление нагрузки в конец строки: this_is.an_example$
⏺️Замена допустимых символов на регулярные метасимволы:
.^$*+-?()[]{}\|⏺️Замена символов на их нижний/верхний регистр или эквиваленты по таблице соответствий.
⏺️Замена символов на байты, вызывающие усечение строки при обработке.
Кодирование
⏺️URL-кодирование (используется в application/x-www-form-urlencoded, параметрах GET/POST): %22this_is.an_example
⏺️Unicode-кодировка (используется в application/json): \u0022this_is.an_example
⏺️Raw-формат (используется в multipart/form-data): "this_is.an_example
⏺️Двойное URL-кодирование: %2522this_is.an_example
Диапазон
Диапазон байтов для фаззинга: -r 1-127 позволит исключить буквенно-цифровые символы, если не указана опция -an (буквенно-цифровые символы).
Размер
Размер фаззинга для режимов 1, 2 и 4. По умолчанию выполняется фаззинг всех возможных значений для одного байта. Увеличение размера потребует больше ресурсов и приведет к созданию большего количества входных данных, но это может помочь найти новые обходные пути.
Таблицы
Используйте -nt параметр, чтобы отобразить таблицу нормализации, -ct параметр, чтобы отобразить таблицу регистров, и -tt параметр, чтобы отобразить таблицу усечения. Также можно использовать --html параметр для вывода таблиц в формате HTML.
recollapse -nt --html > normalization_table.html
recollapse -tt --html > truncation_table.html
recollapse -ct --html > case_table.html
👨💻 Примеры использования
recollapse -e 1 -m 1,2,4 -r 10-11 https://legit.example.com
echo "a@b.com" | recollapse
echo "<svg/onload=alert(1)>" | recollapse | ffuf -w - -u "https://example.com/?param=FUZZ" -mc 200,403,500
