Термин "фаззинг" впервые появился в работе Барта Миллера "The Fuzz Generator" в 1988 году.
Активный фаззинг — это автоматическое или полуавтоматическое тестирование программ (в нашем случае веб-приложений) путём отправки некорректных, неожиданных или случайных данных на вход с целью обнаружения уязвимостей и ошибок.
Суть активного фаззинга
Отправить приложению какие-либо данные (например, заведомо некорректные) и посмотреть, как оно отреагирует. На практике это может быть:
- Тестирование параметров в HTTP-запросах
- Перебор директорий и файлов (Directory Busting)
- Автоматическое тестирование на уязвимости: XXE, Command Injection, SQL Injection
Важно: SQLmap — это тоже фаззер!
1. Методы тестирования
Три подхода к тестированию
1.1 Чёрный ящик (Black Box)
- Чаще всего используется при работе с удалёнными веб-сервисами
- Данные на входе подаются в виде запросов
- На выходе получаются веб-страницы или значения для анализа
- Нет доступа к исходному коду
Применение:
- Тестирование веб-приложений без доступа к коду
- Sweeping — поиск похожих уязвимостей в различных приложениях
1.2 Серый ящик (Gray Box)
- Комбинация чёрного ящика и reverse engineering
- Частичный доступ к коду или документации
- Сложно переоценить наличие исходного кода для тестирования
1.3 Белый ящик (White Box)
- Полный доступ к исходному коду
- Проверка может выполняться вручную или с помощью инструментов
- Ручная проверка трудоёмкая и долгая
Инструменты:
- Средства проверки на этапе компиляции
- Браузеры исходного кода
- Автоматические инструменты проверки кода (SAST)
2. Классификация фаззинга
По методу управления данными
Генерация (Generation-based)
- Использование случайного набора данных
- Создание данных для конкретных типов с нуля
Мутация (Mutation-based)
- Внесение изменений в валидные данные
- Модификация существующих входных данных
По "интеллекту"
Dumb Fuzzer (тупой фаззер)
- Ничего не знает о структуре данных
- Случайные мутации без понимания формата
Smart Fuzzer (умный фаззер)
- Имеет представление о структуре данных
- Может производить осмысленные манипуляции
- Учитывает формат и протокол
3. Burp Suite
Незаменимый инструмент для тестирования веб-приложений. Позволяет манипулировать HTTP-запросами как угодно.
3.1 Burp Suite Repeater
Основной workflow:
- Запустить Burp Suite с включённым прокси
- Настроить браузер на использование Burp прокси
- Посетить целевой сайт через браузер
- Перейти в Proxy → HTTP History
- Выбрать интересующий запрос → ПКМ → Send to Repeater
- Во вкладке Repeater модифицировать запрос
- Нажать Send и анализировать ответ
3.2 Работа с GET-запросами
GET /page.php?a=1&b=2 HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html
Параметры для тестирования: a и b
Эти параметры передают данные, отвечающие за логику работы приложения — их нужно тестировать в первую очередь.
3.3 Работа с POST-запросами
POST /login.php HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 27
username=admin&password=test
POST-запросы передают данные в теле, а не в URL, но суть тестирования остаётся той же.
3.4 Burp Suite Intruder
Возможности:
- Фаззинг параметров, cookies, заголовков
- Поиск директорий и файлов
- Брутфорс форм авторизации
- Перебор payload для различных уязвимостей
- Эксплуатация слепых SQL-инъекций
Ограничение Community-версии:
- Сильно занижена скорость перебора
- Рекомендуется использовать альтернативы (см. ниже)
4. Dirb
DIRB — сканер веб-контента для поиска существующих (возможно, скрытых) веб-объектов.
Основы работы
- Поиск по словарю
- Формирует запросы к веб-серверу и анализирует ответ
- Поставляется с готовыми словарями для атак
Синтаксис
dirb <URL> [<словарь>] [опции]
Основные опции
| Опция | Описание |
|---|---|
-a <user-agent> | Задать пользовательский User-Agent |
-c <cookie> | Установить cookie для HTTP-запроса |
-f | Тонкая настройка при выявлении NOT_FOUND (404) |
-H <header> | Задать пользовательский HTTP-заголовок |
-i | Поиск без учёта регистра |
-l | Печатать заголовок Location когда найден |
-N <code> | Игнорировать ответы с этим HTTP-кодом |
-o <file> | Сохранить вывод в файл |
-p <proxy[:port]> | Использовать прокси |
-r | Не искать рекурсивно |
-R | Интерактивная рекурсия |
-S | Молчаливый режим |
-t | Не принуждать к слешу / в URL |
-u <user:pass> | HTTP-аутентификация |
-v | Показывать также страницы NOT_FOUND |
-X <ext> / -x <exts> | Применить расширения к каждому слову |
-z <ms> | Задержка между запросами |
Горячие клавиши
n— Перейти к следующей директорииq— Остановить сканирование (сохранить состояние)r— Показать статистику сканирования
Примеры использования
# Базовое сканирование
dirb http://example.com
# С конкретным словарём
dirb http://example.com /usr/share/dirb/wordlists/common.txt
# С расширениями
dirb http://example.com -X .php,.html
# Через прокси с аутентификацией
dirb http://example.com -p http://127.0.0.1:8080 -u admin:password
5. Gobuster
Современный инструмент для перебора директорий, написанный на Go.
Преимущества
- ✅ Многопоточность
- ✅ Простой Unix-like интерфейс
- ✅ Возможность точной настройки
- ✅ Не требует runtime-окружения
- ✅ Быстрее интерпретируемых скриптов (Python)
- ✅ Компилируется на множестве платформ
- ✅ Не выполняет рекурсивный брутфорс (фокус на скорости)
Установка
# Kali Linux
apt-get install gobuster
# Из исходников
go install github.com/OJ/gobuster/v3@latest
Режимы работы
dir— перебор директорий и файловdns— перебор поддоменовvhost— перебор виртуальных хостовs3— перебор bucket'ов Amazon S3fuzz— фаззинг параметров
Основные опции
Общие:
-t <threads> # Количество потоков (по умолчанию: 10)
-v # Verbose вывод
-w <wordlist> # Путь к словарю
-q # Тихий режим
-o <output> # Файл для вывода
Для режима dir:
-u <url> # URL цели
-x <extensions> # Расширения файлов
-s <codes> # Положительные коды статуса (200,204,301,302,307)
-k # Пропустить верификацию SSL
-a <agent> # User-Agent
-c <cookies> # Cookies
-H <header> # Дополнительный заголовок
-f # Добавлять / для директорий
-l # Показывать длину ответа
-n # Не показывать коды статуса
-r # Следовать редиректам
Примеры использования
# Базовый поиск директорий
gobuster dir -u http://example.com -w /usr/share/wordlists/dirb/common.txt
# С расширениями и потоками
gobuster dir -u http://example.com \
-w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt \
-x php,html,txt \
-t 50
# Показывать все коды ответа
gobuster dir -u http://example.com -w wordlist.txt -s "200,204,301,302,307,403"
# С cookies и custom заголовками
gobuster dir -u http://example.com -w wordlist.txt \
-c "session=abc123" \
-H "X-Forwarded-For: 127.0.0.1"
# Поиск поддоменов
gobuster dns -d example.com -w subdomains.txt
# Через прокси
gobuster dir -u http://example.com -w wordlist.txt -p http://127.0.0.1:8080
Фильтрация результатов
# Исключить код 404
gobuster dir -u http://example.com -w wordlist.txt -b 404
# Показывать только определённые коды
gobuster dir -u http://example.com -w wordlist.txt -s "200,301"
6. Wfuzz
Мощный фреймворк для фаззинга веб-приложений с Python API.
Установка
pip install wfuzz
Основная концепция
Ключевое слово FUZZ заменяется на payload из словаря:
wfuzz -w wordlist.txt http://example.com/FUZZ
6.1 Фаззинг директорий
wfuzz -w /usr/share/wordlists/dirb/common.txt \
--hc 404 \
http://example.com/FUZZ
6.2 Фаззинг файлов
# С двумя словарями: имена и расширения
wfuzz -w names.txt -w extensions.txt \
--hc 404 \
http://example.com/FUZZ.FUZ2Z
6.3 Фильтрация результатов
Скрытие (hide):
--hc <codes> # Hide по коду ответа
--hl <lines> # Hide по количеству строк
--hw <words> # Hide по количеству слов
--hh <chars> # Hide по количеству символов
Показ (show):
--sc <codes> # Show только эти коды
--sl <lines> # Show только эти количества строк
--sw <words> # Show только эти количества слов
--sh <chars> # Show только эти количества символов
6.4 Фаззинг GET-параметров
# Поиск рабочих параметров
wfuzz -c -z range,0-100 \
--hc 404 \
http://example.com/page.php?id=FUZZ
# Из файла
wfuzz -c -z file,params.txt \
http://example.com/page.php?FUZZ=value
6.5 Фаззинг POST-параметров
wfuzz -z file,passwords.txt \
-d "username=admin&password=FUZZ" \
--hc 302 \
http://example.com/login.php
6.6 Фаззинг Cookies
wfuzz -z file,wordlist.txt \
-b "cookie1=FUZZ" \
-b "cookie2=value2" \
http://example.com/
6.7 Фаззинг заголовков
wfuzz -z file,headers.txt \
-H "X-Custom-Header: FUZZ" \
-H "User-Agent: CustomBot" \
http://example.com/
6.8 Множественный фаззинг
# Два payload одновременно
wfuzz -z file,usernames.txt \
-z file,passwords.txt \
-d "username=HFUZZ&password=WFUZZ" \
http://example.com/login.php
6.9 Кодирование payload
# Base64
wfuzz -u "http://example.com/?page=FUZZ" \
-z file,wordlist.txt,base64 \
--sw 40
# Цепочка кодировок
wfuzz -u "http://example.com/?data=FUZZ" \
-z list,payload,none-base64-md5
Доступные кодировки:
wfuzz -e encoders
Популярные:
base64— Base64 кодированиеmd5— MD5 хешsha1— SHA1 хешurlencode— URL-кодированиеhtml_escape— HTML escapehexlify— HEX-кодирование
6.10 Типы payload
wfuzz -e payloads
Основные типы:
file— из файлаlist— список значенийrange— диапазон чиселstdin— из стандартного ввода
Примеры:
# Range
wfuzz -z range,1-100 http://example.com/user?id=FUZZ
# List
wfuzz -z list,admin-root-test http://example.com/FUZZ
# Stdin
cat wordlist.txt | wfuzz -z stdin http://example.com/FUZZ
7. Ffuf (Fuzz Faster U Fool)
Современный и очень быстрый фаззер, написанный на Go.
Установка
# Kali Linux
sudo apt install ffuf
# Go
go install github.com/ffuf/ffuf@latest
Основные преимущества
- 🚀 Очень быстрый
- 💾 Оптимизированная работа с памятью
- 🔧 Гибкая настройка
- 📊 Удобный вывод результатов
- 🎨 Цветной вывод
7.1 Фаззинг директорий и файлов
ffuf -u "http://example.com/FUZZ" \
-w /usr/share/wordlists/dirb/common.txt \
-c
С расширениями:
ffuf -u "http://example.com/FUZZ" \
-w wordlist.txt \
-e .php,.html,.txt \
-c -t 100
Фильтрация:
# По размеру ответа
ffuf -u "http://example.com/FUZZ" -w wordlist.txt -fs 4242
# По количеству слов
ffuf -u "http://example.com/FUZZ" -w wordlist.txt -fw 100
# По количеству строк
ffuf -u "http://example.com/FUZZ" -w wordlist.txt -fl 50
# По коду статуса
ffuf -u "http://example.com/FUZZ" -w wordlist.txt -fc 404,403
7.2 Брутфорс формы авторизации
ffuf -u "http://example.com/login.php" \
-X POST \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=HFUZZ&password=WFUZZ" \
-w usernames.txt:HFUZZ \
-w passwords.txt:WFUZZ \
-fs 14 \
-c -t 100 \
-mc all
7.3 Фаззинг GET-параметров
# Поиск параметров
ffuf -u "http://example.com/?FUZZ=value" \
-w params.txt \
-fs 626 \
-c -t 100
# Поиск значений
ffuf -u "http://example.com/?id=FUZZ" \
-w values.txt \
-c
7.4 Работа с заголовками
⚠️ КРИТИЧЕСКИ ВАЖНО:
Ffuf по умолчанию НЕ добавляет заголовки. Если форма требует Content-Type, его нужно указать явно:
ffuf -u "http://example.com/api" \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer TOKEN" \
-d '{"key":"FUZZ"}' \
-w wordlist.txt
7.5 Фаззинг поддоменов
ffuf -u "http://FUZZ.example.com" \
-w subdomains.txt \
-c
7.6 Виртуальные хосты
ffuf -u "http://example.com" \
-H "Host: FUZZ.example.com" \
-w vhosts.txt \
-c
7.7 Дополнительные опции
-mc all # Match all status codes
-t <threads> # Количество потоков (default: 40)
-p <delay> # Задержка между запросами
-rate <n> # Ограничение запросов в секунду
-timeout <n> # Таймаут запроса
-o <file> # Вывод в файл (JSON, CSV, HTML)
-v # Verbose mode
-s # Молчаливый режим
7.8 Сохранение результатов
# JSON
ffuf -u "http://example.com/FUZZ" -w wordlist.txt -o results.json -of json
# HTML
ffuf -u "http://example.com/FUZZ" -w wordlist.txt -o results.html -of html
# CSV
ffuf -u "http://example.com/FUZZ" -w wordlist.txt -o results.csv -of csv
8. Dirsearch
Простой и эффективный инструмент для перебора директорий.
Установка
git clone https://github.com/maurosoria/dirsearch.git
cd dirsearch
python3 dirsearch.py -h
Основные возможности
- ✅ Многопоточность
- ✅ Keep-alive соединения
- ✅ Поддержка множества расширений
- ✅ Составление отчётов (текст, JSON)
- ✅ Эвристическое выявление невалидных страниц
- ✅ Рекурсивный брутфорс
- ✅ Поддержка HTTP-прокси
- ✅ Случайные User-Agent
- ✅ Пакетная обработка
Основной синтаксис
python3 dirsearch.py -u <URL> -e <расширения> [опции]
Основные опции
-u <url> # URL цели
-l <file> # Файл с URL-ами
-e <extensions> # Расширения (php,asp,html)
-w <wordlist> # Словарь
-t <threads> # Количество потоков
-x <codes> # Исключить коды статуса
-r # Рекурсивный поиск
-R <depth> # Глубина рекурсии
--timeout <n> # Таймаут
--proxy <proxy> # HTTP прокси
--random-agents # Случайные User-Agent
--header <header> # Дополнительные заголовки
-o <file> # Вывод в файл
Примеры использования
# Базовое сканирование
python3 dirsearch.py -u http://example.com -e php,html
# С конкретным словарём
python3 dirsearch.py -u http://example.com \
-e php,html \
-w /usr/share/wordlists/dirb/common.txt
# Рекурсивный поиск
python3 dirsearch.py -u http://example.com \
-e php \
-r \
-R 2
# С кастомными заголовками
python3 dirsearch.py -u http://example.com \
-e php \
--header "Cookie: session=abc123" \
--header "X-Forwarded-For: 127.0.0.1"
# Через прокси
python3 dirsearch.py -u http://example.com \
-e php \
--proxy http://127.0.0.1:8080
# Сохранение результатов
python3 dirsearch.py -u http://example.com \
-e php \
-o results.txt
9. Словари для фаззинга
9.1 FuzzDB
Большой проект, объединяющий фаззинг-базы по назначению.
Содержит:
- Распространённые пути файлов и директорий
- Пути логов и конфигурационных файлов
- Шаблоны атак (строки для эксплуатации)
- Шаблоны ответов (для идентификации уязвимостей)
- Web-shells для различных платформ
- Словари для брутфорса
- Документацию
Установка:
git clone https://github.com/fuzzdb-project/fuzzdb.git
Структура:
fuzzdb/
├── attack/
│ ├── sql-injection/
│ ├── xss/
│ ├── file-upload/
│ ├── lfi/
│ └── ...
├── discovery/
│ ├── predictable-filepaths/
│ └── ...
└── ...
9.2 SecLists
Огромная коллекция списков для security-тестирования.
Установка:
git clone https://github.com/danielmiessler/SecLists.git
Основные категории:
SecLists/
├── Discovery/
│ ├── Web-Content/
│ │ ├── common.txt
│ │ ├── directory-list-2.3-medium.txt
│ │ ├── raft-large-directories.txt
│ │ └── ...
│ └── DNS/
├── Passwords/
│ ├── Common-Credentials/
│ ├── Leaked-Databases/
│ └── ...
├── Usernames/
├── Fuzzing/
│ ├── SQLi/
│ ├── XSS/
│ ├── LFI/
│ └── ...
└── ...
Популярные словари:
Директории:
directory-list-2.3-medium.txt— 220k строкdirectory-list-2.3-small.txt— 87k строкcommon.txt— 4.6k строкraft-large-directories.txt— 62k строк
Файлы:
raft-large-files.txtraft-large-words.txt
Параметры:
burp-parameter-names.txt
9.3 PayloadsAllTheThings
Популярный репозиторий с payload'ами для различных уязвимостей.
Установка:
git clone https://github.com/swisskyrepo/PayloadsAllTheThings.git
Категории:
- CRLF Injection
- CSV Injection
- Command Injection
- LDAP Injection
- NoSQL Injection
- SQL Injection
- XSS Injection
- XXE Injection
- SSRF
- File Inclusion (LFI/RFI)
- File Upload
- Open Redirect
- Server Side Template Injection (SSTI)
- XML External Entity
- XPATH Injection
- OAuth
- JWT (JSON Web Token)
- PHP Type Juggling
- Insecure Deserialization
- And many more...
9.4 Расположение словарей в Kali Linux
# Dirb
/usr/share/dirb/wordlists/
# Dirbuster
/usr/share/dirbuster/wordlists/
# Wordlists (общие)
/usr/share/wordlists/
# SecLists (если установлен)
/usr/share/seclists/
9.5 Рекомендации по выбору словарей
Для быстрого теста:
common.txt(~4.6k)directory-list-2.3-small.txt(~87k)
Для полного сканирования:
directory-list-2.3-medium.txt(~220k)directory-list-2.3-big.txt(~1.2M)
Для целевого тестирования:
- Специализированные словари из SecLists
- Кастомные словари под конкретную CMS/технологию
10. Практические примеры
10.1 Комплексное сканирование директорий
# Gobuster - быстрое сканирование
gobuster dir -u http://target.com \
-w /usr/share/wordlists/dirb/big.txt \
-x php,txt,html,zip,bak \
-t 100 \
-o gobuster_results.txt
# Ffuf - с фильтрацией
ffuf -u "http://target.com/FUZZ" \
-w /usr/share/seclists/Discovery/Web-Content/raft-large-directories.txt \
-e .php,.html,.txt \
-fc 404,403 \
-c -t 100 \
-o ffuf_results.json
10.2 Поиск backup-файлов
# Типичные backup расширения
ffuf -u "http://target.com/FUZZ" \
-w filenames.txt \
-e .bak,.old,.backup,.zip,.tar.gz,.sql,.db \
-c -t 50
10.3 Фаззинг API endpoints
# REST API
ffuf -u "http://api.target.com/v1/FUZZ" \
-w api-endpoints.txt \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json" \
-mc all \
-c
# GraphQL
wfuzz -z file,graphql-queries.txt \
-d '{"query":"FUZZ"}' \
-H "Content-Type: application/json" \
http://target.com/graphql
10.4 Поиск уязвимых параметров
# LFI testing
wfuzz -c -z file,lfi-payloads.txt \
"http://target.com/page.php?file=FUZZ" \
--hc 404
# SQL Injection detection
wfuzz -c -z file,sqli-payloads.txt \
"http://target.com/product.php?id=FUZZ" \
--hh 1234
10.5 Брутфорс с интеллектуальной фильтрацией
# Первый запрос - определяем размер fail-ответа
curl -s http://target.com/login -d "user=wrong&pass=wrong" | wc -c
# Допустим, вернуло 1523 байта
# Фаззим с фильтрацией
ffuf -u "http://target.com/login" \
-X POST \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "user=admin&pass=FUZZ" \
-w passwords.txt \
-fs 1523 \
-c
11. Продвинутые техники
11.1 Bypass WAF/IPS
Техники обхода:
- Изменение User-Agent
ffuf -u "http://target.com/FUZZ" \
-w wordlist.txt \
-H "User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html)"
- Задержка между запросами
ffuf -u "http://target.com/FUZZ" \
-w wordlist.txt \
-rate 10 \
-p 0.5-2
- Ротация IP через прокси
ffuf -u "http://target.com/FUZZ" \
-w wordlist.txt \
-x http://proxy1:8080,http://proxy2:8080
- Кодирование payload
wfuzz -u "http://target.com/FUZZ" \
-w wordlist.txt,urlencode
11.2 Рекурсивный фаззинг
# Скрипт для рекурсивного фаззинга
#!/bin/bash
URL="http://target.com"
WORDLIST="/usr/share/wordlists/dirb/common.txt"
DEPTH=3
function fuzz_recursive() {
local url=$1
local depth=$2
if [ $depth -eq 0 ]; then
return
fi
# Фаззим текущий уровень
results=$(ffuf -u "${url}/FUZZ" -w $WORDLIST -fc 404 -mc 200,301,302 -s)
# Для каждого найденного пути
echo "$results" | while read -r path; do
echo "[+] Found: ${url}/${path}"
# Рекурсивно фаззим найденный путь
fuzz_recursive "${url}/${path}" $((depth-1))
done
}
fuzz_recursive $URL $DEPTH
11.3 Корреляция результатов
# Сканируем тремя инструментами
gobuster dir -u http://target.com -w wordlist.txt -o gobuster.txt
ffuf -u http://target.com/FUZZ -w wordlist.txt -o ffuf.json
dirsearch.py -u http://target.com -w wordlist.txt -o dirsearch.txt
# Находим уникальные результаты
cat gobuster.txt ffuf.json dirsearch.txt | sort | uniq > all_results.txt
12. Автоматизация
12.1 Bash-скрипт для комплексного фаззинга
#!/bin/bash
# Цвета для вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Параметры
TARGET=$1
WORDLIST="/usr/share/wordlists/dirb/common.txt"
EXTENSIONS="php,html,txt,js,zip,bak"
THREADS=50
OUTPUT_DIR="fuzzing_results_$(date +%Y%m%d_%H%M%S)"
# Проверка аргументов
if [ -z "$TARGET" ]; then
echo -e "${RED}[!] Usage: $0 <target_url>${NC}"
exit 1
fi
# Создаём директорию для результатов
mkdir -p "$OUTPUT_DIR"
echo -e "${GREEN}[+] Starting comprehensive fuzzing of $TARGET${NC}"
echo -e "${YELLOW}[*] Results will be saved to $OUTPUT_DIR${NC}"
# 1. Gobuster - директории
echo -e "${YELLOW}[*] Running Gobuster (directories)...${NC}"
gobuster dir -u "$TARGET" \
-w "$WORDLIST" \
-x "$EXTENSIONS" \
-t "$THREADS" \
-o "$OUTPUT_DIR/gobuster_dirs.txt" \
2>/dev/null
# 2. Ffuf - файлы
echo -e "${YELLOW}[*] Running Ffuf (files)...${NC}"
ffuf -u "${TARGET}/FUZZ" \
-w "$WORDLIST" \
-e ".${EXTENSIONS//,/,.}" \
-fc 404 \
-c -t "$THREADS" \
-o "$OUTPUT_DIR/ffuf_files.json" \
-of json \
-s
# 3. Поиск backup файлов
echo -e "${YELLOW}[*] Searching for backup files...${NC}"
ffuf -u "${TARGET}/FUZZ" \
-w <(cat "$OUTPUT_DIR/gobuster_dirs.txt" | grep -oP '/\K[^/]+$') \
-e .bak,.old,.backup,.zip,.tar.gz \
-fc 404 \
-c -t "$THREADS" \
-o "$OUTPUT_DIR/backups.json" \
-of json \
-s
# 4. Анализ результатов
echo -e "${GREEN}[+] Fuzzing completed!${NC}"
echo -e "${YELLOW}[*] Found directories and files:${NC}"
cat "$OUTPUT_DIR"/gobuster_dirs.txt | grep -E "Status: (200|301|302)" | wc -l
echo -e "${YELLOW}[*] Results saved to $OUTPUT_DIR/${NC}"
12.2 Python-скрипт для интеллектуального фаззинга
#!/usr/bin/env python3
import requests
import sys
from concurrent.futures import ThreadPoolExecutor, as_completed
from urllib.parse import urljoin
class IntelligentFuzzer:
def __init__(self, target, wordlist, threads=50):
self.target = target
self.wordlist = wordlist
self.threads = threads
self.results = []
def test_path(self, path):
"""Тестирует один путь"""
url = urljoin(self.target, path)
try:
response = requests.get(url, timeout=5, allow_redirects=False)
return {
'url': url,
'status': response.status_code,
'length': len(response.content),
'path': path
}
except:
return None
def analyze_response(self, result):
"""Анализирует ответ и определяет интересность"""
if not result:
return False
# Интересные коды статуса
interesting_codes = [200, 201, 204, 301, 302, 307, 401, 403, 500]
if result['status'] in interesting_codes:
return True
# Необычный размер ответа
if result['length'] > 1000 or result['length'] == 0:
return True
return False
def fuzz(self):
"""Основной метод фаззинга"""
with open(self.wordlist, 'r') as f:
paths = [line.strip() for line in f]
print(f"[+] Fuzzing {self.target} with {len(paths)} paths...")
with ThreadPoolExecutor(max_workers=self.threads) as executor:
futures = {executor.submit(self.test_path, path): path
for path in paths}
for future in as_completed(futures):
result = future.result()
if self.analyze_response(result):
self.results.append(result)
print(f"[+] {result['url']} - {result['status']} ({result['length']} bytes)")
print(f"\n[+] Found {len(self.results)} interesting paths")
return self.results
if __name__ == "__main__":
if len(sys.argv) < 3:
print(f"Usage: {sys.argv[0]} <target_url> <wordlist>")
sys.exit(1)
fuzzer = IntelligentFuzzer(sys.argv[1], sys.argv[2])
fuzzer.fuzz()
13. Сравнительная таблица инструментов
| Инструмент | Язык | Скорость | Гибкость | Простота | Рекомендация |
|---|---|---|---|---|---|
| Dirb | C | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐⭐ | Для начинающих |
| Gobuster | Go | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | Быстрое сканирование |
| Wfuzz | Python | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | Продвинутый фаззинг |
| Ffuf | Go | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | Лучший выбор |
| Dirsearch | Python | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | Хороший баланс |
| Burp Intruder | Java | ⭐⭐ (free) | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | GUI, платная версия |
14. Best Practices
14.1 Подготовка к фаззингу
-
Разведка перед фаззингом:
- Определить используемые технологии (Wappalyzer, WhatWeb)
- Проверить robots.txt и sitemap.xml
- Изучить структуру сайта вручную
-
Выбор словарей:
- Начать с небольших словарей (common.txt)
- При необходимости использовать большие
- Создавать кастомные словари под конкретную CMS
-
Настройка инструментов:
- Использовать разумное количество потоков (50-100)
- Настроить правильную фильтрацию
- Проверить, что все заголовки установлены корректно
14.2 Во время фаззинга
-
Мониторинг:
- Следить за результатами в реальном времени
- Корректировать фильтры при необходимости
- Проверять интересные находки вручную
-
Этика:
- Не создавать излишнюю нагрузку на сервер
- Использовать задержки между запросами
- Получить разрешение перед тестированием
-
Документирование:
- Сохранять все результаты
- Делать скриншоты интересных находок
- Вести лог проведённых тестов
14.3 После фаззинга
-
Анализ результатов:
- Проверить все найденные пути вручную
- Определить потенциальные векторы атак
- Составить отчёт о находках
-
Дополнительное тестирование:
- Фаззить найденные параметры
- Тестировать файлы на уязвимости
- Проверять backup-файлы
15. Типичные ошибки
❌ Частые ошибки начинающих
-
Использование слишком больших словарей
- Начинайте с малого
- Увеличивайте только при необходимости
-
Игнорирование фильтрации
- Всегда фильтруйте 404
- Определяйте и фильтруйте ложные срабатывания
-
Забывают про заголовки
- Ffuf требует явного указания Content-Type
- Не забывайте про cookies и authorization
-
Слишком много потоков
- Можно перегрузить сервер
- Можно попасть под rate-limit или бан
- Оптимально: 50-100 потоков
-
Не сохраняют результаты
- Всегда используйте опции вывода в файл
- Сохраняйте в нескольких форматах
16. Дополнительные инструменты
16.1 Другие популярные фаззеры
Feroxbuster:
# Современный Rust-фаззер
feroxbuster -u http://target.com -w wordlist.txt
Turbo Intruder (Burp Extension):
- Очень быстрый
- Требует Burp Suite
- Поддерживает Python-скрипты для кастомной логики
Arjun:
# Специализируется на поиске параметров
arjun -u http://target.com/page.php
ParamSpider:
# Извлекает параметры из Wayback Machine
python3 paramspider.py --domain target.com
16.2 Инструменты анализа
httpx:
# Анализ найденных URL
cat found_urls.txt | httpx -status-code -content-length -title
meg:
# Делает запросы к списку путей на множестве хостов
meg --verbose paths.txt hosts.txt
17. Практические задания
Задание 1: Базовое сканирование
Используя любой инструмент, найдите все доступные директории на тестовом сайте.
Задание 2: Поиск backup-файлов
Найдите backup-файлы с расширениями: .bak, .old, .backup, .zip
Задание 3: Фаззинг параметров
Найдите рабочие GET-параметры на странице /search.php
Задание 4: Комплексный тест
Проведите полное сканирование:
- Найдите все директории
- Найдите все файлы с расширениями php, html, txt
- Найдите backup-файлы
- Найдите административные панели
18. Этические и юридические аспекты
⚠️ ВАЖНО
Активный фаззинг — это потенциально агрессивная техника, которая:
-
Создаёт нагрузку на сервер
- Тысячи запросов в минуту
- Может привести к DoS
-
Оставляет явные следы
- В логах веб-сервера
- В системах мониторинга
- В WAF/IPS
-
Может быть незаконным
- Без письменного разрешения
- Даже на "заброшенных" сайтах
- Может рассматриваться как кибератака
✅ Легальное тестирование
Всегда получайте письменное разрешение:
- От владельца системы
- С указанием scope тестирования
- С указанием допустимых методов
Альтернативы для обучения:
- HackTheBox
- TryHackMe
- PortSwigger Web Security Academy
- PentesterLab
- Личные виртуальные машины (DVWA, WebGoat, Mutillidae)
19. Полезные ресурсы
Словари
Обучение
Сообщества
Заключение
Активный фаззинг веб-приложений — мощная техника, с помощью которой находится большинство уязвимостей в веб-приложениях.
Ключевые моменты:
✅ Эффективность фаззинга зависит от:
- Качества словарей
- Правильной настройки инструментов
- Анализа результатов
- Креативности тестировщика
✅ Рекомендуемый подход:
- Начать с быстрого сканирования (ffuf/gobuster)
- Проанализировать результаты
- Провести целевой фаззинг найденных точек входа
- Использовать специализированные payload'ы для конкретных уязвимостей
✅ Всегда помните:
- Получайте разрешение перед тестированием
- Не создавайте излишнюю нагрузку
- Документируйте все находки
- Практикуйтесь на легальных платформах
С опытом приходит понимание:
- Какие параметры тестировать
- Какие payload использовать
- Как интерпретировать результаты
- Где искать нестандартные векторы атак
Удачи в изучении фаззинга! 🚀