Главная / Блог / Как автоматизировать поиск багов в Bug Bounty?

Как автоматизировать поиск багов в Bug Bounty?

26 июля, 2025

28

Как автоматизировать поиск багов в Bug Bounty?

Слушай, старина, ты и я знаем, что 90% времени в баг баунти — это тупая, монотонная разведка. Перебирать субдомены, тыкать в порты, фаззить директории… Рутина убивает. А пока мы этим занимаемся, какой-нибудь шустрый малец уводит из-под носа XSS-ку на главном домене, потому что он запустил скрипт и пошел пить смузи. Хватит это терпеть. Наша задача — построить конвейер, который будет просеивать весь этот мусор за нас и приносить на блюдечке только то, где пахнет жареным.


Философия проста: Автоматизируем всё, что можно автоматизировать. Наше время — самый ценный ресурс. Его мы тратим на слом логики, на написание хитрых эксплойтов, на обход WAF, а не на запуск nmap в сотый раз.
Я — пентестер: собираю свой конвейер
Точка входа: Список доменов из программы на HackerOne/Bugcrowd/etc. Обычно это *.example.com.
Что бросилось в глаза: Объём работы. Один *.example.com может скрывать тысячи субдоменов, сотни вебов. Руками это не перелопатить, не сохранив рассудок. Нужен системный подход.
Возможные векторы (они же — этапы нашего конвейера):
1. Сбор живых активов (Recon).
2. Сканирование на известные уязвимости (Vulnerability Scanning).
3. Глубокий анализ веба (Web Deep Dive).
4. Уведомления (Alerting).
Погнали по шагам. Все команды — для твоего bash или zsh.
Шаг 1: Разведка и сбор доменов (Recon on Steroids)
Сначала нам нужен полный, исчерпывающий список субдоменов. Объединяем всё, что есть.

# Создаем файл с корневыми доменами, например, targets.txt
echo "example.com" > targets.txt

# Запускаем комбайн из пассивных и активных инструментов
# subfinder + assetfinder - пассивно, из кучи источников
# amass - мощный, но медленный, для глубокого анализа
cat targets.txt | subfinder -silent | anew subs.txt
cat targets.txt | assetfinder --subs-only | anew subs.txt
amass enum -passive -df targets.txt -o amass_passive.txt
cat amass_passive.txt | anew subs.txt

# Теперь проверяем, какие из них живые. httpx - наш лучший друг.
# Он не только проверит, жив ли хост, но и соберет заголовки, определит технологию.
cat subs.txt | httpx -silent -threads 100 -o alive.txt

Что вижу, как думаю: Окей, у нас есть alive.txt — список живых вебов. Уже не так страшно. httpx — золото, а не утилита. Сразу отсеивает мусор, показывает редиректы, можно фильтровать по коду ответа. Уже на этом этапе можно найти интересное — например, хосты с кодом 403, которые могут быть доступны при обходе через X-Forwarded-For или другие заголовки.
Шаг 2: Сканирование на низко висящие фрукты (Low-Hanging Fruits)
Теперь по этому списку живых хостов мы натравливаем Nuclei. Это наш автомат Калашникова — простой, надежный, с огромным количеством готовых “патронов” (шаблонов).

# Запускаем Nuclei с базовыми темплейтами. Исключаем неинформативные.
# -es info - чтобы не засирать вывод.
# -t cves/ - ищем известные CVE
# -t exposures/ - ищет всякие открытые панели, файлы, ключи
# -t technologies/ - под конкретные технологии
# -t takeovers/ - проверяем на возможность перехвата субдомена
nuclei -l alive.txt -t cves/ -t exposures/ -t technologies/ -t takeovers/ -es info -o nuclei_findings.txt

Что вижу, как думаю: nuclei отработал. В nuclei_findings.txt — потенциальные точки входа. Открытые .git, .env файлы, панели Jenkins без пароля, известные CVE в какой-нибудь старой Jira. Это уже не просто “мы нашли субдомен”, это — конкретный, проверяемый вектор. 90% находок будут мусором или false positive, но оставшиеся 10% — наш хлеб. Главное — регулярно обновлять шаблоны: nuclei -update-templates.
Шаг 3: Глубокий анализ веба (Getting Deeper)
Параллельно с Nuclei, натравливаем на alive.txt сборщики URL-ов. Нам нужны все возможные эндпоинты, параметры, всё, что когда-либо было в индексе или JS-файлах.

# Собираем URL'ы из Wayback Machine, Common Crawl и AlienVault
cat alive.txt | gau --threads 5 | anew urls.txt
cat alive.txt | waybackurls | anew urls.txt

# Теперь у нас есть urls.txt - огромный список ссылок. Ищем в них параметры.
cat urls.txt | unfurl -u keys > params.txt

# А теперь по этим URL'ам можно искать XSS. Dalfox - отличный инструмент.
# Он умнее простого `"><script>alert(1)</script>`
cat urls.txt | dalfox pipe -o dalfox_findings.txt

Что вижу, как думаю: Это уже похоже на настоящую охоту. Мы собрали исторические данные, вытащили параметры. params.txt — это карта сокровищ. Можно написать простенький скрипт, который будет подставлять в эти параметры пэйлоады для SSRF, Open Redirect, SQLi. dalfox автоматизирует поиск XSS. Да, он шумный, но на широком скоупе может найти что-то в забытом богом эндпоинте.
Шаг 4: Сборка всего в один скрипт (The Conveyor Belt)
А теперь, братан, магия bash. Собираем всё в один файл, например, hunt.sh.

#!/bin/bash

if [ -z "$1" ]; then
    echo "[-] Укажи файл с корневыми доменами, старина."
    echo "[-] Пример: ./hunt.sh targets.txt"
    exit 1
fi

TARGETS_FILE=$1
TIMESTAMP=$(date +"%Y-%m-%d_%H-%M")
LOOT_DIR="loot_${TIMESTAMP}"
mkdir -p $LOOT_DIR

echo "[+] Начинаем охоту на цели из $TARGETS_FILE"
echo "[+] Результаты будут в папке $LOOT_DIR"

echo "[*] Этап 1: Поиск субдоменов..."
cat $TARGETS_FILE | subfinder -silent > $LOOT_DIR/subs.txt
echo "[*] Найдено субдоменов: $(wc -l < $LOOT_DIR/subs.txt)"

echo "[*] Этап 2: Поиск живых хостов..."
cat $LOOT_DIR/subs.txt | httpx -silent -threads 100 > $LOOT_DIR/alive.txt
echo "[*] Найдено живых хостов: $(wc -l < $LOOT_DIR/alive.txt)"

echo "[*] Этап 3: Сканирование с Nuclei (это может занять время)..."
nuclei -l $LOOT_DIR/alive.txt -es info -o $LOOT_DIR/nuclei_findings.txt > /dev/null 2>&1
echo "[*] Сканирование Nuclei завершено. Находки в $LOOT_DIR/nuclei_findings.txt"

echo "[*] Этап 4: Сбор URL'ов..."
cat $LOOT_DIR/alive.txt | gau --threads 5 > $LOOT_DIR/urls.txt
echo "[*] Собрано URL'ов: $(wc -l < $LOOT_DIR/urls.txt)"

echo "[+] Охота завершена. Проверяй $LOOT_DIR. Удачи, братан."

Что вижу, как думаю: Вот он, наш комбайн. Запустил его на ночь на VPS-ке, а утром смотришь результаты. Это база. Её можно и нужно расширять: добавлять ffuf для фаззинга директорий, sqlmap --batch (осторожно!), gospider для более умного краулинга. Главное — принцип. Вход -> обработка -> выход -> следующий инструмент.

Советы:
1. Непрерывный мониторинг. Засунь этот скрипт в cron и запускай раз в день/неделю. Результаты сохраняй в Git. Команда git diff покажет тебе новые субдомены, новые открытые порты, новые находки Nuclei. Это золотая жила.
2. Визуальная разведка. Добавь в конвейер aquatone или gowitness. Иногда один взгляд на скриншоты сотен сайтов позволяет мгновенно найти дефолтные страницы, панели администрирования или страницы с ошибками.
3. Умные уведомления. Напиши обвязку, которая будет парсить выхлоп nuclei и других инструментов. Если найдено что-то с тегом high или critical, скрипт должен слать тебе уведомление в Telegram или Slack. Так ты узнаешь о находке первым.
4. Анализ JS-файлов. Из urls.txt выгребай все .js файлы (grep '\.js$' urls.txt). Скачивай их и прогоняй через LinkFinder или secretfinder. В JS-ках часто находят скрытые эндпоинты, API-ключи и прочую дичь.
5. Облачная разведка. Если цель сидит в AWS/Azure/GCP, обычного рекона субдоменов мало. Используй инструменты вроде S3Scanner или cloud_enum для поиска открытых бакетов и других облачных ресурсов. Туда часто забывают поставить пароль.
6. Не будь тупым сканером. Автоматизация — это для фильтрации шума. Когда твой конвейер принес тебе что-то интересное (например, странный API-эндпоинт), вот тут и начинается настоящая работа. Твоя, а не скрипта. Руками, с Burp Repeater, с головой.


Всё, братан. Теперь иди и собери свою машину смерти. Меньше рутины — больше взломов.

    Comments are closed