Boofuzz — фреймворк для фаззинга (fuzzing) сетевых протоколов, являющийся форком и преемником известного инструмента Sulley. Разработан для генерации и передачи некорректных или неожиданных данных целевым приложениям с целью выявления уязвимостей, ошибок обработки ввода и отказов в обслуживании. Boofuzz сочетает простоту использования с расширяемостью, что позволяет применять его для тестирования самых разных протоколов и интерфейсов.
Boofuzz наследует основные концепции Sulley, добавляя исправление ошибок, актуальную документацию и поддержку современных сред. Как и предшественник, инструмент охватывает все критические элементы процесса фаззинга:
▶️Быстрое создание тестовых наборов на основе шаблонов
▶️Обнаружение отказов и аномалий в целевой системе
▶️Автоматический перезапуск цели после сбоя
▶️Запись всех тестовых данных и результатов
👉Отличия от Sulley
- Актуальная онлайн-документация и поддержка
- Поддержка произвольных каналов связи (последовательный порт, Ethernet, UDP-широковещание)
- Улучшенная регистрация данных с экспортом в CSV
- Расширяемая система инструментирования
- Упрощенная установка через pip
- Исправление многочисленных ошибок оригинального фреймворка
⬇️Установка
pip install boofuzz
Проверка
python -c "import boofuzz; print(boofuzz.__version__)"
⏺️Boofuzz используется как Python-библиотека для создания скриптов фаззинга. Простейший пример для тестирования TCP-сервера:
from boofuzz import *
def main():
session = Session(
target=Target(connection=TCPSocketConnection("127.0.0.1", 9999))
)
s_initialize("Request")
s_string("FUZZ", name="fuzzable_field")
session.connect(s_get("Request"))
session.fuzz()
if __name__ == "__main__":
main()
Запуск скрипта:
python fuzzer_script.py
⏺️Фаззинг HTTP-сервера
from boofuzz import *
def main():
session = Session(
target=Target(connection=TCPSocketConnection("127.0.0.1", 80)),
sleep_time=0.1,
)
s_initialize("HTTP GET")
s_static("GET ")
s_string("/", name="URI")
s_static(" HTTP/1.1\r\n")
s_static("Host: ")
s_string("localhost", name="Host")
s_static("\r\n")
s_static("User-Agent: Mozilla/5.0\r\n")
s_static("Accept: */*\r\n")
s_static("\r\n")
session.connect(s_get("HTTP GET"))
session.fuzz()
if name == "__main__":
main()
⏺️Фаззинг с мониторингом отказов
from boofuzz import *
import subprocess
def restart_target():
"""Функция перезапуска цели"""
subprocess.run(["systemctl", "restart", "target-service"])
def main():
#настройка мониторинга процесса
monitor = ProcessMonitor("192.168.1.100", 26002)
session = Session(
target=Target(
connection=TCPSocketConnection("192.168.1.100", 9999),
monitors=[monitor]
),
restart_callbacks=[restart_target],
crash_threshold=3,
)
#описание протокола...
session.fuzz()
if name == "__main__":
main()
⏺️Экспорт результатов
session = Session(
target=Target(connection=connection),
output_path="fuzz_results", # директория для результатов
csv_logger=True, # включение CSV-логирования
log_level=logging.DEBUG, # уровень детализации лога
)
После завершения фаззинга boofuzz создает директорию с результатами, содержащую:
▶️Тестовые кейсы (все отправленные запросы с метками)
▶️Лог сбоев (информация о крашах и аномалиях)
▶️CSV-файл (сводная таблица результатов)
Пример структуры результатов:
├── crashes.log
├── fuzz.db
├── fuzz_results.csv
└── test-cases/
├── test-case-000001
├── test-case-000002
└── ...
#Boofuzz #tool #pentest #Sulley
🔗 Все наши каналы 🔁 Все наши чаты 🪧 Для связи с менеджером
