
На первом CTF я получил PCAP-файл на 40 МБ и два часа листал пакеты вручную, пытаясь понять, где спрятан флаг. Решение оказалось обидным до зубовного скрежета: правый клик по FTP-пакету, Follow TCP Stream — пароль лежал в третьей строке открытым текстом. Задача решалась за 90 секунд. Wireshark для начинающих выглядит пугающе: тысячи строк с непонятными протоколами, hex-дампы, цветные полоски без очевидного смысла. Но анализ трафика на CTF-тасках сводится к пяти-шести приёмам, которые покрывают абсолютное большинство заданий категории Forensics и Network. Дальше — конкретные фильтры, конкретные действия, конкретные результаты.
Прежде чем разбирать приёмы, нужно понять, на что смотреть. Открываете PCAP-файл (File → Open или просто перетаскиваете в окно программы) — перед вами три панели. Подробнее — в нашем материале про создание ctf заданий.
Packet List — верхняя часть окна. Каждая строка — отдельный сетевой пакет. Столбцы по умолчанию: номер пакета, временная метка, IP-адрес источника (Source), IP-адрес назначения (Destination), протокол, длина и краткое описание (Info). По этой панели вы ориентируетесь в первую очередь — ищете нужные протоколы, подозрительные адреса, необычные описания в столбце Info.
Packet Details — средняя часть. Выбранный пакет разложен по уровням сетевой модели: Ethernet-заголовок (канальный уровень), IP-заголовок (сетевой), TCP или UDP (транспортный), прикладной протокол (HTTP, FTP, DNS). Раскрывайте каждый уровень кликом по стрелке — внутри лежат конкретные поля: флаги TCP, значения HTTP-заголовков, содержимое DNS-запросов. На CTF здесь часто прячутся учётные данные и фрагменты флагов.
Packet Bytes — нижняя часть. Сырые данные пакета в hex и текстовом (ASCII) представлении. Иногда флаг спрятан в нестандартном месте пакета, где Wireshark не разбирает структуру автоматически — тогда заглядываете сюда напрямую и читаете ASCII-столбец справа.
Критически важна строка фильтра вверху окна — она позволяет отсечь шум среди тысяч пакетов. Зелёный цвет фона строки — корректный фильтр, красный — синтаксическая ошибка. Ещё одна деталь, которую новички упускают: цветовая маркировка строк в Packet List. Wireshark по умолчанию выделяет протоколы разными цветами — зелёные строки для HTTP, тёмно-синие для DNS, чёрные с красным текстом для пакетов с ошибками. Цвета помогают быстро сориентироваться в трафике ещё до применения фильтра.
Без фильтров анализ pcap файлов превращается в бессмысленную прокрутку списка. На CTF-тасках хватит десятка фильтров, чтобы закрыть подавляющее большинство заданий:
| Фильтр | Что делает | Когда нужен на CTF |
|---|---|---|
http |
Весь HTTP-трафик | Первый шаг на любом таске с веб-трафиком |
http.request.method == "POST" |
Только POST-запросы | Поиск отправленных форм с логинами |
ftp |
Весь FTP-трафик | Логины и пароли летят открытым текстом |
ftp.request.command == "PASS" |
Только команды с паролем FTP | Точечный поиск пароля |
ftp.request.command == "USER" |
Только команды с логином FTP | Имя пользователя |
dns |
Весь DNS-трафик | Подозрительные домены, эксфильтрация |
tcp.port == 23 |
Трафик на порту Telnet | Telnet передаёт данные без шифрования |
ip.addr == 192.168.1.100 |
Пакеты от/к конкретному IP | Изоляция трафика одного хоста |
frame contains "flag" |
Пакеты со строкой "flag" | Грубый, но работающий поиск флага |
tcp.stream eq 3 |
Конкретный TCP-поток | Изоляция одной сессии |
Фильтры отображения (display filters) вводятся в строку фильтра вверху окна — они нужны при работе с готовым PCAP. Фильтры захвата (capture filters) используются для записи трафика в реальном времени и имеют другой синтаксис — на CTF они не понадобятся.
Фильтры комбинируются через логические операторы: && (И), || (ИЛИ), ! (НЕ). Пример: http && ip.src == 10.0.0.5 покажет HTTP-трафик только от конкретного адреса. Комбинация dns && !dns.qry.type == 1 отфильтрует DNS-запросы всех типов, кроме стандартных A-записей — полезно для поиска DNS-туннелирования, где данные передаются через TXT или CNAME-запросы.
Фильтр frame contains заслуживает отдельного разбора. Он ищет произвольную строку в сырых данных пакета — заголовках и полезной нагрузке одновременно. На CTF это часто самый быстрый способ найти ответ:
frame contains "flag{" — типичный формат CTF-флагаframe contains "password" — строка password в любом месте пакетаframe contains "secret" — аналогично для секретовtcp contains "login" — поиск только в TCP-пейлоаде, без заголовков нижних уровнейФильтр регистрозависимый. Если формат флага неизвестен, пробуйте варианты: frame contains "FLAG", frame contains "ctf", frame contains "key". Как отмечают авторы PacketSafari, фильтр frame contains "flag" — стартовая точка для задач на поиск скрытых данных в сетевом трафике.
Альтернативный путь — меню Edit → Find Packet (Ctrl+F). Здесь можно выбрать поиск по строке, hex-значению или регулярному выражению. Галочка "Case insensitive" решает проблему неизвестного регистра. Этот способ удобнее фильтра, когда вы не знаете точное написание искомого.
Поиск паролей — классическое задание CTF-форензики. В реальных условиях перехват учётных данных из сетевого трафика — техника Network Sniffing (T1040, Credential Access) по классификации MITRE ATT&CK. На CTF она воспроизводится в учебных условиях: организаторы создают PCAP-файл, в котором кто-то авторизовался по небезопасному протоколу, и задача — найти эти учётные данные.
Почему пароли вообще оказываются в трафике открытым текстом? Протоколы HTTP (без S), FTP, Telnet, POP3, IMAP без TLS гоняют данные в plain-text. Всё, что отправляет пользователь — логин, пароль, содержимое писем — летит по сети в чём мать родила. По классификации OWASP это A02:2021 — Cryptographic Failures: отсутствие шифрования при передаче чувствительных данных. Масштаб проблемы показывает утечка LinkedIn 2012 года: 164 миллиона учётных записей с паролями оказались скомпрометированы — по данным Have I Been Pwned. Значительная часть этих паролей на момент утечки передавалась через HTTP.
HTTP — самый частый протокол в CTF-тасках для начинающих. Алгоритм поиска пароля:
http.request.method == "POST"./login, /auth, /signin, /wp-login.php.username=admin&password=s3cret.Другой вариант — HTTP Basic Authentication. Ищите заголовок Authorization: Basic через фильтр http.authorization. Значение закодировано в Base64 — именно закодировано, не зашифровано (для тех кто в танке — это значит, что любой может декодировать обратно за секунду). Wireshark автоматически декодирует Base64 в панели Packet Details и показывает пару user:password в поле Credentials. Если декодирование не сработало, скопируйте строку Base64 и пропустите через echo "dXNlcjpwYXNz" | base64 -d в терминале.
На CTF бывает и менее очевидный случай: учётные данные передаются через cookie или кастомный HTTP-заголовок. Фильтр http.cookie contains "session" или http.request с последующим просмотром заголовков в Packet Details помогут обнаружить такие ситуации.
FTP — золотой стандарт CTF-заданий на перехват паролей. Протокол передаёт логин и пароль отдельными командами: USER admin, PASS secret123. Фильтр ftp.request.command == "USER" показывает логин, ftp.request.command == "PASS" — пароль. На практике проще ввести просто ftp и пролистать пять-десять пакетов — команды USER и PASS всегда идут друг за другом в начале сессии.
Помимо учётных данных, FTP-трафик содержит информацию о передаваемых файлах. Команда RETR filename.txt означает загрузку файла, STOR — отправку. Если в задании просят найти не пароль, а содержимое файла, переданного по FTP, — используйте Follow TCP Stream на пакете с командой RETR.
С Telnet хитрее: протокол передаёт данные посимвольно. Каждый введённый символ пароля — отдельный TCP-пакет. Фильтр tcp.port == 23 отберёт Telnet-трафик, но читать пароль по одному символу из разных пакетов — мучение. Решение: Follow TCP Stream. Он соберёт все символы в единый текст, где вы увидите и приглашение login:, и введённый логин, и password:, и пароль. В контексте MITRE ATT&CK сбор таких учётных данных из файлов и сессий описывается как Credentials In Files (T1552.001, Credential Access).
Follow TCP Stream — функция, которая собирает все фрагменты TCP-соединения и отображает их как единый читаемый диалог. По данным Cyber Forensic Academy, функция «reassembles the fragmented packets of a TCP conversation into a readable format», позволяя видеть переписку клиента и сервера как сценарий. Это главный инструмент для анализа pcap файлов на CTF.
Порядок работы:
На CTF Follow TCP Stream решает несколько задач сразу: чтение FTP-сессии целиком (логин, пароль, список файлов, переданные данные), сборка посимвольного Telnet-ввода в цельный текст, просмотр HTTP-запросов с заголовками и тел ответов. Иногда флаг виден прямо в текстовом потоке — среди HTML-комментариев, cookie-заголовков или тела ответа.
Типичная ошибка новичка: открывает Follow TCP Stream на первом попавшемся пакете и видит мусор. Не все потоки интересны — DNS-запросы, TCP-хендшейки, SSL-рукопожатия выглядят как набор нечитаемых символов. Перебирайте потоки: переключайте номер в поле "Stream" и просматривайте каждый. На CTF-таске обычно 5-20 осмысленных потоков, среди которых один-два содержат ответ.
Обратный приём: после находки в Follow Stream используйте фильтр tcp.stream eq N (где N — номер потока), чтобы вернуться к исходным пакетам в основном окне. Это помогает, когда нужно вытащить конкретное поле из заголовка или проверить временные метки.
Ещё одна полезная штука из того же меню — Follow HTTP Stream. Работает аналогично, но автоматически разжимает gzip-контент и показывает тело HTTP-ответа в читаемом виде. Для веб-тасков это удобнее, чем обычный TCP Stream.
Иногда задача CTF — не найти пароль, а вытащить файл из трафика: картинку с флагом, PDF с подсказкой, архив с ключом. Организаторы помещают файл внутрь PCAP-дампа, и нужно его извлечь.
Wireshark умеет экспортировать файлы, переданные по нескольким протоколам:
Помимо HTTP, Export Objects поддерживает SMB (файловые шары Windows), TFTP, IMF (email-вложения). На CTF HTTP встречается чаще всего, но если задание связано с передачей файлов внутри локальной сети — проверяйте SMB.
Что делать, если файл передавался по протоколу, который Export Objects не поддерживает? Используйте Follow TCP Stream: откройте нужный поток, переключите формат отображения с "ASCII" на "Raw" (выпадающее меню внизу окна) и сохраните данные через "Save as". Вы получите сырой бинарный поток — в простых случаях файл будет рабочим сразу, в сложных придётся вручную убрать заголовки протокола.
Как вспомогательный инструмент для извлечения файлов из pcap стоит держать под рукой NetworkMiner — он автоматически разбирает PCAP и раскладывает найденные файлы, картинки и учётные данные по папкам. Удобно как дополнение к Wireshark, когда нужно быстро вытащить все файлы из дампа без ручного перебора потоков.
Более продвинутые CTF-задания прячут данные не в HTTP или FTP, а в протоколах, которые новички обычно пропускают. DNS и ICMP — два самых популярных канала для стеганографии и эксфильтрации на соревнованиях. В реальных атаках злоумышленники используют эти протоколы для вывода данных из скомпрометированной сети, обходя межсетевые экраны: большинство фаерволов пропускают DNS и ICMP без глубокой инспекции. Логика простая — кто будет блокировать DNS? Без него сеть встанет.
DNS-туннелирование работает так: данные кодируются и помещаются в поддомен DNS-запроса. Вместо нормального mail.google.com в дампе появляются запросы вида aGVsbG8gd29ybGQ=.evil.com — закодированные данные вместо поддомена.
Алгоритм поиска на CTF:
dns.По описанию Cyber Forensic Academy, «malware frequently uses Domain Generation Algorithms (DGA) to find active C2 servers». На CTF это упрощается: обычно есть один "вредоносный" домен, куда данные отправляются через серию DNS-запросов.
ICMP Echo Request (ping) содержит поле payload, куда можно поместить произвольные данные. В нормальном трафике там стандартная padding-строка или нули. На CTF организаторы помещают в payload флаг или его фрагменты.
Фильтр: icmp. В Packet Details раскройте Internet Control Message Protocol → Data. Если вместо стандартного паттерна (повторяющийся abcdefghijklmnop на Windows или нулевые байты) видите осмысленный текст или Base64 — это цель задания.
Часто флаг распределён по нескольким ICMP-пакетам — по одному-два символа в каждом. Собирать их вручную неудобно (я пробовал — на десятом пакете начинаешь путать порядок), и здесь на помощь приходит tshark: автоматическое извлечение данных из payload всех ICMP-пакетов за одну команду.
tshark — консольная версия Wireshark с теми же возможностями анализа. Для CTF tshark незаменим, когда нужно обработать большой дамп или извлечь конкретное поле из сотен пакетов автоматически.
# Вытянуть URL всех HTTP POST-запросов
tshark -r dump.pcap -Y "http.request.method == POST" -T fields -e http.host -e http.request.uri
# Собрать все DNS-запросы в файл для анализа
tshark -r dump.pcap -Y "dns.qry.name" -T fields -e dns.qry.name > dns_queries.txt
# Достать данные из ICMP Echo Request payload
tshark -r dump.pcap -Y "icmp.type == 8" -T fields -e data.data
Ключевые параметры: -r задаёт входной PCAP-файл, -Y — фильтр отображения (тот же синтаксис, что в GUI), -T fields — табличный вывод, -e — конкретное поле для извлечения. Результат можно направить в grep, awk, sort -u или base64 -d для пост-обработки.
Практический приём для DNS-тасков: tshark -r dump.pcap -Y "dns.qry.name" -T fields -e dns.qry.name | sort -u выводит все уникальные DNS-запросы. Аномальные домены заметны сразу — длинные строки Base64 или hex среди нормальных google.com и cloudflare.com.
Для задач с ICMP-эксфильтрацией вывод data.data — hex-строки. Конвертация в текст: tshark -r dump.pcap -Y "icmp.type == 8" -T fields -e data.data | xxd -r -p. Если каждый пакет содержит по паре символов флага, вы получите их все в одну строку.
За несколько десятков CTF-тасков по форензике я собрал список ошибок, на которые тратится больше всего времени.
Не применяют фильтры. Открывают PCAP и начинают листать пакеты один за другим. В дампе на 10 000 пакетов это бесполезно. Первое действие — всегда фильтр: http, ftp, dns. Потом сужайте.
Забывают Follow TCP Stream. Смотрят на отдельные пакеты, не собирая их в сессию. Один пакет HTTP-запроса редко содержит полную картину. Follow Stream показывает весь диалог — запрос и ответ вместе, со всеми заголовками.
Не проверяют Export Objects. Файл может лежать в дампе, готовый к извлечению одним кликом через File → Export Objects → HTTP, а новичок пытается декодировать hex вручную из Packet Bytes. Зачем, если можно нажать Save?
Игнорируют DNS и ICMP. HTTP и FTP проверяют, остальное пропускают. А DNS-запросы и ICMP-пейлоады — частый канал для флагов на CTF среднего уровня.
Путают типы фильтров. Вводят синтаксис capture filter (port 80) в строку display filter и получают красный фон. В display filter правильный синтаксис: tcp.port == 80.
Не используют Statistics. Wireshark имеет меню Statistics с инструментами, которые экономят время. Protocol Hierarchy показывает распределение трафика по протоколам — если 60% дампа составляет DNS при задании про HTTP, данные прячут именно в DNS. Conversations и Endpoints показывают, кто с кем общался и сколько данных передал. Аномально большой объём трафика от одного хоста — зацепка.
Останавливаются на первом найденном. Нашли admin:admin и считают задание решённым. Но флаг может лежать в другой сессии, в другом потоке, в извлечённом файле. Проверяйте несколько потоков и всегда делайте Export Objects.
Минимальный алгоритм для любого CTF-таска с PCAP: (1) Statistics → Protocol Hierarchy для общей картины, (2) фильтры по основным протоколам, (3) Follow TCP Stream для подозрительных сессий, (4) Export Objects для файлов, (5) frame contains для прямого поиска флага. Этого хватит за глаза на процентов восемьдесят заданий уровня easy-medium.
Анализ трафика в Wireshark — один из тех навыков, где десять прочитанных статей не заменят одного решённого таска. Пока не откроешь реальный PCAP и не застрянешь на задаче, где очевидного HTTP нет, а флаг закопан в ICMP-payload, — фильтры не запомнятся. Я видел десятки новичков, которые проходили видеокурсы по Wireshark и потом не могли решить задачу уровня easy на CTF. Проблема одна: знают кнопки, не знают протоколы. Wireshark покажет пакет, но интерпретировать его придётся вам. Не понимаете, как работает TCP-хендшейк — не поймёте, почему Follow Stream собирает пакеты именно так. Не знаете структуру HTTP-запроса — пропустите заголовок Authorization с учётными данными. Инструмент без понимания сетевого стека — окно с цветными строками. Мой совет: начинайте с CTF-заданий уровня easy на PicoCTF или CyberDefenders, решайте по одному в день. Через две недели фильтры станут рефлексом, через месяц задачи medium перестанут казаться невозможными. Но фундамент — понимание протоколов, модели взаимодействия, принципов шифрования — важнее любого инструмента. Если хочется не просто тыкать фильтры по чужим шпаргалкам, а разобраться в сетях и безопасности с нуля — на codeby.school есть IB Basics, где про «как разобраться», а не про «запомните терминологию».
🚀 Хочешь закрепить на практике? Реши задачи по теме на HackerLab — категория «forensics».
0 комментариев
Пожалуйста, войдите, чтобы оставить комментарий.
Загрузка комментариев...