Прежде чем начать рассмотрение проекта FuzzDB , нужно сказать пару слов о самом фаззинге. Итак, фаззинг (англ. fuzzing) – это способ тестирования приложений, в основе которого лежит передача некорректных, случайных или непредвиденных логикой программы данных. Чаще всего фаззинг применяется при blackbox-тестировании, т.е. в условиях отсутствия исходных кодов приложения. У фаззинга имеются как отрицательные, так и положительные стороны. К числу первых можно отнести низкую скрытность процесса тестирования, так как после проверки всех возможных параметров остаются следы, которые невозможно не заметить, если, конечно, проводится мониторинг журналов и нагрузки на систему. Среди положительных моментов выделяется полная автоматизация процесса, позволяющая значительно сэкономить время. Эффективность фаззинга в значительной степени зависит от программы-фаззера и базы, с которой она работает. Говорить, что фаззинг лучше метода ручного точечного тестирования или наоборот, некорректно, так как оба метода должны дополнять друг друга при blackbox-пентесте.
FuzzDB – это проект, объединяющий в себе большое количество фаззинг-баз, упорядоченных по своему назначению. В FuzzDB входят:
- распространенные пути файлов и директорий, представляющих ценность для атакующего, например пути логов и конфигурационных файлов
- шаблоны атак – собственно те строки, которые отправляются приложению, вследствие чего возникают ошибки и исключения
- шаблоны ответов – строки, с помощью которых можно идентифицировать наличие уязвимости
- другие полезности, например коллекция web-шеллов под большинство платформ и словари для брутфорса
- документация
Основой для FuzzDB являются базы таких известных фаззеров как jBroFuzz (проект OWASP ), wapiti , SPIKE , а также собственные исследования автора, анализ логов, различные другие источники. Проект поддерживается лишь одним человеком, но, тем не менее, не стоит на месте.
По сути, FuzzDB – лишь набор текстовых файлов с шаблонами, отсортированных по платформам, типам атак, языкам. Использовать FuzzDB можно где угодно, например в самописном web-сканнере директорий или в профессиональном инструменте для проведения пен-тестов. Рассмотрим применение FuzzDB на практике в Burp Intruder, входящий в состав Burp Suite .
Прежде всего необходимо определить нашу цель и отправить ее в Intruder (Actions -> Send To Intruder)
Далее, определяются маркеры, куда будут подставляться данные (обозначаются с помощью символов W)
Теперь необходимо загрузить в Intruder необходимую базу из FuzzDB. Так как будем проверять на SQL-инъекции, во вкладке payloads загрузим attack-payloads/sql-injection/detect/GenericBlind.fuzz.txt. Из комментария в текстовом файле видно, что база позаимствована из wapiti и маркеры __TIME__ для sleep() и wait for оставлены как есть. Поэтому в Intruder’е изменяем правила обработки строк (payload processing rules): добавляем новое правило match/replace, где match regex равно __TIME__, а replace string – 5.
Последнее, что необходимо сделать перед запуском, это указать шаблоны ответов для определения уязвимых мест. Переходим во вкладку options и загружаем в секции grep список regex/errors.txt.
Все готово, можно начинать атаку (Intruder -> Start Attack). После ее завершения уязвимые параметры видно по коду ответа web-сервера 500, а также по наличию в теле ответа указанных нами строк.
FuzzDB действительно полезный инструмент, который может пригодиться любому пентестеру. Более подробную информацию о примерах использования можно получить на wiki-странице проекта.