🎯
Урок для security researchers, CTF-игроков и bug-bounty хантеров. Базовый веб-пентест предполагается известным — здесь про то, как разогнать его в 5–10 раз через мультиагентный режим Claude Code.
1 · Что такое vibe-hacking
Vibe-coding, перенесённый в offensive security
Главный агент Claude Code не делает работу руками: он раскладывает методологию (PTES / OWASP WSTG) на независимые фазы и запускает их параллельно через субагентов, после чего агрегирует находки. То, что обычно стоит недели ручного пентеста — recon, source-leak hunt, fingerprinting, headers, nuclei, path enum, GraphQL probe, CMS detection — сжимается до 1–2 часов.
📦
На выходе — не финальный pwn, а карта атакующей поверхности + low-hanging fruit за один присест. Главный профит: ваш контекст не загажен dig-ами и curl-ами. Субагенты работают в sandbox-контексте, возвращают сжатые саммари, основной агент остаётся свежим для креатива — chaining, business logic, ручная эксплуатация.
2 · Зачем параллелить
Bottleneck — не CPU, а контекст
Подавляющее большинство этапов recon-а независимы по контексту:
- DNS recon не зависит от HTTP fingerprint
- nuclei на одном поддомене не зависит от dirbuster на другом
- source-leak hunt (
.git, .env, swagger) не зависит от GraphQL probe
- CMS-fingerprint автономен от header-аудита
🧠
CPU и сеть — не bottleneck. Bottleneck — context window основного агента. Гоняете каждый dig +short лично — в логе быстро 100K+ токенов мусора, и к моменту, когда нужно думать над chain-ом, окно забито. Субагенты едят свой контекст, наверх возвращают только итоги.
3 · Архитектура multi-agent runs
Диспетчер + субагенты по ролям
Main agent (диспетчер, руками не пентестит)
├── planner — разложить scope на волны и таргеты
├── recon x N — DNS, whois, CT logs, ASN
├── web x N — HTTP probes, nuclei, dirbuster
├── source-leak — .git/.env/swagger/source-maps
└── reporter — internal.md → tech.pdf + exec.pdf
🎛️
main / dispatcher
оркестрация, агрегация, PTT
Руками не пентестит — задача PTT (Pentest Task Tracker), делегирование через Agent/Task tool
Между волнами агрегирует результаты и решает, кого запускать дальше
Ведёт TodoList через TaskCreate/TaskUpdate — видимость прогресса, возможность отката
Разбивает scope на target list, назначает волны — предотвращает дубликат работы
Явное разделение target list между recon-агентами
🛰️
recon x N
passive: DNS, whois, CT, ASN
Только публичные DNS/CT-источники, без активных сканов
Пишет в свою папку loot/<wave>/<host>/ — нет гонок за файлы
Не делает выводов об уязвимостях — только факты
🌐
web x N
HTTP probes, nuclei, dirbuster
Конкретные пути вместо bruteforce 50K-wordlist
sleep 0.3s между запросами, --max-time на каждый
Stop after PoC — success:true → запись в internal.md, остановка
📝
reporter
internal.md → tech + exec
Вход — internal.md + loot/, выход — два markdown'а под Pandoc
REPORT_STANDARD-формат, не «сделай красиво» — иначе эссе вместо отчёта
Находки группирует по root cause, не по симптомам
🗃️
Общий журнал internal.md — append-only, с тегами [WAVE2A], [WAVE3B]. Каждый агент дописывает свой блок, никогда не перезаписывает чужой. Если два агента пишут одновременно — потеряете данные; соглашение: каждый в свой файл loot/<wave>/<agent>.md, reporter в конце мержит.
4 · Шаблон промпта для subagent
Общий vs конкретный
плохо
«посмотри что там у host»
- субагент интерпретирует на свой лад
- тратит контекст
- возвращает мусор
хорошо
конкретные команды + границы
- ровно эти команды, без додумывания
- лимиты времени и шума
- жёсткая структура отчёта
recon-dns subagent prompt
SYSTEM PROMPT
ROLE: passive DNS recon subagent
TARGET: target.example (in scope: *.target.example)
AUTHORIZATION: yes, written approval, ref TKT-1234
OPSEC: passive only, no active scans, VPN on
TASKS (ровно эти команды)
1. dig +short A/AAAA/MX/NS/TXT target.example
2. curl -s "crt.sh/?q=%25.target.example&output=json" | jq -r '.[].name_value' | sort -u
3. whois target.example | grep -iE 'registrar|created|name server'
4. curl -s "api.hackertarget.com/aslookup/?q=target.example"
CONSTRAINTS
max 5 мин wallclock · sleep 0.3s между запросами · только публичные DNS/CT
OUTPUT (≤400 слов → loot/wave1/recon-dns.md)
## Subdomains список с источником (CT/DNS/OSINT)
## DNS records A/AAAA/MX/NS/TXT — таблица
## ASN / Hosting провайдер, страна, ASN
## Anomalies что бросилось в глаза для след. волн
— не делать выводов об уязвимостях, только факты —
📋
Промпт читается как ТЗ для джуна. Если джун может выполнить буквально — субагент тоже сможет.
5 · Волны (waves)
Приоритезация по шуму
Не запускать всё сразу. Каждая волна — свой OPSEC-профиль:
| Wave | Что делаем | Шум | Время |
| 1 | passive recon — DNS, CT logs, whois, ASN, OSINT | low | 5 мин |
| 2 | light active — HTTP fingerprint, headers, robots/sitemap, TLS | medium | 10 мин |
| 3 | targeted probes — найденные сервисы (Portainer, Grafana, MinIO, Vault, GraphQL, Swagger, Actuator) | medium | 15 мин |
| 4 | source-leak hunt — .git/, .env, *.bak, source-maps, exposed buckets | medium-high | 15 мин |
| 5 | depth — CVE-PoC, эксплойты, RCE-проверки | high — только с явным OK | 30+ мин |
⚖️
Между волнами диспетчер агрегирует результаты и решает, кого запускать дальше. Не лезть слепо в Wave 5 — часто Wave 1+2 уже дают критичные находки (exposed admin panel, leaked .env).
6 · OPSEC правила параллелизма
Параллелизм усиливает шум
🛡️
Один точечный curl > 20 переборов. Знаешь, что искать — запрашивай конкретный путь, не bruteforce-ишь 50K-wordlist.
sleep 0.3s между запросами внутри субагента — без этого по логам цели вы DDoS.
/usr/bin/curl --max-time 8 — явный путь обходит RTK-хуки/алиасы, --max-time страхует от подвисших соединений (они роняют пайплайн).
Stop after PoC — получили success:true → записали → остановились.
Не загружать файлы на цель — никаких webshell, phpinfo.php. Артефакт = улика = провал OPSEC.
Logging — каждое действие → internal.md с timestamp: [2026-05-09 14:32:01] [WAVE2A] dig target.example → 198.51.100.10.
VPN до старта — curl -s ifconfig.me в самом первом субагенте.
7 · Anti-patterns
Где multi-agent реально лажает
- Дубликат работы — два recon-агента независимо делают
dig по одному хосту. Решение: planner с явным разделением target list.
- Гонки за
internal.md — каждый агент пишет в свой файл, reporter мержит.
- Слишком общие промпты — расход контекста + случайный output. Всегда список конкретных команд.
- 20+ агентов параллельно — context overflow у диспетчера, WAF замечает аномалию. Реальный потолок — 4–6 одновременных субагентов.
- Игнор OPSEC tripwires — субагент видит unsealed Vault и идёт дальше по чеклисту. Должно быть: stop → escalate → ждать решения.
- Reporter без структуры — «сделай красиво» вместо REPORT_STANDARD = эссе вместо отчёта.
8 · Trip-wires — когда STOP
Жёсткие стопы в system prompt каждого субагента
🚨
Publicly-exposed database port (Postgres/Redis/Mongo/Elastic без auth) → STOP, флаг в internal.md, репорт диспетчеру.
EOL/unsealed Vault, Consul без ACL, exposed Docker API → STOP, не пытаться читать секреты.
Поверхность для admin RCE (Portainer без auth, Jenkins script console, exposed Actuator/heapdump) → STOP, не эксплуатировать без явного OK.
3 неудачные попытки одного PoC → подход неверный. Revert-first: откатиться, переосмыслить, не накручивать костыли.
PII в leaked-данных → маскировать в отчёте до сохранения (REPORT_STANDARD требует).
9 · Структура отчёта
Три документа (REPORT_STANDARD)
md
internal.md
сырые находки, полный PoC, raw output, timestamps. Для команды.
≤15
tech.pdf — технический
находки сгруппированы по root cause, не по симптомам. CSS: ~/infosec/pdf_style.css.
≤4
exec.pdf — для менеджмента
бизнес-impact, severity, рекомендации без жаргона.
📑
Раздел №0 «О характере работ» идентичен в обоих PDF. Профиль атакующего — L1–L4. Запрещены формулировки «белый хакер / пентестер / любой с интернетом» — только конкретный профиль.
10 · Чек-лист vibe-pentest за 1 час
Таймлайн для типового SaaS (5–15 поддоменов)
T+00–05 · setup
диспетчер: scope + authorization + VPN (ifconfig.me). planner: разложить scope на target list, назначить волны.
T+05–15 · Wave 1 (parallel)
recon-dns: dig + crt.sh + whois · recon-osint: GitHub dorks, pastebin, web-archive → агрегация → обновить target list.
T+17–30 · Wave 2 (parallel)
web-headers: curl -I по всем поддоменам · web-tls: testssl.sh короткий профиль · web-fingerprint: whatweb-like → выделить «интересные» сервисы.
T+32–45 · Wave 3 (parallel by service)
probe-graphql (если /graphql) · probe-swagger (если /swagger или /api-docs) · probe-actuator/heapdump (Spring) · probe-portainer/grafana/minio.
T+45–55 · Wave 4 · source-leak
.git/HEAD, .env, .DS_Store, source-maps, exposed buckets.
T+55–60 · trip-wire check → reporter
есть критичные находки? → STOP, репорт. Иначе: reporter собирает internal.md → tech + exec.
⏱️
Час — для типового SaaS-таргета с 5–15 поддоменами. Для крупного периметра масштабируется до 4–6 часов, логика та же.
11 · Что НЕ автоматизируется
Multi-agent — для широты, человек — для глубины
Multi-agent отлично делает discovery + low-hanging fruit. Плохо делает:
- Chaining уязвимостей — SSRF → metadata → IAM creds → S3. Креатив, нужен контекст всей картины; субагент видит только свой кусок.
- Business-logic flaws — race conditions в платежах, IDOR через бизнес-сценарий, abuse скидочной логики. Руками + Burp Repeater.
- Custom auth flows — нестандартный SSO, JWT с кастомными claims, OAuth misconfigs.
- Social engineering — OSINT для phishing, recon сотрудников. Отдельная зона.
- Глубокий pwn — privilege escalation цепочки, persistence, lateral movement. Одна голова с полной картой, не 5 агентов.
🔑
Правило: subagents для широты, человек + один основной агент для глубины.
12 · Заключение
Станок с ЧПУ, а не замена инженеру
Vibe-hacking даёт за час то, на что раньше уходила неделя: карта атакующей поверхности + список low-hanging fruit + черновик отчёта. Это не замена ручному пентесту, это акселератор его discovery-фазы. За человеком остаётся:
- Разрешение на работу — scope, authorization, contract.
- OPSEC — VPN, чистый профиль, минимальный footprint.
- Креативная эксплуатация — chaining, custom flows, business logic.
- Responsible disclosure — отчёт владельцу, координация фиксов, никаких публикаций без согласования.
Authorized scope, OPSEC, responsible disclosure — без этих трёх якорей vibe-hacking превращается в обычный black hat, со всеми вытекающими. Trip-wire сработал — STOP. Не дожимайте. Удачной охоты.