В bug bounty побеждает тот, кто лучше знает цель. Большая часть уязвимостей находится не на главном сайте, а на забытом поддомене, старом API или в JavaScript-файле с захардкоженным ключом. Чтобы всё это найти, нужно прогнать десятки утилит, связать их вывод и не утонуть в результатах. Делать это руками для каждой программы — долго, поэтому я написал ReconWTF.

Идеи и часть сценариев вдохновлены проектом reconftw от six2dez. ReconWTF похож по духу, но работает по-своему и заточен под мой процесс.

Что делает

ReconWTF — Bash-фреймворк, который ставит нужные инструменты и запускает их по цепочке, передавая результаты одного этапа следующему. Разведку можно запускать целиком или по частям.

Сбор информации: IP-адреса поддоменов, определение облачного провайдера, информация о домене, проверка наличия WAF.

Поддомены:

  • пассивный поиск — amass, сертификаты (ctfr), открытые датасеты;
  • активный — amass, subfinder;
  • брутфорс — puredns;
  • пермутации имён — DNScewl + puredns.

Эндпоинты: пассивно из архивов и GitHub (gauplus, github-endpoints), активно — краулером gospider.

Веб-пробинг: живые хосты (httpx, httprobe) и скриншоты для быстрого визуального обзора.

JavaScript: сбор ссылок (linkfinder), поиск секретов (SecretFinder), скачивание JS и извлечение переменных.

Сканирование: порты (naabu, nmap), технологии (nuclei, webanalyze), заголовки безопасности.

Поиск уязвимостей: шаблоны nuclei, скрипты nmap NSE, searchsploit, фаззинг (ffuf), проверки CORS и open redirect, обход 403.

OSINT: сбор email и проверка утечек, дорки по GitHub и Google, метаданные.

Установка

git clone https://github.com/solo10010/reconWTF
cd reconWTF
chmod +x *.sh
./reconwtf.sh --install       # поставит все утилиты
./reconwtf.sh --check-tools   # проверит, что всё на месте

Перед запуском заполните config.conf: API-ключи сервисов, потоки, таймауты, порты, какие инструменты использовать. Через конфиг тонко настраивается весь процесс.

Режимы

ФлагЧто делает
-p, --passiveтолько пассивные методы, не касается цели
-o, --osintминимальная разведка через OSINT
-s, --subdomain-searchтолько поддомены: поиск, резолв, проверка захвата
-a, --activeполный анализ с активными проверками
-r, --recon-fullполная разведка цели

Примеры

Полная разведка:

./reconwtf.sh -d "target.com" -a

Только OSINT:

./reconwtf.sh -d "target.com" -o

Со всеми важными параметрами — компания, диапазон адресов, cookie для авторизованной зоны, исключения и свой конфиг:

./reconwtf.sh -d "target.com" -m "Target Inc" -cidr "203.0.113.0/24" \
  -c "SESSIONID=XXXX" -x out_of_scope.txt \
  --config config/config.conf --recon-full

Scope — это важно

Bug bounty — это работа строго в рамках программы. Поэтому в ReconWTF есть файл out of scope: всё, что в нём указано, исключается из результатов и не сканируется.

\.excluded.com   # исключить все поддомены excluded.com
\example.com     # исключить домен целиком

Активные режимы запускайте только по целям, на которые у вас есть разрешение: в рамках bug bounty программы или по договору на тестирование. Пассивный режим (-p) и OSINT не взаимодействуют с целью напрямую.

Хранение результатов

Результаты разведки можно автоматически пушить в приватный репозиторий GitHub: создайте репозиторий, добавьте SSH-ключ и укажите данные в config.conf. Так история разведки по каждой цели сохраняется и её удобно сравнивать между запусками — новые поддомены и эндпоинты часто и есть самые интересные.

Что дальше

ReconWTF решает задачу «прогнать всё по цепочке», но результаты всё равно приходится разбирать в файлах. Следующим шагом стала собственная платформа с базой данных, интерфейсом, перехватывающим прокси и непрерывным мониторингом — но это уже другая история. Ещё один связанный проект — коллекция шаблонов nuclei и словарей BugBounty-Hub, которую использует ReconWTF.