
На CyberDefenders-челлендже EscapeRoom один участник с форума описал классическую ситуацию: 40 минут прокрутки тысяч пакетов колесом мыши — ноль результата. Потом он открыл Statistics → Protocol Hierarchy, увидел, что 91% трафика — TLS, а незашифрованный HTTP составляет жалкие 0.3%, — и флаг нашёлся за три минуты в заголовке User-Agent wget-запроса. Вся разница между часом бесполезного скроллинга и решением за пять минут — не талант, а понимание, куда смотреть первым делом. Этот гайд — пошаговый алгоритм анализа pcap-файлов в Wireshark, который одинаково работает на picoCTF, CyberDefenders, HackTheBox и любой другой площадке с forensics-заданиями.
Перед первым pcap убедитесь, что рабочее место не подведёт:
tshark --versionДополнительно: NetworkMiner (netresec.com) для автоматического извлечения файлов и credentials — полезен как second opinion, но на loopback-трафике и нестандартных форматах часто бесполезен. Основная связка — Wireshark и tshark.
Прежде чем нырять в пакеты, стоит понимать, что вы ищете и зачем. В CTF-задании pcap-файл моделирует реальный инцидент: кто-то записал сетевой трафик, и в нём остались следы действий атакующего. Эти следы напрямую маппятся на конкретные техники MITRE ATT&CK:
| Что ищем в pcap | Техника ATT&CK | Тактика |
|---|---|---|
| HTTP-запросы к C2-серверу | Web Protocols (T1071.001) | Command and Control |
| Подозрительные DNS-запросы с hex в поддоменах | DNS (T1071.004) | Command and Control |
| Base64/hex-кодированные строки в payload | Standard Encoding (T1132.001) | Command and Control |
| XOR или кастомное кодирование | Non-Standard Encoding (T1132.002) | Command and Control |
| Передача файлов наружу | Exfiltration Over C2 Channel (T1041) | Exfiltration |
| Учётные данные в открытом виде | Network Sniffing (T1040) | Credential Access |
Зачем эта таблица: описание задания на CTF почти всегда содержит подсказку. «Утечка данных» — ищите DNS exfiltration или HTTP POST с файлами. «Скомпрометированные учётные данные» — проверяйте FTP и SMTP. «Скрытая передача» — копайте ICMP и DNS TXT-записи. Не тратьте время на слепой перебор: формулировка задания указывает на тактику, тактика — на протокол.
Открыли pcap — не начинайте читать пакеты сверху вниз. Это ловушка, в которую попадает каждый новичок. Первые пять минут — разведка: определить, куда копать, а что сразу отбросить как шум.
Statistics → Protocol Hierarchy — процентное распределение протоколов по количеству пакетов и по объёму данных. Это первое окно, которое нужно открыть после загрузки файла.
На что обращать внимание:
Protocol Hierarchy показывает только статистику, не содержимое. Это инструмент для решения «куда копать», а не для поиска флага напрямую.
Statistics → Conversations → вкладка TCP, сортировка по объёму переданных байт. Мгновенно выделяются «толстые» сессии — в них передавались файлы или шло активное взаимодействие с C2.
Что искать:
tcp.port == 4444.Statistics → Endpoints дополняет картину: все уникальные IP-адреса и объём трафика для каждого. Редкие обращения к специфическим внешним IP по незащищённым протоколам — кандидаты номер один для детального изучения.
Display-фильтры — основной инструмент навигации. Без них анализ файла с тысячами пакетов превращается в лотерею. Вводятся в строку вверху окна Wireshark, применяются по Enter.
Фильтры, которые нужно знать наизусть:
http — весь HTTP-трафикdns — все DNS-запросы и ответыftp — FTP-сессии (credentials летят открытым текстом)smtp — электронная почтаtcp.port == 4444 — трафик на конкретном портуip.addr == 10.0.2.15 — все пакеты от/к конкретному IPhttp.request.method == "POST" — только POST-запросы (формы, загрузка файлов, credentials)http.response.code == 200 — успешные HTTP-ответыКомбинации: && — логическое И, || — ИЛИ, ! — отрицание. Фильтр !dns && !arp уберёт фоновый шум DNS-резолвинга и ARP-запросов — сразу станет чище. А http && ip.src == 10.0.2.15 покажет HTTP-трафик от конкретного хоста, что удобно, когда в дампе много участников.
Когда формат флага известен (CTF{...}, flag{...}, pico{...}), поиск по содержимому — самый быстрый путь:
frame contains "flag" — ищет строку «flag» во всём фрейме, включая payload и заголовкиhttp contains "CTF{" — только HTTP-пакетыtcp contains "password" — пароли в TCP-потокеdns.qry.name contains "suspicious" — подстроки в DNS-запросахДля регулярных выражений — оператор matches. Фильтр frame matches "CTF\\{.*\\}" найдёт любую строку, подходящую под формат флага, даже если точное содержимое неизвестно. А dns.qry.name matches "^[a-f0-9]+\\." выявит DNS-запросы с hex-строками в поддоменах — типичный признак DNS exfiltration.
Если формат флага неизвестен — последовательная серия запросов: frame contains "flag", затем frame contains "key", затем frame contains "secret", затем frame contains "pass". На CTF начального уровня флаг лежит в открытом виде примерно в половине заданий.
Тут есть нюанс: contains и matches работают только с незашифрованным payload. Если трафик обёрнут в TLS и ключей дешифрации нет — фильтры по содержимому покажут мусор. Об этом — ниже.
Follow TCP Stream собирает все пакеты одной TCP-сессии в единый читаемый поток — по сути, это перехваченный диалог между клиентом и сервером, склеенный из фрагментов. Красный текст — данные от клиента, синий — от сервера.
Как использовать: правый клик на любом пакете интересующей сессии → Follow → TCP Stream. Внизу окна — навигация: Stream 0, Stream 1, Stream 2 и далее. На CTF начального уровня потоков обычно немного — стоит просмотреть каждый.
Типичные находки в TCP Stream:
USER и PASS лежат открытым текстом. Буквально две строки — логин и пароль. Фильтр ftp покажет всю FTP-сессию, ftp.request.command == "PASS" — только строку с паролем.http.request.method == "POST" выделит только эти запросы.Когда в потоке встречается строка вроде Q1RGe3cxcjNzaDRya30= — это Base64. Признаки: символы A-Za-z0-9+/, длина кратна 4, часто заканчивается на = или ==. Копируйте в CyberChef, рецепт From Base64 — готово. Hex-строка 43 54 46 7b декодируется в CTF{. URL-кодированная строка CTF%7Bfl4g%7D декодируется в CTF{fl4g} — обычно кодируются только спецсимволы ({, }, пробелы), а буквы остаются как есть. Полное кодирование каждого байта (%43%54%46%7B) встречается редко (double encoding или специфичные инструменты). Распознавание кодировки занимает две секунды, если знаешь паттерны.
Follow TCP Stream показывает данные только для незашифрованных сессий. TLS-потоки — нечитаемый бинарный мусор без загруженного ключа дешифрации.
Один из самых частых CTF-сценариев: флаг спрятан внутри изображения, PDF, архива или ELF-бинарника, переданного по сети. Файл нужно вытащить из дампа и анализировать отдельно.
File → Export Objects → HTTP открывает список всех файлов, переданных по HTTP: изображения, скрипты, документы, бинарники. Аналогичные меню есть для SMB (Export Objects → SMB), TFTP (Export Objects → TFTP) и email-вложений (Export Objects → IMF).
После сохранения файла определите его реальный тип командой file <имя_файла> в терминале. Она читает magic bytes: даже если расширение неправильное или отсутствует, file покажет реальный формат. Затем strings <имя_файла> | grep -i flag ищет текстовые строки внутри бинарных файлов — флаг или его часть часто валяются именно там.
Для изображений проверьте EXIF-метаданные (exiftool <файл>) и попробуйте стеганографические инструменты (steghide, zsteg для PNG). Это уже территория стеганографии, но на CTF категории Forensics задания часто пересекаются.
Когда автоматическое извлечение не работает — файл передавался по нестандартному протоколу или Wireshark не распознал формат. Решение: Follow TCP Stream → в выпадающем списке выбрать нужное направление (например, server→client для скачиваемого файла) → Show data as Raw → Save As. Вы получаете сырые байты потока, но перед magic bytes файла обычно идут протокольные заголовки (например, HTTP response headers перед PNG magic 89 50 4E 47) — их нужно обрезать hex-редактором или dd до начала magic bytes.
Отдельный случай: Wireshark не распознаёт протокол. На одном из заданий TryHackMe Wireshark CTF RTP-аудиопоток был замаскирован под неизвестный UDP. Решение: правый клик на пакете → Decode As → выбор RTP. После этого Wireshark распознал аудио и позволил его воспроизвести через Telephony → RTP → RTP Streams. Знаешь про Decode As — задача на минуту. Не знаешь — можно провозиться полчаса.
Export Objects работает только для протоколов, которые Wireshark поддерживает. Кастомные протоколы, туннелированные соединения и фрагментированные передачи требуют ручного подхода.
DNS exfiltration — техника, при которой данные передаются через DNS-запросы, обычно закодированные в поддоменах (T1071.004, Command and Control). На CTF это один из самых коварных сценариев: трафик выглядит как обычные DNS-резолвы, но поддомены содержат hex или Base64-кодированные данные.
Признаки DNS exfiltration в pcap:
6374667b.646e735f.6578666.example.comdns.qry.name matches "^[a-f0-9]+\\." выделяет подозрительные запросы (в CTF-дампах работает хорошо, но в реальном трафике даёт false positives на CDN и cache-busting поддомены — тогда комбинируйте с частотным анализом по apex-домену)Для извлечения данных из DNS-запросов tshark работает эффективнее GUI:
tshark -r evidence.pcap -Y "dns.qry.name contains example.com" \
-T fields -e dns.qry.name | \
sed 's/\.example\.com$//' | tr -d '.\n' | xxd -r -p
Логика: tshark фильтрует DNS-запросы к домену exfiltration-сервера и выводит номер фрейма для сортировки, sort -n -k1 | cut -f2 гарантирует правильный порядок пакетов, sed удаляет apex-домен (точки экранированы для literal match), tr убирает точки-разделители и переносы строк, xxd -r -p декодирует из hex. Если на выходе мусор — проверьте чётность длины hex-строки перед подачей в xxd.
Если данные закодированы в Base64 вместо hex, замените xxd -r -p на base64 -d. Определить кодировку можно по набору символов: только 0-9a-f — hex; A-Za-z0-9+/= — Base64.
Но DNS exfiltration может использовать и кастомное кодирование (T1132.002, Non-Standard Encoding) — XOR, побайтовый сдвиг, собственный алфавит. Тогда автоматическое декодирование не прокатит: придётся анализировать паттерн и подбирать ключ вручную или через CyberChef.
tshark — консольная версия Wireshark из того же дистрибутива. Преимущества: скорость на больших файлах, возможность скриптования, встраивание в пайплайны с grep/awk/sed. На CTF tshark незаменим для трёх вещей: массовое извлечение полей, поиск паттернов и автоматизация рутины.
Ключевые команды:
tshark -r dump.pcap -Y "http.request" -T fields -e http.host -e http.request.uritshark -r dump.pcap -Y "dns.flags.response == 0" -T fields -e dns.qry.nametshark -r dump.pcap -Y 'frame contains "flag"'tshark -r dump.pcap -Y "ftp.request.command == USER || ftp.request.command == PASS" -T fields -e ftp.request.argtshark -r dump.pcap -q -z io,phsАвтоматизированный поиск флага по нескольким паттернам сразу:
for pattern in "flag" "CTF{" "key{" "secret" "password"; do
echo "=== Searching: $pattern ==="
tshark -r dump.pcap -Y "frame contains \"$pattern\"" \
-T fields -e frame.number -e ip.src -e ip.dst 2>/dev/null
done
Скрипт перебирает типичные маркеры флага и для каждого совпадения выводит номер фрейма, IP источника и назначения. Дальше — открыть нужный фрейм в Wireshark GUI для детального изучения. Работает быстрее ручного перебора фильтров, особенно на больших дампах.
Нюанс: tshark жрёт столько же RAM, сколько и Wireshark GUI при полном разборе дампа. Чудес не бывает.
Найти закодированные данные — полдела. Вторая половина — декодировать. На CTF данные кодируются для обфускации (T1132.001, Standard Encoding), и CyberChef — основной инструмент для работы с ними.
Как распознать кодировку по внешнему виду:
| Кодировка | Признаки | Пример |
|---|---|---|
| Base64 | Символы A-Za-z0-9+/, padding = | Q1RGe2ZsYWd9 |
| Hex | Только 0-9a-f, пары символов | 4354467b666c61677d |
| URL-encoding | Символы %XX | %43%54%46%7B |
| ROT13 | Латиница, но слова не читаются | PGS{synt} |
| XOR | Бинарный мусор с повторяющимся паттерном | Требует ключа |
CyberChef позволяет собрать цепочку рецептов: перетащите From Base64, затем ROT13, затем другие операции — результат обновляется на лету. Для многослойной обфускации (Base64 → XOR → Hex) это на порядок быстрее, чем разматывать каждый слой вручную.
Для XOR без известного ключа в CyberChef есть рецепт XOR Brute Force — перебирает однобайтовые ключи и показывает результат для каждого. Увидели в выводе читаемый текст или формат флага — ключ найден. Для многобайтовых ключей — рецепт XOR с ключом в виде hex-строки.
Типичная цепочка на CTF: из TCP Stream вытащили строку → определили кодировку визуально → применили рецепт в CyberChef → получили флаг. Меньше минуты, если навык распознавания кодировок отработан.
Ни один инструмент не покрывает 100% сценариев. Знание ограничений экономит время — вместо того чтобы биться головой об стену, переключаешься на другой подход.
TLS без ключей дешифрации. Если трафик зашифрован и задание не даёт pre-master secret log или серверный приватный ключ — содержимое TLS-сессий недоступно. Ключ подключается через Edit → Preferences → Protocols → TLS → (Pre)-Master-Secret log filename. Формат файла: строки CLIENT_RANDOM <hex> <hex>. Иногда ключ лежит отдельным файлом в архиве задания — проверяйте всё, не только pcap.
Кастомные бинарные протоколы. Если атакующий использует собственный протокол поверх TCP/UDP, Wireshark не разберёт его автоматически. В Follow TCP Stream увидите сырые байты — дальше анализ вручную или через скрипт.
Фрагментация и TCP reassembly. Иногда Wireshark некорректно собирает фрагментированные TCP-потоки. Если Follow TCP Stream показывает обрывочные данные — попробуйте Analyze → Reload as File Format/Capture и проверьте Edit → Preferences → Protocols → TCP → Reassemble TCP segments.
Объём дампа. Файлы свыше 500 МБ загружаются медленно и съедают 2-4 ГБ RAM. Для таких дампов предварительная фильтрация через tshark обязательна.
Алгоритм, который закрывает 90% forensics-заданий с pcap:
frame contains "flag" (или формат флага из условия). Нашлось — открыть фрейм, вытащить флаг. Задание решено.http, ftp, dns, smtp, telnet. Просмотреть каждый.file <filename> и strings <filename> | grep -i flag.dns.qry.name matches "^[a-f0-9]+\\.". Если есть — извлечь через tshark и декодировать.icmp && frame.len > 100. Если размер кадра значительно превышает типичный ping (98 байт Ethernet-кадра = 14 Ethernet + 20 IP + 8 ICMP + 56 байт payload для Linux; 74 байта для Windows с 32 байтами payload) — данные могут быть в ICMP data. Фильтр data.len может не сработать в зависимости от версии Wireshark и dissector'а.Чеклист работает последовательно: каждый шаг отсекает класс задач. Дошли до шага 11 и флаг не найден — перечитайте условие задания: возможно, ответ не флаг в привычном формате, а конкретное значение (IP-адрес, имя файла, User-Agent, timestamp).
На CTF-площадках категории Forensics/Network часто приходится комбинировать Wireshark с другими инструментами. Сетевой анализ — только первый шаг. Извлечённый из pcap файл может потребовать реверс-инженерии, стеганографического анализа или криптографического взлома. Wireshark для CTF — точка входа в цепочку, не финальный инструмент.
По опыту: большинство CTF-заданий начального и среднего уровня с pcap решаются за шаги 1-7. DNS exfiltration и ICMP covert channels — уровень medium-hard. TLS-дешифрация с предоставленными ключами — стандартный hard. Кастомные протоколы и многослойная обфускация — верхний уровень, где Wireshark — лишь один инструмент в арсенале.
Главная проблема новичков — не сложность задач, а отсутствие системы. Человек открывает pcap с тысячей пакетов и начинает скроллить сверху вниз, читая каждый фрейм. Через полчаса — усталость, фрустрация и ноль результата. А задача решалась одним фильтром frame contains "flag" за десять секунд. Чеклист выше — это и есть система: держите его на бумажке рядом с монитором, и скорость решения forensics-заданий вырастет в разы.
Вторая типичная ошибка — игнорирование tshark. GUI Wireshark удобен для визуального анализа одной-двух сессий, но для системного прочёсывания дампа с сотнями потоков консольный tshark с пайплайнами grep/awk объективно быстрее. Привычка писать однострочники в терминале экономит часы на соревнованиях, где время — ключевой ресурс.
И третий момент, который редко обсуждают: CyberChef. Многие новички пытаются декодировать Base64 и hex в голове или через онлайн-конвертеры по одному слою за раз. CyberChef с цепочкой рецептов разматывает многослойную обфускацию за одно перетаскивание блоков. Если вы ещё не добавили его в закладки — сделайте это до следующего CTF. Связка Wireshark + tshark + CyberChef покрывает подавляющее большинство задач forensics-категории, и освоить её можно за один вечер с любым учебным pcap-файлом. А если хочется не просто читать, а пройти базу ИБ системно — от сетевого анализа до основ пентеста — на codeby.school есть трек IB Basics, который выстраивает эти навыки последовательно, без прыжков через пропасти в знаниях.
🚀 Хочешь закрепить на практике? Реши задачи по теме на HackerLab — категория «forensics».
0 комментариев
Пожалуйста, войдите, чтобы оставить комментарий.
Загрузка комментариев...