
На своём первом CTF я открыл pcap-файл с 14 000 пакетов и два часа листал их вручную — по одному, сверху вниз. Флаг лежал в единственном HTTP POST-запросе. Один display-фильтр http.request.method == "POST" нашёл бы его за десять секунд. С тех пор любой pcap начинается не со скроллинга, а с правильного фильтра.
Этот материал — тот самый разбор интерфейса, фильтров и типичных CTF-сценариев, который я хотел бы прочитать перед тем соревнованием. Wireshark для начинающих — не про заучивание меню, а про умение задать правильный вопрос трафику и получить ответ за секунды.
Установку сознательно пропускаю — на Windows стандартный установщик с Npcap, на Linux sudo apt install wireshark, на macOS — brew install wireshark. На wireshark.org всё расписано по шагам. Перейдём к тому, что вы увидите, открыв первый файл. Подробнее — в нашем материале про создание ctf заданий.
В CTF вы почти никогда не захватываете трафик вживую. Организаторы дают готовый файл .pcap или .pcapng — дамп сетевого трафика. Открываем через File → Open. Wireshark покажет три панели, и работают они в связке.
Packet List (верхняя панель) — таблица со всеми сетевыми пакетами. Каждая строка — один пакет: номер, временная метка, IP-адрес источника и назначения, протокол, длина, краткое описание. Отправная точка — здесь вы выбираете пакет для детального изучения.
Packet Details (средняя панель) — послойная структура выбранного пакета. Wireshark раскладывает фрейм по уровням: канальный (Ethernet), сетевой (IP), транспортный (TCP/UDP), прикладной (HTTP, DNS, FTP). Раскрываете уровень — видите конкретные поля: флаги TCP, TTL, User-Agent. В CTF полезная информация чаще всего прячется именно тут.
Packet Bytes (нижняя панель) — содержимое пакета в hex и ASCII. Если в пакете передавался текст, он виден в правой колонке. Иногда флаг читается прямо отсюда — строкой flag{...} или CTF{...} в потоке байтов.
Типичная ошибка: новички игнорируют среднюю панель и пытаются разбирать hex внизу. Средняя панель уже всё разобрала за вас — вместо подсчёта байтов TCP-заголовка вы видите готовое поле Destination Port: 80 или Content-Type: text/html. Привыкайте работать с ней в первую очередь.
Обратите внимание на цветовую маркировку строк. По умолчанию Wireshark подсвечивает протоколы разными цветами: зелёный — HTTP, голубой — DNS, чёрный с красным текстом — ошибки TCP. Это не декорация — цвета позволяют визуально отделить типы tcp/ip трафика ещё до применения фильтров. Посмотреть и поменять правила можно через View → Coloring Rules.
Ещё момент: столбцы в Packet List настраиваются. Правый клик по заголовку столбца → Column Preferences. Для CTF полезно добавить столбец с протоколом прикладного уровня — быстрее отличите HTTP от DNS в общем потоке.
Pcap из CTF может содержать десятки тысяч записей. Листать их руками — пустая трата времени. Фильтры Wireshark — главный инструмент, отделяющий нужные сетевые пакеты от шума. Как пользоваться Wireshark эффективно — значит уметь быстро собрать правильный фильтр.
В Wireshark два типа фильтров, и путать их — вторая по частоте ошибка после выбора неправильного интерфейса.
Capture filters (фильтры захвата) работают ДО начала записи трафика. Синтаксис BPF (Berkeley Packet Filter): port 80, host 10.0.0.1, tcp. Они определяют, какие пакеты Wireshark вообще сохранит. В CTF они почти не нужны — вы работаете с готовым pcap-файлом, трафик уже записан.
Display filters (фильтры отображения) применяются к уже загруженным данным. Они скрывают пакеты, не соответствующие условию, но не удаляют их из файла. У display-фильтров собственный синтаксис, отличный от BPF. Именно wireshark display filters — ваш основной рабочий инструмент при анализе pcap файлов.
Строка фильтра — вверху окна, поле «Apply a display filter». Вводите выражение, жмёте Enter. Зелёный цвет строки — фильтр валидный. Красный — синтаксическая ошибка. Тут Wireshark не обманывает.
Три ошибки, на которые наступают все:
= вместо двойного ==. Фильтр ip.addr = 10.0.0.1 подсветится красным. Правильно: ip.addr == 10.0.0.1.port 80 вместо tcp.port == 80. Разные языки — разные поля.HTTP не сработает — пишите http строчными.Фильтры комбинируются логическими операторами: && (И), || (ИЛИ), ! (НЕ). Например, http && ip.src == 10.0.0.5 покажет только HTTP-трафик от конкретного хоста. А dns && !ip.addr == 8.8.8.8 отфильтрует все DNS-запросы, кроме идущих к Google DNS.
Эту таблицу стоит сохранить — она покрывает подавляющее большинство ситуаций в сетевых тасках CTF:
| Задача | Фильтр | Что покажет |
|---|---|---|
| Только HTTP-трафик | http |
Все HTTP-запросы и ответы |
| HTTP POST-запросы | http.request.method == "POST" |
Отправка форм, загрузка файлов |
| Только DNS-запросы | dns |
Все DNS-пакеты |
| DNS по домену | dns.qry.name contains "example" |
Запросы с указанной подстрокой |
| Трафик по IP | ip.addr == 10.0.0.1 |
Пакеты от и к указанному IP |
| Только от источника | ip.src == 10.0.0.1 |
Исходящий трафик от этого IP |
| FTP-команды | ftp |
Все FTP-команды и ответы |
| FTP-пароли | ftp.request.command == "PASS" |
Только строки с паролем |
| ARP-пакеты | arp |
Весь ARP-трафик |
| SYN-сканирование | tcp.flags.syn == 1 && tcp.flags.ack == 0 |
SYN без ACK (признак сканирования) |
| TCP по порту | tcp.port == 443 |
Весь трафик на порту 443 |
| Поиск текста | frame contains "flag" |
Пакеты, содержащие строку "flag" |
Последний фильтр — frame contains "flag" — стоит пробовать первым на любом CTF. Иногда флаг валяется в открытом виде, и этот простой приём экономит минуты. Не сработало — переходим к прицельному разбору конкретных протоколов.
HTTP — самый частый протокол в начальных CTF-тасках по анализу сетевого трафика. Данные летят в открытом виде — любой текст, отправленный через HTTP, виден без дешифровки.
Алгоритм, который работает на каждом CTF с HTTP-трафиком:
Шаг 1. Открываем pcap, ставим фильтр http. Wireshark отобразит только HTTP-пакеты: GET-запросы, POST-запросы, ответы сервера.
Шаг 2. Смотрим столбец Info в верхней панели. Ищем подозрительные URL-пути: /secret, /admin, /flag, /upload. GET-запросы к странным эндпоинтам — первые кандидаты.
Шаг 3. Правый клик по подозрительному пакету → Follow → TCP Stream (в новых версиях — Follow → HTTP Stream). Wireshark восстановит весь диалог: запрос клиента (красным) и ответ сервера (синим) в одном текстовом окне. Флаг часто сидит в теле ответа или в данных POST-запроса.
Шаг 4. Если флаг не виден в теле — проверяем заголовки. Авторы тасков любят прятать его в нестандартных HTTP-заголовках: X-Flag, X-Secret или даже Set-Cookie.
Шаг 5. Для файлов, переданных через HTTP: File → Export Objects → HTTP. Wireshark покажет список всех переданных файлов — картинки, PDF, архивы. Скачиваем подозрительные и проверяем содержимое. В CTF флаг нередко спрятан внутри PNG-изображения или ZIP-архива.
Follow TCP Stream — одна из самых полезных функций для разбора трафика CTF. Она собирает все сетевые пакеты одного TCP-соединения в единый текстовый поток. Вместо прыжков между разрозненными фреймами вы читаете HTTP-диалог как обычный текст. В окне Follow TCP Stream можно переключать кодировку (ASCII, hex, UTF-8) — попробуйте разные варианты, если данные выглядят нечитаемыми.
По классификации MITRE ATT&CK HTTP-трафик в открытом виде — техника Web Protocols (T1071.001, тактика Command and Control). Атакующие используют HTTP для связи с C2-серверами, потому что такой трафик сливается с легитимным. На CTF вы учитесь распознавать эти паттерны: необычные User-Agent, подозрительные параметры в URL, нестандартные заголовки. В реальном SOC этот навык пригождается ежедневно.
Нюанс: если весь HTTP-трафик в pcap — это HTTPS (порт 443), содержимое зашифровано. Без ключа дешифровки прочитать его невозможно. В таких случаях ищите другие протоколы: DNS, FTP, ICMP. Организаторы CTF всегда оставляют решаемый путь — тупиков не бывает.
DNS-таски — вторые по популярности после HTTP. Протокол DNS передаёт данные в открытом виде, и авторы заданий активно используют его для сокрытия информации.
Классический CTF-сценарий с DNS: флаг закодирован в поддоменах. Хост шлёт серию запросов к доменам вроде ZmxhZ3.evil.com, t0aGVs.evil.com, bG8gd2.evil.com. Каждый поддомен — фрагмент строки в base64. Собираем все фрагменты, декодируем — получаем флаг.
Это не выдумка авторов CTF. В реальных атаках — техника DNS (T1071.004, тактика Command and Control) по MITRE ATT&CK. DNS-трафик редко блокируют на периметре, что делает его удобным каналом для эксфильтрации. Красивый фантик легитимного протокола — а внутри утекают данные.
Пошаговый разбор DNS-таска:
Шаг 1. Фильтр dns — видим все DNS-запросы и ответы.
Шаг 2. Изучаем столбец Info. Обычные запросы выглядят как Standard query A google.com. Подозрительные — содержат длинные бессмысленные поддомены или нетипичные типы записей (TXT, NULL, CNAME с аномальными значениями).
Шаг 3. Фильтруем по конкретному домену: dns.qry.name contains "evil.com".
Шаг 4. Из средней панели извлекаем поддомены: раскрываем DNS → Queries → Name.
Шаг 5. Собираем поддомены и отправляем в CyberChef для декодирования.
Ещё вариант: флаг в TXT-записи DNS-ответа. Фильтр dns.txt покажет ответы с TXT-данными — текст записи виден в средней панели при раскрытии поля Answers.
FTP-анализ строится проще. Протокол передаёт логины и пароли в чём мать родила — без шифрования. По MITRE ATT&CK — Exfiltration Over Unencrypted Non-C2 Protocol (T1048.003, тактика Exfiltration).
Фильтр ftp — видим текстовые FTP-команды: USER admin, PASS secret123, RETR flag.txt. Для быстрого поиска пароля: ftp.request.command == "PASS". Wireshark покажет только строки с паролями — не надо рыться в потоке команд руками.
Содержимое переданных файлов идёт по отдельному каналу (data connection) на случайном порту. Фильтр ftp-data покажет сетевые пакеты с данными файлов. Выбираем пакет → Follow → TCP Stream — видим содержимое файла.
ARP-таски проверяют умение обнаружить атаку Adversary-in-the-Middle. По MITRE ATT&CK — ARP Cache Poisoning (T1557.002, тактики Credential Access и Collection). Суть: злоумышленник рассылает поддельные ARP-ответы, подменяя MAC-адрес шлюза своим. Трафик жертвы начинает проходить через машину атакующего — сниффер трафика в действии.
Как обнаружить ARP-спуфинг при анализе pcap:
Шаг 1. Фильтр arp — видим все ARP-запросы и ответы.
Шаг 2. Ищем дублирование IP-адресов. Если один IP (например, шлюз 192.168.1.1) ассоциируется с двумя разными MAC-адресами в разных ARP-ответах — это спуфинг. Wireshark при включённой опции (Edit → Preferences → Protocols → ARP/RARP → Detect duplicate IP address configuration) сам пометит такие пакеты предупреждением.
Шаг 3. Обращаем внимание на Gratuitous ARP — незапрошенные ответы. Фильтр arp.opcode == 2 покажет все ARP-ответы. Ответы без предшествующего запроса — классический индикатор атаки.
Шаг 4. Определяем атакующего. Логика: находим IP с двумя MAC-адресами, смотрим какой появился позже — он принадлежит атакующему. В CTF обычно просят указать MAC атакующего или IP жертвы.
Типичная ошибка новичков в ARP-тасках — игнорировать Wireshark warnings. Если в столбце Info появляется «Duplicate IP address detected» или «IP address conflict detected» — это не мусор, а готовый ответ. Wireshark буквально кричит вам: «Вот оно!» — а вы скроллите мимо.
Когда pcap содержит десятки тысяч пакетов и непонятно с чего начинать — открывайте Statistics. Три инструмента оттуда экономят время на каждом CTF.
Protocol Hierarchy (Statistics → Protocol Hierarchy) показывает процентное распределение протоколов. Если 80% трафика — DNS, а HTTP занимает 0.3%, очевидно: копать надо в DNS. Этот инструмент помогает выбрать направление до применения фильтров. По рекомендациям NIST CSF 2.0 (DE.AE-01) установление базовой линии сетевых операций — основа для обнаружения аномалий. Protocol Hierarchy — именно такой baseline.
Conversations (Statistics → Conversations) — список всех пар хостов. Отсортируйте по Bytes — самый «болтливый» диалог часто содержит переданные файлы. Если между двумя хостами прошло 500 пакетов, а между остальными — по 5-10, это аномалия, и стоит залезть внутрь.
IO Graphs (Statistics → IO Graphs) — визуализация интенсивности трафика во времени. Всплеск на графике указывает на момент передачи файла или начало атаки. Добавьте отдельные линии для разных протоколов — увидите корреляцию между событиями.
Для декодирования данных после извлечения из Wireshark берём CyberChef (gchq.github.io/CyberChef/). Рабочий процесс: находим подозрительную строку в пакете (например, ZmxhZ3t3aXJlc2hhcmtfbWFzdGVyfQ== в HTTP-ответе или DNS-поддомене), копируем правым кликом → Copy → Value, открываем CyberChef, вставляем в Input, добавляем операцию «From Base64». В Output — декодированный текст.
CyberChef поддерживает цепочки операций. Сначала hex, потом base64, потом XOR — всё в одном «рецепте». Для CTF это незаменимый инструмент в связке с Wireshark. Если данные закодированы через XOR с известным ключом (подсказка обычно есть в описании таска или в заголовках HTTP), операция «XOR» с ключом в CyberChef решает задачу за секунды.
Ещё приём: если в pcap есть файлы, переданные через HTTP, экспортируйте их через File → Export Objects → HTTP, а потом проверяйте в CyberChef или hex-редакторе. В CTF флаг нередко спрятан в метаданных изображения или в нескольких байтах, дописанных к концу легитимного файла. Этот приём работает и при захвате сетевых пакетов в реальном инциденте — экспорт объектов помогает восстановить файлы, которые передавались по сети.
Весь процесс — от открытия pcap до декодирования флага — укладывается в 5-10 минут, если знаешь последовательность шагов. На бумаге звучит просто, но по-настоящему анализ pcap файлов щёлкает только когда сам прогоняешь разбор на реальных дампах. Если хочется сразу перейти от чтения к практике — на HackerLab.pro есть готовые сетевые таски в категориях forensics и network, где можно отработать всё описанное на живых pcap без настройки собственного стенда.
За последний год я разобрал больше сотни сетевых тасков на разных CTF-площадках и заметил устойчивую закономерность: навык работы в Wireshark не появляется от чтения руководств. Он формируется только через решение реальных задач. Можно выучить все фильтры из шпаргалки выше и всё равно зависнуть на первом нестандартном pcap.
Проблема большинства учебных материалов по анализу сетевого трафика — они учат интерфейсу, а не мышлению. Знать, что http.request.method == "POST" показывает POST-запросы — полдела. Нужно понимать, зачем вы ищете именно POST, что в них может быть интересного и как это связано с остальным трафиком. Переход от «знаю синтаксис» к «понимаю что ищу» — самый сложный этап и для wireshark для пентестера, и для CTF-игрока.
Мой совет: берите любой CTF-pcap и разбирайте его полностью. Не до нахождения флага — а до полного понимания, что происходило в трафике. Кто с кем общался, на каких портах, какие протоколы использовались. Protocol Hierarchy + Conversations + ваши фильтры. Пять таких разборов дадут больше, чем пятьдесят прочитанных статей. Если хочется идти по структурированной базе, а не ковыряться вслепую — на курсе IB Basics эту цепочку проходят с объяснениями «почему», а не только «как».
🚀 Хочешь закрепить на практике? Реши задачи по теме на HackerLab — категория «forensics».
0 комментариев
Пожалуйста, войдите, чтобы оставить комментарий.
Загрузка комментариев...