Слушай, старина, ты и я знаем, что 90% времени в баг баунти — это тупая, монотонная разведка. Перебирать субдомены, тыкать в порты, фаззить директории… Рутина убивает. А пока мы этим занимаемся, какой-нибудь шустрый малец уводит из-под носа XSS-ку на главном домене, потому что он запустил скрипт и пошел пить смузи. Хватит это терпеть. Наша задача — построить конвейер, который будет просеивать весь этот мусор за нас и приносить на блюдечке только то, где пахнет жареным.
Философия проста: Автоматизируем всё, что можно автоматизировать. Наше время — самый ценный ресурс. Его мы тратим на слом логики, на написание хитрых эксплойтов, на обход WAF, а не на запуск nmap в сотый раз.
Я — пентестер: собираю свой конвейер
Точка входа: Список доменов из программы на Standoff 365/Yandex. Обычно это *.example.com
.
Что бросилось в глаза: Объём работы. Один *.example.com
может скрывать тысячи субдоменов, сотни вебов. Руками это не перелопатить, не сохранив рассудок. Нужен системный подход.
Возможные векторы (они же — этапы нашего конвейера):
1. Сбор живых активов (Recon).
2. Сканирование на известные уязвимости (Vulnerability Scanning).
3. Глубокий анализ веба (Web Deep Dive).
4. Уведомления (Alerting).
Погнали по шагам. Все команды — для твоего bash
или zsh
.
Шаг 1: Разведка и сбор доменов (Recon on Steroids)
Сначала нам нужен полный, исчерпывающий список субдоменов. Объединяем всё, что есть.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# Создаем файл с корневыми доменами, например, 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. Это наш автомат Калашникова — простой, надежный, с огромным количеством готовых “патронов” (шаблонов).
1 2 3 4 5 6 7 |
# Запускаем 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-файлах.
1 2 3 4 5 6 7 8 9 10 |
# Собираем 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
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#!/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
, с головой.
Всё, братан. Теперь иди и собери свою машину смерти. Меньше рутины — больше взломов.