Главная / Блог / OSINT в CTF: ищем флаги через метаданные файлов, Google Dorks и соцсети

15 мин.00

OSINT в CTF: ищем флаги через метаданные файлов, Google Dorks и соцсети

OSINT в CTF: ищем флаги через метаданные файлов, Google Dorks и соцсети

OSINT в CTF: ищем флаги через метаданные файлов, Google Dorks и соцсети

На Maltego Community OSINT CTF задания варьировались от атрибуции аккаунтов через Bluesky до хронолокации по длине тени на фотографии Будапешта. Разница между лидерами и остальными — не в знании редких утилит, а в умении выстроить цепочку: от одной находки к следующей, без хаотичного перебора всего подряд. Здесь разбираю конкретные техники OSINT в CTF — с командами терминала, цепочками дорков и чеклистом, который можно открыть прямо во время соревнований.

Место OSINT-заданий в цепочке атаки и классификация

В реальном пентесте OSINT — этап разведки, первое звено kill chain. По MITRE ATT&CK сюда попадают поиск по открытым веб-ресурсам (T1593, Reconnaissance), работа с соцсетями (T1593.001), использование поисковых движков (T1593.002), сбор данных об идентичности жертвы (T1589) и определение физического местоположения (T1591.001). В CTF эти техники применяются напрямую: вместо подготовки к initial access цель — вытащить флаг из данных, которые валяются в открытом доступе. Подробнее — в нашем статье о osint для специалиста по информационной безопасности.

CTF-платформы делят OSINT-задания на устоявшиеся категории. Понимание категории — первый шаг к выбору инструмента:

Категория Что ищем Типовые инструменты ATT&CK-маппинг
SOMINT (Social Media) Профили, посты, связи между аккаунтами Sherlock, Maigret, ручные дорки T1593.001 Social Media
GEOINT (Geospatial) Координаты, город, здание по фото Google Lens, Yandex Images, SunCalc T1591.001 Determine Physical Locations
IMINT (Image Intelligence) Скрытые данные в метаданных изображений ExifTool, strings, binwalk T1589 Gather Victim Identity
Cyber Threat Intel Инфраструктура — IP, домены, сертификаты VirusTotal, Shodan, crt.sh T1593.002 Search Engines
Credential / Leak OSINT Утечки, связки email-пароль HIBP, dehashed, Google Dorks T1589.002 Email Addresses

Если в условии задания фотография здания — это GEOINT, и начинать нужно с reverse image search, а не с exiftool. Если дан email — это SOMINT или Credential OSINT, и первое действие — username enumeration. Типичная ошибка новичков: запуск всех инструментов подряд вместо выбора по категории. Я видел команды, которые гоняли Sherlock по 300 платформам, когда ответ лежал в EXIF-комментарии к картинке.

Анализ метаданных файлов — EXIF, strings и скрытые данные

Метаданные EXIF — проверка, которая занимает тридцать секунд и закрывает приличную долю IMINT-заданий. Авторы тасков часто прячут флаги в полях Comment, Artist, Copyright или даже в GPS-координатах, зашитых в JPEG-снимки. Проблема русскоязычных разборов — все говорят «проверьте метаданные», но не показывают конкретные команды и не объясняют, какие поля искать.

ExifTool — команды для быстрого извлечения

Требования к окружению: ExifTool 12.x+ (в Kali Linux установлен по умолчанию; на Ubuntu/Debian — sudo apt install libimage-exiftool-perl; macOS — brew install exiftool). RAM: любой объём, утилита работает offline. Python не нужен.

Базовая команда для полного дампа метаданных:

exiftool -a -u -g1 suspicious_image.jpg

Флаг -a выводит дублирующиеся теги, -u показывает неизвестные (кастомные) поля, -g1 группирует по категориям. Именно неизвестные поля — частое место, где CTF-авторы прячут флаг. Для PDF-файлов команда аналогична: exiftool document.pdf покажет Author, Creator, Producer, а иногда и скрытый XMP-комментарий с флагом.

Что искать в выводе:

  • GPS Position — координаты, которые можно вбить в Google Maps. Формат: 48 deg 51' 29.88" N, 2 deg 17' 40.20" E
  • Comment / UserComment — текстовые поля, где часто лежит флаг в открытом виде или в кодировке (Base64, ROT13, hex)
  • Artist / Copyright / Author — имя пользователя или подсказка для следующего шага цепочки
  • Software / Camera Model — иногда указывает на конкретное устройство, что помогает в геолокации

Типичный сценарий на практике: задание категории SOMINT даёт email вроде user123@example.com — из него вытаскиваешь username user123, через enumeration находишь профиль на Bluesky или другой платформе. В био профиля лежит ROT13-кодированная строка — synt{L0h_t0g_z3}, которая декодируется в flag{Y0u_g0t_m3}. Метаданные и атрибуция — звенья одной цепочки.

Что делать, когда EXIF зачищен

Если exiftool возвращает минимум данных — файл strip'нут от метаданных. Не паникуем. Следующий шаг — команда strings для поиска читаемых строк в бинарных данных.

Для изображений strings suspicious_image.jpg | grep -i flag — грубый, но часто рабочий приём: авторы задания могут вставить флаг как текстовый блок в конец файла, за пределами JPEG-данных. Для PDF-документов strings document.pdf | grep -i "ctf\|flag\|key" ищет паттерны флага.

Если и это не дало результатов — проверяем файл на стеганографию: binwalk suspicious_image.jpg покажет вложенные архивы или дополнительные файлы внутри изображения. Стеганография и OSINT часто пересекаются в CTF — задание может выглядеть как OSINT, но требовать извлечения скрытого файла. Тут главное не зарыться в кроличью нору: если binwalk ничего не нашёл, возвращайтесь к условию задания.

Google Dorks для CTF — поисковые операторы как инструмент разведки

Google Dorks — техника использования продвинутых поисковых операторов для обнаружения данных, которые не должны были оказаться в индексе. По данным OWASP, Security Misconfiguration (A05:2021) остаётся одним из ключевых рисков веб-приложений, и именно Google Dorks позволяют находить последствия таких ошибок конфигурации. В CTF дорки решают задачи от поиска утёкших документов до обнаружения скрытых поддоменов.

Операторы, которые закрывают большинство заданий

Оператор Назначение Пример
site: Ограничить поиск одним доменом site:target.com filetype:pdf
filetype: Искать конкретный тип файла filetype:env intext:password
intext: Искать строку в теле страницы intext:"flag{" site:pastebin.com
intitle: Искать в заголовке страницы intitle:"index of" "parent directory"
inurl: Искать в URL inurl:admin inurl:login
cache: Кэшированная версия страницы cache:target.com/secret.html
- (минус) Исключить результаты site:*.target.com -www
"..." (кавычки) Точное совпадение фразы "confidential" filetype:doc

Операторы комбинируются. Запрос site:example.com filetype:xls intext:password ищет Excel-файлы с паролями на конкретном домене. Для CTF полезен запрос "flag{" site:github.com — разработчики иногда коммитят тестовые флаги в публичные репозитории. Да, так бывает.

Цепочки дорков для типовых CTF-сценариев

Поиск утёкших конфигурационных файлов: filetype:env intext:"DB_PASSWORD" или filetype:env intext:"aws_access_key_id" находит файлы .env с секретами, случайно попавшими в индекс. В реальных пентестах это маппится на Security Misconfiguration (OWASP A05:2021); в CTF — прямой путь к флагу.

Поиск по соцсетям через Google: site:linkedin.com "Evil Corp LLC" или site:twitter.com "Evil Corp" "security". Вместо ручного просмотра каждой соцсети — один запрос через Google с фильтром site:. Экономит минуты, которые на CTF стоят дорого.

Обнаружение скрытых поддоменов: site:*.target.com -site:www.target.com покажет поддомены, которые не видны на основном сайте. Для CTF с заданным доменом это часто даёт dev-среды, staging-серверы или забытые панели администрирования.

Поиск по GitHub-коммитам: site:github.com "target_username" password или "target_company" filename:.git-credentials — GitHub-коммиты регулярно содержат секреты. Авторы CTF-заданий создают фейковые репозитории с историей коммитов, где флаг был удалён из файла, но остался в git-истории. git log --all --full-history -- secret.txt и git show <commit>:secret.txt — ваши друзья.

Google применяет rate limiting: при интенсивном использовании дорков поисковик запросит капчу. Обход — использовать разные поисковики (Bing, Yandex, DuckDuckGo поддерживают аналогичные операторы с минимальными отличиями в синтаксисе) или увеличивать паузы между запросами. На CTF с таймером лучше чередовать движки, чем ждать снятия капчи.

GEOINT-задания в CTF дают фотографию и просят определить место, а иногда и точное время съёмки. Здесь важна не утилита, а методология: от крупных визуальных признаков к мелким деталям. Язык вывесок, направление движения, форма номерных знаков — всё это сужает область поиска быстрее любого инструмента.

Выбор движка — Google Lens vs Yandex Images vs TinEye

Разные поисковые движки индексируют разные массивы изображений. При работе с reverse image search всегда проверяйте минимум два движка:

Движок Сильная сторона Слабая сторона Когда использовать
Google Lens Широкое покрытие, распознаёт здания и объекты Хуже работает с лицами, агрессивно кропает Геолокация по архитектуре и ландшафту
Yandex Images Лучший движок для поиска по лицам — тут он вне конкуренции Меньше покрытие за пределами СНГ Деанонимизация по фото человека
TinEye Находит точное совпадение и более ранние копии Не распознаёт объекты, только pixel-match Определение первоисточника изображения

По опубликованным разборам, на одном из CTF Maltego задание категории GEOINT требовало определить отель по фотографии Венгерского парламента в Будапеште. Участники использовали Google Lens для распознавания здания, затем переключились на анализ ракурса: через веб-камеры (EarthCam и аналоги) нашли камеру с совпадающим углом обзора. Подход «распознать ориентир → определить ракурс → верифицировать через альтернативный источник» — универсален для GEOINT-заданий.

Перед загрузкой изображения в reverse image search всегда проверяйте его локально: exiftool image.jpg и strings image.jpg — координаты и флаги часто спрятаны прямо в метаданных. Обидно потратить полчаса на геолокацию, когда ответ был в EXIF.

Хронолокация — определяем время съёмки через анализ теней

Хронолокация — определение времени съёмки по положению солнца и длине теней на фотографии. Техника применялась на Maltego CTF для задания Account Attribution 3, где нужно было определить временной диапазон фотографии Будапешта.

Алгоритм:

  1. Определить локацию по фото (через reverse image search или ориентиры)
  2. Определить дату съёмки (из контекста задания или метаданных)
  3. Открыть SunCalc (suncalc.org), ввести координаты и дату
  4. Измерить на фото направление и длину тени от известного объекта
  5. Подобрать время в SunCalc, при котором симулированная тень совпадает с наблюдаемой

Для задания с Будапештом участники использовали Венгерский парламент (высота около 96 метров) как эталонный объект. Сопоставление тени с симуляцией SunCalc позволило сузить время съёмки до утреннего диапазона. Метод работает для любого объекта с известной высотой — фонарные столбы, здания, антенны. Главное — чтобы тень была видна на фото, а не обрезана кадром.

Разведка по соцсетям и username enumeration

Username enumeration — поиск аккаунтов по имени пользователя на десятках платформ одновременно. В CTF типовое задание: дан email или username, нужно найти связанный профиль на другой платформе, где спрятан флаг или подсказка.

Требования к окружению: Python 3.9+, pip. RAM: 2 ГБ достаточно. Требуется доступ в интернет.

Два основных инструмента — Sherlock и Maigret. Sherlock проверяет username по нескольким сотням платформ; Maigret — его расширенный форк с поддержкой более 2000 сайтов.

# Sherlock — быстрый перебор
pip install sherlock-project
sherlock davidjs1 --timeout 10 --print-found

# Maigret — расширенный перебор с отчётом
pip install maigret
maigret davidjs1 --timeout 10 -HP

Флаг --timeout 10 ограничивает ожидание ответа от каждого сайта, --print-found (Sherlock) или -HP (Maigret) выводят только найденные аккаунты. Maigret с флагом -HP дополнительно генерирует HTML-отчёт с деревом связей.

Критически важное ограничение: оба инструмента дают false positives. Много. Сайт может вернуть HTTP 200 на любой username, и инструмент отметит его как найденный. Каждый результат нужно верифицировать вручную — открыть URL и проверить, существует ли реальный профиль. На CTF с таймером это раздражает, но без верификации утонете в шуме.

Ручная альтернатива через Google Dorks: "davidjs1" site:twitter.com | site:github.com | site:reddit.com — один запрос проверяет несколько платформ с меньшим количеством ложных срабатываний. Для СНГ-ориентированных заданий: "davidjs1" site:vk.com | site:t.me — Telegram и ВКонтакте часто фигурируют в CTF с русскоязычным контекстом.

Восстановление удалённого контента — Wayback Machine и кэш

Авторы CTF-заданий размещают данные на веб-странице, затем удаляют их. Задача участника — раскопать удалённое. Два основных источника:

Wayback Machine (web.archive.org) хранит исторические снапшоты веб-страниц. Если задание даёт URL, первый шаг: https://web.archive.org/web/*/target-url.com покажет все сохранённые версии. Флаг может находиться в версии страницы за определённую дату — проверяйте несколько снапшотов, не только последний.

Кэш Google — быстрый доступ к последней индексированной версии через оператор cache:target.com/page. Работает для недавно удалённого контента, пока Google не обновил индекс.

Cachedview.nl и archive.today — альтернативные кэш-сервисы. Полезны, когда Wayback Machine не имеет снапшота, а кэш Google уже обновился. Бывает окно в пару дней, когда спасает только archive.today.

В типичном CTF-задании категории Cyber Threat Intel может быть дан подозрительный IP-адрес. Участники ищут артефакты через вкладку Relations в VirusTotal — например, ZIP-архив, коммуницировавший с этим IP, имя которого и есть флаг. Wayback Machine и VirusTotal дополняют друг друга: первый восстанавливает удалённый контент, второй показывает инфраструктурные связи.

Сравнение инструментов OSINT для CTF

Инструмент Преимущества Ограничения Когда использовать Когда не использовать
ExifTool Полный дамп метаданных, работает offline, поддерживает 400+ форматов Только метаданные — не анализирует визуальный контент Первый шаг при получении любого файла Если файл strip'нут от метаданных
Google Dorks Бесплатно, фильтрация по домену/типу/содержимому Rate limiting, капча при интенсивном использовании Поиск утечек, документов, конфигов, поддоменов Когда данные не проиндексированы
Sherlock Быстрый перебор username по 300+ платформам Много false positives, не проверяет содержимое профиля Начальная разведка по username Когда нужна точная атрибуция (верифицировать вручную)
Maigret 2000+ платформ, HTML-отчёт с визуализацией Медленнее Sherlock, ещё больше false positives из-за объёма Глубокая разведка по username после Sherlock Если нужна скорость на CTF с таймером
Yandex Images Лучший reverse search по лицам Меньше покрытие за пределами СНГ и Восточной Европы GEOINT по лицам и CНГ-контенту Для поиска по англоязычным ландшафтам
Google Lens Распознаёт здания, текст, объекты Хуже с лицами, иногда агрессивно кропает результаты Геолокация по архитектуре, ориентирам, вывескам Для поиска по лицам — берите Yandex
SunCalc Точная хронолокация через симуляцию солнца Требует известных координат и даты Определение времени съёмки по теням Если на фото нет видимых теней
Wayback Machine Миллиарды архивных снапшотов Не все сайты архивируются, задержка индексации Восстановление удалённого контента Для свежих (часы) удалений — кэш Google быстрее

Пошаговый разбор задания — от email до флага

Разберём типовую цепочку OSINT-задания на основе сценария, характерного для CTF категории SOMINT (Account Attribution).

Условие (иллюстративный пример): перехвачен email user123@example.com. Нужно найти связанный профиль в соцсети и извлечь флаг из био.

Шаг 1 — извлечение username. Из email выделяем username: user123. Большинство людей используют один username на нескольких платформах — это и есть наша зацепка.

Шаг 2 — username enumeration. Запускаем sherlock user123 --timeout 10 --print-found. В выводе получаем список платформ, где найден аккаунт. Но Sherlock может не проверять Bluesky — платформа относительно новая. Поэтому параллельно проверяем вручную: https://bsky.app/profile/user123.bsky.social.

Шаг 3 — анализ профиля. Профиль на Bluesky существует. В био написано: synt{L0h_t0g_z3}. Структура похожа на флаг, но символы — не те, что ожидаем.

Шаг 4 — распознавание кодировки. Слово synt — характерный паттерн ROT13. ROT13 — подстановочный шифр со сдвигом 13: syntflag. Декодируем всю строку: echo 'synt{L0h_t0g_z3}' | tr 'A-Za-z' 'N-ZA-Mn-za-m'. Результат: flag{Y0u_g0t_m3}.

Шаг 5 — верификация формата. Флаг соответствует формату Th1s_i5_fl4g, указанному в условии. Задание решено.

Цепочка рассуждений заняла четыре перехода: email → username → платформа → кодировка → флаг. Каждый переход — одна логическая операция. Именно эта разбивка на подзадачи отличает системный подход от хаотичного перебора инструментов.

Второй тип цепочки, который встречается реже, но ценится выше — работа с Cyber Threat Intel. Задание даёт IP-адрес. Первый шаг — VirusTotal: ввести IP, перейти на вкладку Relations, просмотреть связанные файлы. Среди артефактов может находиться ZIP-архив — его имя и есть флаг. Тут ключевая компетенция — знание платформ разведки (VirusTotal, Shodan, WHOIS через T1596.002), а не конкретных инструментов.

Минилаб для отработки OSINT-навыков

Для тренировки OSINT-навыков между CTF-соревнованиями подходят специализированные платформы:

Платформа Фокус Уровень Формат
GeoGuessr Геолокация по панорамам Начальный — продвинутый Интерактивная карта
OSINT CTF (osint.industries) Реалистичные OSINT-сценарии Средний Jeopardy-задания
TryHackMe (комната OSINT) Базовые техники разведки Начальный Пошаговые задания
HackTheBox (OSINT challenges) Продвинутая разведка Средний — продвинутый Jeopardy без подсказок
Sourcing Games Поиск по LinkedIn и соцсетям Начальный Квест-формат

Требования: браузер с доступом в интернет, установленный ExifTool и Python 3.9+ (для Sherlock/Maigret). Отдельная VM не нужна — все инструменты лёгкие.

Чеклист OSINT-методологии для CTF

Чеклист для использования прямо на соревнованиях. Порядок действий — от быстрых проверок к трудоёмким:

  1. Прочитать условие дважды. Определить категорию задания (SOMINT, GEOINT, IMINT, CTI, Credential). Подсказки к методу часто заложены в формулировке
  2. Если дан файл — запустить exiftool -a -u -g1 файл. Проверить GPS, Comment, Artist, UserComment. Если пусто — strings файл | grep -i flag
  3. Если дано изображение — reverse image search через Google Lens И Yandex Images. Обращать внимание на вывески, язык знаков, архитектуру, номерные знаки, направление движения
  4. Если дан email/username — извлечь username из email, запустить sherlock username --timeout 10. Проверить результаты вручную
  5. Если дан домен — Google Dorks: site:*.domain.com -www, filetype:env site:domain.com. Проверить Wayback Machine: web.archive.org/web/*/domain.com
  6. Если дан IP — VirusTotal Relations, Shodan, WHOIS. Для CTI-заданий проверить связанные файлы и домены
  7. Если контент удалёнcache:url в Google, Wayback Machine, archive.today
  8. Если найдена непонятная строка — проверить ROT13 (echo 'строка' | tr 'A-Za-z' 'N-ZA-Mn-za-m'), Base64 (echo 'строка' | base64 -d), hex decode
  9. Если нашли что-то, но не флаг — развить находку: username → другая платформа → следующая зацепка. Флаг обычно в конце цепочки из 3–5 шагов
  10. Если застряли — вернуться к условию задания. Перечитать с нуля. Авторы CTF редко требуют экзотических инструментов — решение обычно в пределах Google, ExifTool и одного специализированного сервиса

Девять из десяти OSINT-заданий на CTF решаются комбинацией ExifTool, Google Dorks и reverse image search. Sherlock и Maigret помогают, но только на этапе username enumeration — дальше работает голова, а не скрипт.

Я наблюдаю устойчивый паттерн на CTF-соревнованиях: команды, которые проигрывают, тратят первые десять минут на запуск всех OSINT-инструментов разом. Команды, которые выигрывают, тратят эти десять минут на анализ условия задания и построение гипотезы. Sherlock на 300+ платформах по одному username выдаёт десятки ложных срабатываний; если не знаешь, какую платформу искать, результат утонет в шуме. Google Dork с точным оператором site: решает ту же задачу за один запрос, без false positives. Инструмент — последнее звено в цепочке, не первое.

Второй момент, который почти не обсуждается в русскоязычных разборах: хронолокация и работа с тенями. На западных CTF (Maltego, TraceLabs, GeoGuessr CTF) GEOINT-задания с хронолокацией — стандарт. В русскоязычном CTF-сообществе эта техника практически неизвестна, и команды, владеющие SunCalc, получают серьёзное преимущество на заданиях, где остальные даже не знают, с чего начать. Разведка по открытым источникам — дисциплина, которая развивается через нарешивание и построение ментальных моделей: чем больше разных типов заданий решил, тем быстрее мозг выдвигает правильную гипотезу на новом. Если хочешь не просто читать writeup'ы, а пройти всю цепочку от разведки до эксплуатации самостоятельно — на WAPT разведка покрывается в первых модулях, а дальше собирается полная атака с лабами на каждый кейс.

🚀 Хочешь закрепить на практике? Реши задачи по теме на HackerLab — категория «pentest-machines».

Поделиться

0 комментариев

Пожалуйста, войдите, чтобы оставить комментарий.

Загрузка комментариев...