Когда ты начинаешь рекон, задача — не просто «найти домены». Нужно собрать воспроизводимую карту сети: где находятся публичные сервера, какие внутренние API выдают себя через JS, какие старые окружения забыли закрыть. Хорошая разведка даёт не просто список хостов, а контекст — почему этот хост важен и каким путём от него можно добраться до критической части сети.
Разведка — итеративный процесс: формулируешь гипотезу (например, «у компании X есть ASN Y»), собираешь данные (CT, Wayback, BGP), верифицируешь (reverse DNS, сертификаты, masscan → nmap) и корректируешь гипотезу. Ниже — последовательность шагов, объяснение логики и команды
1. Контур сети: ASN → CIDR → IP
Установка базовых утилит:
apt -y install curl whois bind9-host jq ipcalc grepcidr nmap ncat
Применяем:
# Получить ASN по домену
whois -h http://whois.cymru.com $(dig +short target.com)
# Быстрая утилита asn (если разрешено)
curl "https://raw.githubusercontent.com/nitefood/asn/master/asn" -o /usr/bin/asn
chmod 0755 /usr/bin/asn
asn target.com
# Развёртка CIDR в IP
go install github.com/imusabkhan/prips@latest
prips 198.51.100.0/24 > ips.txt
Практический совет: ASN часто включает shared hosting и CDN-адреса. Не принимай префикс автоматически за «владение» — связывай IP с сертификатами и PTR, чтобы отделить релевантное от шума.
2. Reverse DNS и TLS: связываем адреса с именами
PTR и сертификаты — простой и эффективный способ привязать IP ↔ домен. Особенно полезно при наличии CDN и многоарендного хостинга — CN/SAN в сертификате даёт подсказку, какие сервисы действительно относятся к цели.
Команды:
# Reverse DNS по CIDR
prips 173.0.84.0/24 | hakrevdns | tee hakrevdns-CIDR.txt
# IP -> hostnames и SSL CN/SAN
go install github.com/hakluke/hakip2host@latest
prips 173.0.84.0/24 | hakip2host
Пример вывода:
[DNS-PTR] 173.0.84.23 new-creditcenter.paypal.com.
[SSL-CN] 173.0.84.67 api.paypal.com
[SSL-SAN] 173.0.84.76 svcs.paypal.com
Интерпретация: если сертификат содержит брендовые домены — вероятность принадлежности выше. Если PTR и CN различаются — возможно, это прокси/шлюз или shared hosting.
3. Пассивная субдоменная разведка
Пассивка — твой первый ход: большой охват при нулевом или минимальном шуме. Источники: crt.sh/Censys, Wayback, RapidDNS, Riddler, GitHub.
Рабочие команды:
# crt.sh → список name_value
curl -s "https://crt.sh/?q=%.example.com&output=json" \
| jq -r '.[].name_value' | sed 's/\r//g' | tr ',' '\n' | sort -u
# Wayback субдомены
curl -sk "http://web.archive.org/cdx/search/cdx?url=*.$domain&output=txt&fl=original&page=" \
| awk -F/ '{gsub(/:.*/, "", $3); print $3}' | sort -u | tee waybacksubs.txt
# Riddler экспорт
curl -s "https://riddler.io/search/exportcsv?q=pld:YOURDOMAINHERE.COM" \
| grep -Po "([\w.-]+\.\w+)" | sort -u | tee riddler.txt
Совет: помечай для каждой записи источник(и). Это помогает при триаже — crt.sh+Wayback = более весомая находка, чем single hit из неизвестного источника.
4. Активная субдоменная разведка: брутфорс, AXFR, reverse-dns
Пассивка даёт кандидатуры. Активка — подтверждает и расширяет. Брутфорс и проверки zone transfer иногда дают «полные» зоны, особенно у забытых или неправильно настроенных NS.
Инструменты и примеры:
# subfinder (pasive+active options)
go install github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest
subfinder -all -recursive -rL ~/resolvers.txt -d target.com
# amass brute
amass enum -d target.com -active -o amass-active.txt -brute -alts
# Проверка AXFR
dig axfr @ns1.example.com example.com
host -t axfr example.com ns1.example.com
nslookup -query=AXFR example.com ns1.example.com
Практика: используй пассивные результаты как seed для брутфорса. Снижай rate и ставь резолюции (resolver list) надёжные — это уменьшает шанс быть замеченным операторами провайдера.
5. Сбор эндпоинтов и анализ JS — где прячутся API
Клиентский код часто раскрывает внутреннюю адресацию: API_URL, пути к admin, sourcemap. Собираешь URL, запускаешь headless-краул, скачиваешь JS и ищешь паттерны.
Pipeline:
# waybackurls для URL
go install github.com/tomnomnom/waybackurls@latest
cat domains.txt | waybackurls > urls
# Katana — headless crawl + XHR extraction
go install github.com/projectdiscovery/katana/cmd/katana@latest
katana -u https://target.com -nc -jc -kf -fx -xhr -jsl -ef woff,css,png,jpg -r ~/resolvers.txt -o katana-output.txt
# getJS + jsfinder + jsleak
go install github.com/003random/getJS@latest
cat urls.txt | getJS --complete --resolve --insecure | anew js-urls.txt
go install -v github.com/kacakb/jsfinder@latest
cat js-urls.txt | jsfinder -read -s -o js.txt
go install github.com/channyein1337/jsleak@latest
cat urls.txt | jsleak -s
Wayback → Katana → getJS → jsfinder/jsleak. Sourcemap — особенно ценно: он может раскрыть реальные имена функций и переменных — это как снять маску с API.
6. Массовое сканирование: masscan → rustscan → nmap
Когда есть IP-список — сканируй разумно. Масскан даёт скорость; nmap даёт детали. RustScan удобно соединяет скорость и интеграцию с nmap.
Пример:
# masscan быстрый sweep
masscan 10.10.10.0/24 -p1-65535 --rate 1000 --output-format json --output-filename mscan.json
# извлечь live IP и прогнать nmap
cat mscan.json | jq -r '.[].ip' | sort -u > live.txt
nmap -iL live.txt -sC -sV -oA nmap-full
Важно: masscan даёт шум и ложные позитивы. Всегда подтверждай найденные порты через nmap и httpx. Контролируй rate согласно договорённому scope.
7. Fingerprinting: превращаем «что» в «как»
После того как знаешь сервисы — нужно понять стек. Это определяет, какие векторы пробовать дальше.
Примеры инструментов:
httpx -l live_subdomains.txt -silent -o httpx-output.txt
whatweb -v target.com
# fingerprintx / webanalyze для массового сканирования стека
Зачем: версии, заголовки, cookies, favicon hash, X-Powered-By — всё это помогает генерировать таргетированные словари и выбирать подходящие техники fuzzing/эксплойт-поиска.
8. Fuzzing и поиск параметров
Таргетированный фаззинг эффективнее «рандомного» — делай словари на основе найденного стека и JS-парсинга.
Примеры:
# директории и файлы
ffuf -w common.txt -u https://target.com/FUZZ -mc 200,301,302 -fc 404 -o ffuf-results.json
# параметры
arjun -u "https://target.com/api/v1/resource" -o arjun-params.txt
Дополнительно: фаззинг заголовков (Host, X-Forwarded-For) иногда выявляет вхождения vhost или обходы авторизации. Не забывай тестировать поведение с разными UA и cookies.
9. Поиск секретов и артефактов
GitHub-dorks, sourcemap, PDF/IMAGE-metadata — типичные места утечек. Инструменты jsleak, secretfinder, exiftool автоматизируют рутинные проверки.
10. Чеклист для reconа
⦁ ASN и префиксы (asn, whois).
⦁ Развёрнуть CIDR (prips).
⦁ Reverse DNS + SSL CN/SAN (hakrevdns, hakip2host).
⦁ Сбор пассивных субдоменов (crt.sh, wayback, riddler).
⦁ Активный перебор (subfinder, amass).
⦁ Spider + JS extraction (katana, getJS, jsfinder).
⦁ masscan → nmap → httpx.
⦁ Fuzzing (ffuf, arjun).
⦁ Поиск секретов (jsleak, secretfinder, exiftool).
⦁ Структурирование и versioning (timestamped JSON).
Заключение
Разведка — последнее, где «метод» важнее «инструмента». Инструменты автоматизируют шаги, но ценность даёт умение интерпретировать сигнал: почему этот хост важнее другого, какие зависимости он раскрывает, какие процессы разработки приведут к утечкам завтра. Работай итеративно, фиксируй источник каждого факта и не забывай: дисциплина и аккуратность в recon делают результаты полезными, а не просто большим списком.