FuzzDB — умный фаззинг

Прежде чем начать рассмотрение проекта 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)

Далее, определяются маркеры, куда будут подставляться данные (обозначаются с помощью символов §)

Теперь необходимо загрузить в 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-странице проекта.


3 комментария

  1. jnpe, 28. января 2012, 14:21

    КУ добавляем новое правило match/replace, где match regex равно __TIME__, а replace string – 5.

    как добавить 5?
    я делаю едит __TIME__ 5
    У меня получаеться дабавить только __TIME__ , иначе цифра 5 пишеться в скобках вместе с __TIME__

     
  2. Raz0r, 28. января 2012, 14:33

    Посмотрите, как сделано на скрине: из выпадающего списка (select rule type) выбираете match/replace, в поле match regex значение «__TIME__», а в replace string — «5». Затем нажимаете кнопку Add и готово.

     
  3. jnpe, 28. января 2012, 15:08

    спасибо, невнимателен был, нижнего поля replace не заметил и тыркался в одно =)

     

Write a comment: