Содержание статьи
- Структура папок
- Используемый софт
- Цели
- Первое знакомство
- Букмарклет для сбора URL (взаимодействие)
- Онлайновые сервисы
- Проверяем утечки
- Собираем почты
- EmailHarvester
- TLD и root domains
- Онлайн
- Из командной строки
- Собираем IP-адреса
- Поиск номера AS
- Ripe — ситуативно
- ASNmap
- Ищем поддомены
- Google Dorks
- Обратный резолв записей PTR (взаимодействие)
- TLSx — поиск по сертификатам (взаимодействие)
- Amass
- Revwhois
- Haktrails
- Subfinder
- Crt.sh
- Поддомены на GitHub
- VirusTotal
- Censys
- Перебираем поддомены
- Ограничиваем лимиты
- Перебираем пермутации
- Ответы по доменам (взаимодействие)
- SAN — сертификаты альтернативного имени субъекта (взаимодействие)
- Собираем URL по всем хостам
- Katana
- Gau
- Waybackurls
- Github-endpoints
- Xurlfind3r
- Формируем общий список
- Очищаем данные от невалидных
- Добавляем домены из URL, полученных в архивах
- Обрабатываем список поддоменов и IP (взаимодействие)
- Ищем живые поддомены через публичные DNS
- Пассивно смотрим открытые порты
- Пассивный поиск багов
- Google Dorks (взаимодействие)
- Секреты GitHub
- Leakix.net
- Shodan и nrich
- Работа с заголовками
- Заголовки, комментарии, атрибуты
- Программное обеспечение сервера
- Собираем UUID
- Поиск конфиденциальной информации
- Итоговая структура файлов и директорий
- Выводы
На просторах интернета — как в русскоязычном сегменте, так и в иностранном — очень много крутых материалов, однако я не находил универсальных пошаговых инструкций, которые охватывали бы весь процесс от начала и до конца, особенно в части проведения активной и пассивной разведки на этапе формирования поверхности атаки.
Поэтому я попытался выстроить универсальный рабочий процесс, который мог бы как‑то унифицировать базовые проверки. Точнее, настолько универсальный, насколько это возможно.
Я постарался сделать статью понятной и интересной для специалистов с любым уровнем и бэкграундом. Я добавлял в воркфлоу такие проверки, которые, на мой взгляд, необходимо проводить почти на любом проекте — будь то Red Team, пентест или анализ защищенности.
Конечно, любой воркфлоу будет сильно зависеть от того, какие данные есть на начальном этапе. Например, если это анализ защищенности конкретного веб‑приложения, то алгоритм действий один, а если пентест, на котором нам ничего не известно, кроме названия компании или основного домена, то другой.
Я старался исходить из того, что на старте нам известен самый минимум. Если в твоей задаче есть какие‑то другие вводные данные и, например, список доменов уже известен, то просто пропускай до нужного места.
Наши методы и сценарии будут по возможности пассивными, но среди них могут попадаться и подразумевающие какое‑то минимальное взаимодействие. Об этом я буду предупреждать сразу же — пометкой «взаимодействие» на случай, если тебе нужно полное отсутствие активных действий.
Структура папок
Поскольку мы будем использовать в подавляющем большинстве случаев консольные утилиты, нам нужно хранить полученную информацию так, чтобы в ней не запутаться. На первый взгляд это кажется легкой задачей, а на деле зачастую возникает путаница. Так как у нас цикл статей, я решил вместо общей структуры показать пример возможного варианта в конце каждого пройденного этапа.
Разумеется, в идеальном мире все это будет автоматизировано и станет храниться непосредственно в базе данных, откуда информация подгружается на красивые дашборды... Но мы не в идеальном мире, поэтому продолжим работать в привычном формате.
Используемый софт
Здесь я кратко опишу часто используемые утилиты. Некоторые из них малоизвестны, поэтому неплохо будет сказать пару слов о том, как и для чего они применяются:
-
anew служит для добавления в файл уникальных строк из
stdin
; - html-tool используется для анализа ответов сервера;
- fff мы будем использовать для сохранения заголовков и тела ответа в файлы;
- inscope позволяет исключать все, что за пределами скоупа;
- paramrep был мной разработан в качестве аналога для qsreplace. Утилита qsreplace мне не понравилась тем, что она изменяет абсолютно все параметры в URL сразу (это делает результат непредсказуемым), а paramrep подменяет параметры по одному;
- curl-impersonate — усовершенствованный curl. Позволяет обходить защиту от ботов, изображая легитимный браузер, в том числе путем подмены JA3-фингерпринта, что в последнее время все актуальнее.
Для inscope нужно создать в корневом каталоге проекта файлик .
примерно с таким содержимым:
.*\.example\.com$
^example\.com$
Цели
Глобально на этапе пассивной разведки перед нами стоят следующие цели:
- познакомиться с таргетами, понять, насколько они большие и архитектурно сложные, какие технологии используются;
- собрать список поддоменов;
- собрать живые поддомены;
- получить несколько опциональных файлов для ручного анализа;
- собрать список IP-адресов;
- получить список URL-адресов из разных источников в пассивном режиме;
- посмотреть в пассивном режиме порты и сервисы;
- проверить в пассивном режиме уязвимости;
- изучить утечки учетных данных;
- собрать из открытых источников список email-адресов.
Первое знакомство
Обычно перед стартом работ я делаю несколько простых шагов, которые никак не связаны с общим процессом. Делаются они исключительно для того, чтобы получить начальное представление о цели. Первыми они идут условно — их можно и нужно проводить повторно, когда будет больше информации.
Букмарклет для сбора URL (взаимодействие)
Свое первое знакомство с таргетом я предпочитаю начинать с беглого взгляда на цель с помощью специально заготовленной JavaScript‑закладки. Она выводит список уникальных адресов, найденных на текущей странице.
info
Букмарклет — это фрагмент кода на JavaScript, сохраненный в виде закладки браузера. Если нажать на него, он запустится на текущей веб‑странице и что‑то сделает. Это никак не триггерит целевую систему: по сути, мы просто один раз зашли на страницу, как сделал бы любой легитимный клиент.
Вот код букмарклета:
javascript:(async function(){let scanningDiv=document.createElement("div");scanningDiv.style.position="fixed",scanningDiv.style.bottom="0",scanningDiv.style.left="0",scanningDiv.style.width="100%",scanningDiv.style.maxHeight="50%",scanningDiv.style.overflowY="scroll",scanningDiv.style.backgroundColor="white",scanningDiv.style.color="black",scanningDiv.style.padding="10px",scanningDiv.style.zIndex="9999",scanningDiv.style.borderTop="2px solid black",scanningDiv.innerHTML="<h4>Scanning...</h4>",document.body.appendChild(scanningDiv);let e=[],t=new Set;async function n(e){try{const t=await fetch(e);return t.ok?await t.text():(console.error(`Failed to fetch ${e}: ${t.status}`),null)}catch(t){return console.error(`Error fetching ${e}:`,t),null}}function o(e){if(!(e.startsWith("/")||e.startsWith("./")||e.startsWith("../")))return!1;if(e.includes(" ")||/[^\x20-\x7E]/.test(e))return!1;if(e.length<2||e.length>=200)return!1;if(e.includes("{")||e.includes("}")||e.includes(":")||e.includes("?")||e.includes("*")||e.includes("(")||e.includes(")")||e.includes("[")||e.includes("]"))return!1;return!0}function s(e){return[...e.matchAll(/[%27"]((?:\/|\.\.\/|\.\/)[^%27"]+)[%27"]/g)].map(e=>e[1]).filter(o)}async function c(o){if(t.has(o))return;t.add(o),console.log(`Fetching and processing: ${o}`);const c=await n(o);if(c){const t=s(c);e.push(...t)}}const l=performance.getEntriesByType("resource").map(e=>e.name);console.log("Resources found:",l);for(const e of l)await c(e);const i=[...new Set(e)];console.log("Final list of unique paths:",i),console.log("All scanned resources:",Array.from(t)),scanningDiv.innerHTML=`<h4>Unique Paths Found:</h4><ul>${i.map(e=>`<li>${e}</li>`).join("")}</ul>`})();
Как установить и использовать этот букмарклет:
- добавь новую закладку на панель закладок в браузере;
- замени URL закладки фрагментом кода на JavaScript;
- открой целевую страницу и щелкни по букмарклету;
- если не сработало, поищи разрешение запускать букмарклеты в настройках безопасности браузера.

Онлайновые сервисы
В продолжение знакомства с целью мы можем использовать онлайновые сервисы для поиска информации о сайте:
- suip.biz — неплохо подойдет для поиска поддоменов;
- coolakov.ru/tools/ping — позволяет быстро смотреть статус‑коды по доменам и поверхностно ознакомиться с заголовками; более детальный анализ я опишу далее.
Этот этап занимает немного времени, но уже на нем ты познакомишься с целью и потенциально выявишь такие уязвимости, как, например, subdomain takeover.
Проверяем утечки
Для общего понимания системы и обогащения информации неплохо было бы посмотреть утечки учетных данных пользователей или сотрудников нашей цели. Обычно этот тип проверок выделяют в отдельный вид работ, которым занимаются специалисты по OSINT. Я приведу несколько ресурсов для примера (на самом деле их намного больше):
- бесплатный сервис: proxynova.com/tools/comb/;
- платный сервис: snusbase.com.
Собираем почты
Далее нам было бы неплохо поискать корпоративные учетные записи пользователей, что в дальнейшем также может пригодиться при проведении работ на этапе активного анализа.
EmailHarvester
EmailHarvester — одна из утилит для поиска и сбора email-адресов.
Ниже приведена bash-команда для запуска утилиты и поиска по списку доменов:
(trap 'kill 0' SIGINT; while IFS= read -r domain; do target_name=$(echo $domain | sed "s/[^a-zA-Z0-9]/_/g"); echo "Starting EmailHarvester for $domain"; python3 EmailHarvester.py -d "$domain" -s "email_${target_name}.txt"; done < ~debian/Desktop/scope)
Думаю, все знают такой ресурс для IT-специалистов, как LinkedIn. С его помощью мы можем спарсить email-адреса сотрудников интересующей нас компании. Ниже приведен пример работы неплохой утилиты CrossLinked, которая справляется с этой задачей (и, кстати, не требует ни учетной записи, ни API-ключа).
Пример команды для запуска:
python3 crosslinked.py -f '{first}.{last}@example.ru' "Рога и Копыта"
Тут я предлагаю сделать небольшую паузу и обратить внимание на то, что у нас уже есть на данный момент:
- эндпоинты на целевом ресурсе;
- список утекших учетных данных;
- поверхностное понимание ландшафта, составленное по активным поддоменам, без глубокого изучения;
- список email-адресов сотрудников компании.
TLD и root domains
В этом разделе и далее мы начнем заниматься, как сейчас модно говорить, Attack Surface Managed. Пришло время приступить к сбору активов исследуемой компании и формированию поверхности атаки.
Онлайн
Бывают ситуации, когда заказчик не предоставляет полный список поддоменов компании. Тогда нам нужно самостоятельно найти домены, связанные с нашим таргетом. В этом может помочь довольно известный онлайновый сервис whoxy.com, который предоставляет много полезной информации как напрямую, так и косвенно по исследуемой цели.

Из командной строки
Скажу сразу, что, несмотря на мою любовь к CLI, этот метод мне не очень понравился, так как приходится перепроверять валидность большого объема информации. Вдобавок необходимость поиска TLD (Top Level Domain) в рамках проектной деятельности встречается довольно редко. Но все же утилита tldfinder стоит упоминания.
Пример команды:
tldfinder -d google -dm tld | anew domains
Я, впрочем, предпочитаю whoxy.com.
Именно на этом этапе формируется файл scope. В него мы помещаем либо домены, относящиеся к компании, либо домены, предоставленные заказчиком. Это важно для дальнейшей работы.
Собираем IP-адреса
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее