Главная / Блог / Wireshark анализ PCAP: пароли и секреты в CTF

12 мин.00

Wireshark анализ PCAP: пароли и секреты в CTF

Wireshark анализ PCAP: пароли и секреты в CTF

PCAP на 80 МБ, 14 тысяч пакетов, 93% — TLS. Таймер CTF тикает. Protocol Hierarchy показывает: HTTP занимает 0.3% трафика — и именно там валяются POST-запросы с credentials в plaintext, а в соседнем TCP-стриме притаился base64-encoded флаг. Три display-фильтра, два Follow TCP Stream, один Export Objects — таск закрыт за 11 минут вместо часа бесцельного скроллинга. Разница между новичком и опытным CTF-игроком в network forensics — не в знании кнопок Wireshark, а в алгоритме: что искать, в каком порядке, какие фильтры ставить. Эта статья — рабочий воркфлоу wireshark анализа pcap-тасков, отточенный на сотне с лишним network-задач.

Первичная разведка: с чего начать разбор PCAP файлов

Ошибка номер один — сразу вбивать frame contains "flag" или скроллить пакеты сверху вниз. На учебных тасках с 50 пакетами это прокатит, на реальных дампах с тысячами сессий — гарантированная потеря времени. Первые две минуты после открытия файла тратим на три операции, которые дадут карту дампа.

Protocol Hierarchy и Conversations

Statistics → Protocol Hierarchy — первый экран при любом разборе pcap файлов. Таблица показывает процентное соотношение протоколов по пакетам и по объёму данных. На что смотреть:

Доля TLS/SSL. Если 90%+ трафика зашифровано и ключей расшифровки в задании нет — делать внутри TLS нечего. Весь фокус смещается на оставшиеся проценты. HTTP, FTP, DNS, Telnet, SMTP — открытые протоколы, в которых авторы CTF-тасков прячут данные.

Нетипичные протоколы. IRC или Telnet в дампе 2025 года — аномалия, на которую стоит обратить внимание. ICMP, занимающий больше 5% от общего объёма, — возможный скрытый канал передачи данных (covert channel).

DNS как процент от трафика. Если DNS занимает больше 15-20% по объёму пакетов — потенциальный маркер DNS exfiltration (Exfiltration Over C2 Channel, T1041 по MITRE ATT&CK).

Дальше — Statistics → Conversations, вкладка TCP. Тут видны все TCP-сессии между хостами. Сортировка по столбцу Bytes выявляет самые жирные сессии — кандидаты на передачу файлов. Сортировка по Packets показывает долгоживущие соединения, характерные для C2-каналов (Web Protocols, T1071.001 по MITRE ATT&CK). Столбцы Rel Start и Duration помогают понять хронологию: какие сессии начались первыми, какие тянулись дольше всего.

Statistics → Endpoints покажет всех участников обмена. В типичном CTF-таске 2-5 уникальных IP. Адреса за пределами RFC 1918 (не 10.x.x.x, не 172.16-31.x.x, не 192.168.x.x) — кандидаты на внешний C2-сервер или хост атакующего.

I/O Graphs: находим момент атаки

Statistics → I/O Graphs визуализирует интенсивность трафика на временной шкале. Ровный фон на 100-200 пакетов в секунду с резким всплеском до 1000 на 35-й секунде — классический паттерн CTF-дампа: «тихий» легитимный трафик и один-два пика, где происходит загрузка малвари, эксфильтрация или brute-force. Зафиксируйте временные координаты всплесков — вернётесь к ним с целевыми фильтрами после разведки.

Фильтры Wireshark для поиска секретов и паролей

Display filters — главный инструмент навигации. Анализ сетевого трафика на утечки данных без фильтров — как grep по миллиону строк без регулярки.

Поиск паролей в сетевом трафике по протоколам

Credential hunting — одна из самых частых задач в CTF forensics. По классификации MITRE ATT&CK это Network Sniffing (T1040, Credential Access) и Credentials In Files (T1552.001). Набор фильтров, который закрывает подавляющее большинство сценариев:

FTP. Логин и пароль передаются командами USER и PASS в открытом виде:

ftp.request.command == "USER" || ftp.request.command == "PASS"

В результатах сразу видны credentials — никакого декодирования не нужно. Классика жанра.

HTTP Basic Auth. Credentials в заголовке Authorization, закодированы в base64 (не зашифрованы — это важно):

http.authorization

Значение после «Basic » — base64 от строки user:password. Декодирование — одна команда в терминале.

HTTP POST. Формы логина отправляют данные в теле запроса:

http.request.method == "POST"

После применения фильтра выберите пакет → нижняя панель → раздел HTML Form URL Encoded. Там увидите поля вида username=admin&password=s3cret. Иногда флаг лежит прямо здесь.

Telnet. Каждое нажатие клавиши — отдельный пакет:

telnet

Для чтения сессии целиком — Follow TCP Stream. Wireshark соберёт все нажатия в читаемый текст с командами и паролями.

SMTP. В авторизации SMTP credentials кодируются в base64:

smtp.auth.username || smtp.auth.password

Если фильтр пуст — попробуйте просто smtp и просмотрите стримы руками. Авторы тасков любят прятать секреты в теле письма, а не в блоке аутентификации.

Regex, contains и field-based фильтры для нестандартных случаев

Когда протокольные фильтры wireshark для поиска секретов не дают результатов, переходим к поиску по содержимому:

frame contains "password" — ищет строку в любом месте любого пакета. Регистрозависимый.

frame contains "flag{" или frame contains "CTF{" — прямой поиск формата флага. Работает чаще, чем кажется — особенно на тасках начального уровня.

tcp contains "admin" — поиск только в TCP-пейлоаде, без заголовков канального и сетевого уровня.

frame matches "(?i)passw(or)?d" — регулярное выражение, находит password, passwd, Password в любом регистре. Медленнее contains, но гибче.

Для обнаружения base64-кодированных данных: frame matches "[A-Za-z0-9+/]{20,}={0,2}" — грубый фильтр по характерному паттерну строк длиной от 20 символов в base64-алфавите. Далёк от идеала, но сужает область поиска до десятков пакетов вместо тысяч.

Follow TCP Stream в Wireshark: восстановление сессий

Follow TCP Stream wireshark — вторая по важности функция после display-фильтров. Правый клик на любом TCP-пакете → Follow → TCP Stream, и Wireshark реконструирует полный диалог между клиентом и сервером.

Plaintext-протоколы раскрываются полностью. FTP-сессия в Follow Stream выглядит как читаемый диалог: сервер шлёт приветствие (код 220), клиент отправляет USER anonymous, сервер просит пароль (331), клиент отвечает PASS test@test.com, сервер подтверждает доступ (230). Тут же видны команды RETR (скачивание) и STOR (загрузка файлов).

Навигация между стримами. В нижней части окна Follow TCP Stream — выпадающий список Stream N. Переключайте его для последовательного просмотра всех TCP-сессий дампа. В таске с 20-30 стримами ручной перебор занимает 3-5 минут и часто даёт результат быстрее, чем подбор сложных фильтров. Для перехода к конкретному стриму из основного окна — фильтр tcp.stream eq 5 (где 5 — номер стрима). Максимальный номер стрима видно в Statistics → Conversations → TCP.

Формат отображения. По умолчанию стрим показывается в ASCII. Переключите на Hex Dump, если данные бинарные: так увидите magic bytes файлов — 50 4B для ZIP, 89 50 4E 47 для PNG, 25 50 44 46 для PDF. Формат Raw позволяет сохранить содержимое стрима через Save As — альтернативный способ извлечения файлов, когда Export Objects не справляется с нестандартной передачей.

Цветовая маркировка. Красный текст — данные от клиента (запросы), синий — от сервера (ответы). Экономит время на разбор, кто что отправил, без ковыряния в заголовках.

Извлечение файлов из PCAP через Wireshark Export Objects

Извлечение файлов из pcap — одна из ключевых задач forensics-тасков. Wireshark реконструирует файлы из нескольких протоколов через механизм wireshark export objects.

HTTP Export Objects: основной метод

File → Export Objects → HTTP. Wireshark покажет список всех файлов, переданных по HTTP: документы, исполняемые файлы, изображения, HTML-страницы. Столбцы: Hostname, Content Type, Size, Filename.

Content Type берётся из HTTP-заголовка ответа сервера — и может врать. По данным Unit 42 (Palo Alto Networks), атакующие намеренно маскируют исполняемые файлы под картинки — .exe с Content-Type image/jpeg. После экспорта проверяйте реальный тип командой file exported_file и считайте хэш через shasum -a 256 exported_file для проверки на VirusTotal.

Кнопка Save All экспортирует все объекты разом в указанную директорию. Дальше — пакетная проверка: file * покажет типы всех извлечённых файлов, а strings * | grep -i flag поможет быстро выцепить флаги внутри текстовых и бинарных данных.

SMB и TFTP: файлы за пределами HTTP

File → Export Objects → SMB извлекает файлы из SMB-трафика. Актуально в CTF-тасках, моделирующих lateral movement в Active Directory-среде. По туториалу Unit 42, типичный паттерн — малварь распространяется по SMB между хостами, и в дампе видны исполняемые файлы с путями вида \\10.x.x.x\C$\filename.exe, передаваемые от заражённого хоста к контроллеру домена.

File → Export Objects → TFTP — для TFTP-передач. TFTP не требует аутентификации и используется в сетевом оборудовании для обмена конфигурациями. Конфигурационные файлы с паролями и ключами — частая находка в TFTP-трафике на CTF-тасках.

Когда Export Objects не срабатывает (фрагментированные файлы, нестандартные протоколы), есть ручной метод: находите стрим с передачей → Follow TCP Stream → формат Raw → Save As. При необходимости обрезаете лишние HTTP/TCP-заголовки в hex-редакторе, ориентируясь на magic bytes нужного формата.

Ещё один инструмент — NetworkMiner. В отличие от Wireshark, он фокусируется не на пакетах, а на хостах и контенте: автоматически вытаскивает файлы, изображения и credentials из дампа. Годится для быстрой первой проверки, но на loopback-трафике и нестандартных протоколах часто бесполезен.

Network Forensics: анализ трафика на скрытые каналы

DNS exfiltration: секреты спрятаны в запросах

DNS exfiltration — техника эксфильтрации данных через DNS-запросы. Принцип: данные кодируются в поддоменах. Вместо легитимного www.example.com отправляется dGhpcyBpcyBhIGZsYWc.evil.com, где поддомен — base64-строка с секретом.

Признаки в PCAP:

  • Длинные DNS-имена. Обычный домен — 30-40 символов. Exfiltration — 60-100+.
  • Частые запросы к одному домену. Десятки запросов в секунду к *.evil.com при отсутствии соответствующего веб-трафика — явная аномалия.
  • TXT-записи. DNS TXT records вмещают до 255 символов и часто используются как обратный канал: dns.qry.type == 16.
  • Hex или base64 в поддоменах. Строки вида 48656c6c6f.evil.com (hex) или SGVsbG8.evil.com (base64) вместо читаемых слов.

Фильтр для старта: dns → сортировка по столбцу Info, визуальный поиск подозрительно длинных имён. Для автоматизации — tshark с пайплайном через awk (ниже будет).

Base64 и hex-пейлоады в пакетах

Авторы CTF-тасков кодируют флаги в base64 или hex внутри HTTP-заголовков, cookie, POST-данных, ICMP-пейлоадов. Алгоритм поиска:

  1. Фильтр http → POST-запросы → в теле запроса ищете строки, похожие на base64 (длинные последовательности из A-Za-z0-9+/=).
  2. Декодирование: выделите подозрительную строку → Copy → As Printable Text → в терминале echo "строка" | base64 -d.
  3. ICMP-стеганография: фильтр icmp → проверьте поле Data в каждом Echo Request. Штатный ping в Linux содержит повторяющийся паттерн (0x61-0x77). Любое отклонение — потенциально скрытые данные. Если каждый ICMP-пакет несёт 1-2 символа, соберите их в порядке Sequence Number.
  4. HTTP-заголовки: нестандартные заголовки вроде X-Custom-Data, X-Debug-Token, X-Secret — частые контейнеры для закодированных строк.

Если PCAP получен из внешнего источника (CTF-платформа или реальный инцидент), проверьте его целостность хэшем до начала анализа — базовая практика chain of custody при pcap анализе.

Автоматизация с tshark для больших дампов

Когда PCAP весит десятки мегабайт, GUI начинает тормозить. tshark — консольная версия Wireshark — автоматизирует рутину и позволяет обрабатывать результаты стандартными Unix-утилитами. Дамп, кстати, обычно снимается через tcpdump -i eth0 -w dump.pcap, а разбирается уже в Wireshark или tshark — классическое разделение ролей.

# HTTP POST: credentials в формах
tshark -r dump.pcap -Y "http.request.method==POST" \
  -T fields -e http.host -e http.request.uri -e urlencoded-form.value
# DNS: имена запросов, отсортированные по длине
tshark -r dump.pcap -Y "dns.qry.name" \
  -T fields -e dns.qry.name | awk '{print length, $0}' | sort -rn
# FTP: логины и пароли в plaintext
tshark -r dump.pcap -Y "ftp.request.command==USER or ftp.request.command==PASS" \
  -T fields -e ftp.request.command -e ftp.request.arg

Ключевые параметры: -Y задаёт display filter (аналог строки фильтра в GUI), -T fields переключает вывод в табличный формат, -e указывает поля для извлечения. Результат прогоняется через grep, sort, uniq, awk — deep packet inspection через командную строку.

Для пакетного экспорта файлов: tshark -r dump.pcap --export-objects http,./exported/ сохранит все HTTP-объекты в директорию. Аналогично для SMB: --export-objects smb,./smb_files/. На тасках с ограничением по времени один tshark-пайплайн заменяет 10-15 кликов в GUI.

Типичные ловушки в CTF-тасках на Wireshark

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

Флаг разбит между протоколами. Часть флага — по FTP, часть — в DNS TXT-записи, часть — в ICMP-пейлоаде. Подсказка: если найденная строка начинается с CTF{, но не заканчивается } — копайте в других протоколах.

Ложные credentials. В дампе несколько пар логин/пароль. Очевидные — приманка. Настоящие лежат в менее заметном месте: не в HTTP POST, а в cookie; не в FTP, а в Telnet-сессии длиной в три пакета. Я на этом терял время не раз — теперь проверяю «неочевидные» стримы первыми.

Запароленный архив. Export Objects извлекает ZIP, но он защищён паролём. Пароль лежит в другом стриме. Или наоборот: пароль в HTTP POST, а архив передан по SMB. Матрёшка.

TLS с приложенным ключом. Дамп содержит TLS-трафик, но в задании приложен приватный SSL-ключ (.key или .pem) — по сути техника Private Keys (T1552.004 по MITRE ATT&CK) наоборот: ключ попал к аналитику, и трафик можно расшифровать. Edit → Preferences → Protocols → TLS → RSA keys list → добавляете ключ. Аналогично для Wi-Fi: если дан WPA-пароль, добавьте его в Edit → Preferences → Protocols → IEEE 802.11 → Decryption keys.

Нестандартный порт. HTTP-сервер на порту 8080, 8888 или 31337. Wireshark не распознаёт протокол автоматически. Правый клик на пакете → Decode As → HTTP. После этого Export Objects и HTTP-фильтры начнут работать. Без этого шага можно долго смотреть на «сырые» TCP-пакеты и ничего не понимать.

Данные в ICMP. Каждый ICMP Echo Request несёт 1-2 символа флага в поле Data. Собирайте по Sequence Number — порядок тут критически важен.

Временные аномалии. «Мёртвые зоны» без трафика или нарушенный порядок пакетов. View → Time Display Format → UTC Date and Time of Day — переключите на абсолютное время и ищите подозрительные промежутки.

Правило для тасков medium и hard: первый найденный «секрет» — скорее всего обманка. Настоящий флаг требует дополнительного шага: декодирования, сборки из фрагментов, расшифровки с ключом из другого места дампа.

Большинство CTF-игроков на network-тасках тратят 80% времени на стадию, которая должна занимать 20%. Типичная картина — человек открывает PCAP и начинает листать пакеты сверху вниз, читая каждый. Или ставит frame contains "flag" и расстраивается, что ничего не находит. Алгоритм из этой статьи — Protocol Hierarchy → Conversations → фильтры по протоколам → Follow Stream → Export Objects → декодирование — не красивая теория. Это порядок действий, доведённый до автоматизма, который работает на 90% network-задач от лёгких до средних. Оставшиеся 10% — нетривиальные кейсы с кастомными протоколами, многоступенчатым шифрованием, стеганографией поверх легитимного трафика. Но даже для них первые пять шагов сужают область поиска до управляемого объёма. Навык wireshark анализа pcap в CTF переносится в реальную работу напрямую — те же фильтры, тот же Export Objects, тот же Follow Stream, только вместо флага ищешь IoC, а вместо 80 МБ — дампы в гигабайтах. Решать таски по writeups — как учить плавание по книге: формулу запомнишь, но руки не научатся. Если хочешь не просто writeup, а пройти всю атаку самому — на WAPT эту цепочку проходят в лабах с реальными дампами.

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

Поделиться

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

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

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

Читайте также

SQL-инъекции в CTF: UNION, blind и sqlmap

13 мин.

1

SQL-инъекции в CTF: UNION, blind и sqlmap

Пошаговый разбор UNION-based, boolean-blind и time-based SQL-инъекций с пейлоадами, командами sqlmap и алгоритмом выбора техники на CTF

1 НОЯБРЬ, 2026

Insecure deserialization: эксплуатация PHP, Python, Java

12 мин.

2

Insecure deserialization: эксплуатация PHP, Python, Java

Пошаговая эксплуатация insecure deserialization в PHP, Python и Java. PHPGGC, ysoserial, pickle — gadget chains с рабочими командами для CTF-тасков.

31 ОКТЯБРЬ, 2026

Деобфускация PowerShell скриптов: разбор для CTF

12 мин.

4

Деобфускация PowerShell скриптов: разбор для CTF

5 методов деобфускации PowerShell в CTF: замена IEX, дамп переменных ISE, CyberChef, PSDecode. Пошаговый разбор с чек-листом и MITRE-маппингом.

31 ОКТЯБРЬ, 2026