Главная / Блог / Сетевой анализ CTF: разбираем HTTP, FTP и DNS в трафике и достаём флаг без Wireshark-экспертизы

13 мин.00

Сетевой анализ CTF: разбираем HTTP, FTP и DNS в трафике и достаём флаг без Wireshark-экспертизы

Сетевой анализ CTF: разбираем HTTP, FTP и DNS в трафике и достаём флаг без Wireshark-экспертизы

Сетевой анализ CTF: разбираем HTTP, FTP и DNS в трафике и достаём флаг без Wireshark-экспертизы

На KnightCTF 2024 категория networking включала 18 задач, построенных на одном pcap-файле. Пять из них — от определения IP атакующего до номера порта reverse shell — решались фильтрами tshark без единого запуска графического интерфейса. Пока соседний стол двадцать минут кликал по меню Statistics → Protocol Hierarchy в Wireshark, три флага уже ушли в скорборд.

Сетевой анализ CTF — не про «экспертизу в Wireshark». Это про пять команд в терминале, понимание того, как выглядят HTTP, FTP и DNS в сыром виде, и привычку начинать с strings | grep, а не с GUI.

Минимальный набор инструментов и требования к окружению

Требования к окружению перед началом работы:

  • ОС: Linux (Kali — всё предустановлено), macOS, Windows через WSL2
  • RAM: от 4 ГБ — CTF-файлы pcap редко превышают 50 МБ, нагрузка минимальна
  • Сеть: не нужна, все инструменты работают offline с локальным pcap-файлом
  • Зависимости: tshark (ставится вместе с Wireshark: sudo apt install tshark), coreutils (strings, grep, base64 — есть в любом Linux)

tshark — командная версия Wireshark. Умеет всё то же самое: фильтрация, follow stream, экспорт объектов, дешифровка TLS. Wireshark активно поддерживается, стабильные релизы выходят ежеквартально, tshark обновляется вместе с ним. Установка: sudo apt install tshark на Debian/Ubuntu, в Kali предустановлен.

strings и grep — стандартные утилиты Unix. strings вытаскивает читаемые последовательности символов из бинарного файла. grep ищет по паттерну. Связка strings capture.pcap | grep -i "flag{" — первое действие в любой network-задаче. Занимает секунду.

base64 — декодер Base64 из командной строки. В CTF-задачах данные кодируют в Base64 повсеместно: заголовки HTTP Authorization, поддомены DNS-запросов, тело FTP-передач. echo "dGVzdA==" | base64 -d выдаёт test. Для начала хватит за глаза.

binwalk — извлекает вложенные файлы из бинарных данных, включая pcap. binwalk -e capture.pcap достанет картинки, архивы, документы, которые передавались по сети.

Для нестандартных задач с кастомными протоколами пригодится scapy — Python-библиотека для низкоуровневого разбора пакетов (репозиторий на GitHub, 10k+ звёзд, активная поддержка). Но для первых двадцати network-тасков хватит tshark.

Когда CLI-подход не работает: pcap-файлы от 500 МБ с десятками тысяч потоков — навигация в GUI удобнее. Сложный визуальный анализ временных диаграмм и ретрансмиссий тоже проще в графике. Но в CTF файлы обычно компактные, и CLI быстрее.

Разведка pcap файла: первые команды для tshark разбора трафика

Получил pcap — не торопись открывать в GUI. Три действия за первую минуту дают больше, чем десять минут кликанья по интерфейсу.

Шаг первый: strings + grep

strings capture.pcap | grep -i "flag{" — подставь формат флага из условия задачи. Организаторы CTF всегда сообщают формат заранее: KCTF{...}, flag{...}, ctfa{...}. По материалам github.com/welchbj/ctf, в части задач флаг лежит в открытом виде прямо в трафике — одна команда экономит минуты. На KnightCTF формат был KCTF{...}, на CTF Academy — ctfa{...}.

Ограничение: strings не найдёт флаг, если он закодирован (Base64, hex, XOR) или передан по зашифрованному каналу (HTTPS без предоставленного ключа). Но начинать всегда стоит с простого.

Шаг второй: protocol hierarchy

Узнай, какие протоколы есть в файле — от этого зависит, куда копать дальше:

tshark -r capture.pcap -q -z io,phs

На выходе — дерево протоколов с процентным распределением. Видишь 95% TCP/HTTP и 0.3% FTP — FTP твой первый кандидат. Несколько пакетов DNS среди сплошного HTTP — проверь DNS-запросы на аномалии. По руководству по CTF forensics на hacklido.com, Protocol Hierarchy помогает быстро обнаружить необычные или скрытые протоколы, в которых может прятаться флаг.

Шаг третий: полнотекстовый поиск

Если strings не дал результата, ищи слово «flag» во всём трафике через display-фильтр tshark: tshark -r capture.pcap -Y "frame contains flag". Это CLI-аналог Ctrl+F в Wireshark, только без ожидания загрузки интерфейса. Ещё имеет смысл поискать начало формата флага в Base64-кодировке — flag{ в Base64 выглядит как ZmxhZ3s.

HTTP-задачи в CTF: извлечение флага из веб-трафика

HTTP — протокол без шифрования. Всё, что по нему передаётся, видно в pcap как есть: заголовки, URL, тело запроса, ответ сервера. В терминах MITRE ATT&CK это T1071.001 (Web Protocols, тактика Command and Control) — атакующие используют HTTP для управления малварью, потому что он сливается с легитимным трафиком. В CTF организаторы моделируют этот сценарий: в HTTP-потоке спрятан флаг, креды или артефакт атаки.

Где искать флаг в HTTP-трафике

GET-параметры URL — флаг может быть частью адреса: /page.php?secret=flag{abc123}. Извлеки все GET-запросы одной командой: tshark -r capture.pcap -Y http.request -T fields -e ip.src -e http.host -e http.request.uri. На выходе — таблица: IP источника, хост, путь. Пробеги глазами — подозрительные параметры видны сразу.

POST-тело — формы логина, отправка данных, загрузка файлов. Фильтр: tshark -r capture.pcap -Y "http.request.method==POST". Дальше определи номер TCP-потока интересующего пакета и выполни follow stream (ниже покажу как).

Заголовки ответа — авторы задач иногда прячут флаг в нестандартных HTTP-заголовках: X-Flag, X-Secret-Data, X-Custom-Header. По данным ctf.support, нестандартные заголовки — один из методов эксфильтрации в CTF. Просмотри все ответы сервера: tshark -r capture.pcap -Y http.response -T fields -e http.response.code -e http.server.

Заголовок Authorization — если видишь Authorization: Basic dXNlcjpwYXNz, это Base64-закодированная пара «логин:пароль». echo "dXNlcjpwYXNz" | base64 -duser:pass. Один из первых паттернов, на которые стоит смотреть в HTTP-задачах.

Follow TCP Stream без GUI: HTTP follow stream через tshark

Ключевая техника разбора pcap файла. Нашёл подозрительный HTTP-запрос и хочешь увидеть полную сессию — запрос клиента и ответ сервера целиком? Определи номер TCP-потока (поле tcp.stream) и выполни:

tshark -r capture.pcap -q -z follow,tcp,ascii,3

Здесь 3 — индекс потока (синтаксис поддерживается в tshark 3.0+). В старых версиях используй фильтр: tshark -r capture.pcap -Y 'tcp.stream eq 3'. На экране появится весь диалог: HTTP-заголовки, HTML-тело ответа, иногда прямо с флагом внутри. Полный аналог правой кнопки → Follow → TCP Stream в Wireshark, только быстрее.

Извлечение файлов из HTTP — если в трафике передавали картинку, PDF или архив: tshark -r capture.pcap --export-objects http,./exported/. Файлы окажутся в папке exported. Внутри может быть PNG со стеганографией, текстовик с флагом или исполняемый файл для дальнейшего реверса.

HTTP-дерево — для общей картины HTTP-трафика полезна tshark -r capture.pcap -q -z http,tree. Покажет распределение запросов по методам и кодам ответа. 50 запросов с кодом 200 и один с кодом 301 на необычный путь — вот туда и смотри.

Разбор реального сценария: writeup KnightCTF

В задачах KnightCTF 2024 (по данным writeup'а Selectel) атакующий с IP 192.168.1.7 отправлял HTTP-запросы к жертве 192.168.1.8. В трафике были видны попытки Command Injection (?|=../../../../../etc/passwd) и SQL Injection. Фильтр tshark -r capture.pcap -Y 'http contains "etc/passwd"' -T fields -e ip.src -e ip.dst мгновенно показал источник атаки. User-Agent содержал строку Nikto — сканировали автоматизированным инструментом. Вся последовательность: разведка → эксплуатация → бэкдор — восстанавливалась из одного pcap-файла.

[Применимо: CTF-задачи с незашифрованным HTTP. Не работает: HTTPS/TLS без предоставленного приватного ключа сервера. Если ключ дан — tshark умеет расшифровывать TLS-трафик, но это уже продвинутый сценарий.]

FTP credentials в трафике: логины и пароли в открытом виде

FTP — T1071.002 (File Transfer Protocols, тактика Command and Control) — передаёт учётные данные без шифрования. Когда клиент подключается к FTP-серверу, в трафике идут текстовые команды USER username и PASS password. Никакого хеширования, никакого TLS по умолчанию. В чём мать родила — прямо в пакете.

Извлечение логинов и паролей

Фильтрация FTP-трафика: tshark -r capture.pcap -Y ftp. В выводе увидишь последовательность:

  • Response: 220 (vsFTPd 2.3.4) — баннер сервера (версия важна для поиска CVE)
  • Request: USER admin — имя пользователя
  • Request: PASS secret123 — пароль в открытом виде

Если нужны только креды: tshark -r capture.pcap -Y "ftp.request.command==USER || ftp.request.command==PASS" -T fields -e ftp.request.arg. На выходе — аргументы команд по одному на строку. Скопировал, вставил в формат флага — сдал.

FTP-передача файлов: где искать данные

FTP использует два канала: командный (порт 21) и канал данных (порт 20 или динамический из PASV). Сами файлы передаются по data-каналу, а не по командному. Чтобы найти переданный файл:

  1. Найди команду RETR filename.txt (скачивание) или STOR filename.txt (загрузка) в командном канале
  2. Определи порт data-соединения из ответа на PASV-команду
  3. Выполни follow stream на этом порту

На практике проще тупо запустить binwalk -e capture.pcap — утилита часто извлекает файлы из pcap автоматически, независимо от протокола передачи. Как альтернатива — NetworkMiner, инструмент для сетевой криминалистики, который по данным hacklido.com автоматически извлекает файлы, изображения и учётные данные из pcap. Но для CTF обычно хватает binwalk.

Место FTP-анализа в цепочке атаки

FTP-задачи в CTF моделируют реальный сценарий: атакующий получил initial access через уязвимый FTP-сервер (например, vsFTPd 2.3.4 с известным бэкдором), затем провёл эксфильтрацию данных (T1048.003 — Exfiltration Over Unencrypted Non-C2 Protocol). В KnightCTF бэкдор vsFTPd создавал reverse shell на порту 6200 — переход от начального доступа к удалённому выполнению команд. Все команды атакующего в reverse shell шли по TCP в открытом виде и были видны через follow stream — фактически bash_history атакующего прямо в pcap.

[Применимо: CTF-задачи и анализ legacy-инфраструктуры. Не работает: FTPS (FTP over TLS) и SFTP (SSH File Transfer Protocol) — трафик зашифрован. В современных инфраструктурах FTP почти не встречается, но в CTF и при пентесте legacy-систем — стабильно.]

DNS exfiltration в CTF: когда флаг спрятан в DNS-запросах

DNS — самый недооценённый протокол в network-категории CTF. Его почти всегда пропускают через файрвол (блокировать DNS = сломать интернет для пользователей), и через него можно гнать произвольные данные. В реальных атаках это техника T1071.004 (DNS) в связке с T1132.001 (Standard Encoding) — малварь кодирует украденные данные в Base64 или hex и отправляет как поддомены DNS-запросов.

Как выглядит DNS-туннелирование в трафике

Вместо обычных запросов к www.google.com в pcap появляются запросы вида:

  • 666c61677b.exfil.evil.com
  • 6831645f.exfil.evil.com
  • 316e5f646e737d.exfil.evil.com

Каждый поддомен — hex-закодированный фрагмент данных. Склеив поддомены в порядке появления и декодировав hex, получишь флаг. Другой вариант — Base32 или url-safe Base64 в поддоменах (классический Base64 содержит символы +, /, =, недопустимые в DNS-именах по RFC 1035, поэтому DNS-туннели используют hex, Base32 или модифицированный Base64-алфавит). Третий — данные прячут в ответах DNS TXT-записей, а не в запросах.

Признаки DNS exfiltration в pcap: аномально длинные поддомены (больше 20 символов), повторяющийся домен верхнего уровня (все запросы к *.evil.com), запросы с hex-паттернами (только символы 0-9a-f), необычная частота DNS-запросов за короткий период.

Извлечение и декодирование DNS-данных через tshark

Первый шаг — вытащи все DNS-запросы:

tshark -r capture.pcap -Y "dns.qry.name" \
  -T fields -e dns.qry.name | sort -u

На выходе — уникальные доменные имена из pcap. Нормальные домены (google.com, cdn.example.com) пропускай, ищи аномалии. Длинные hex-строки в поддоменах — почти гарантия exfiltration.

Нашёл подозрительный домен? Допустим, все запросы идут к *.data.evil.com, а поддомены — hex:

tshark -r capture.pcap \
  -Y "dns.qry.name contains data.evil.com" \
  -T fields -e dns.qry.name | \
  sed 's/\.data\.evil\.com//' | \
  tr -d '\n' | xxd -r -p

Тут фильтруем DNS-запросы к data.evil.com, вырезаем доменную часть (sed), склеиваем поддомены в одну строку (tr -d '\n') и декодируем hex (xxd -r -p). На выходе — флаг или его фрагмент.

Если кодирование Base64, замени последний пайп: ... | base64 -d. Если данные в TXT-записях ответов — другой фильтр: tshark -r capture.pcap -Y "dns.txt" -T fields -e dns.txt.

Почему DNS-задачи имеют низкий процент решений

DNS exfiltration CTF-задачи стабильно оказываются среди наименее решаемых в категории network. Не потому что сложные — потому что участники не привыкли смотреть на DNS как на канал передачи данных. HTTP и FTP «понятны»: там тело запроса, файлы, логины. DNS кажется «служебным», и его пропускают. А разница между задачей «найди флаг в HTTP» и «найди флаг в DNS» — одна команда tshark.

[Применимо: CTF-задачи с DNS-трафиком в pcap. Не работает: DNS over HTTPS (DoH) или DNS over TLS (DoT) — трафик зашифрован и выглядит как обычный HTTPS. В CTF для новичков DoH пока не встречается.]

Сетевой анализ CTF в контексте цепочки атаки

Разбор pcap — это этап forensics, когда аналитик восстанавливает действия атакующего по записанному трафику. Понимание того, на какой стадии kill chain находится каждый артефакт, ускоряет решение: знаешь что искать — знаешь какой фильтр ставить.

Типичная цепочка, восстанавливаемая из одного pcap-файла:

  1. Разведка и обнаружение (Discovery) — массовое сканирование портов (множество SYN-пакетов к разным портам одного хоста). Network Sniffing (T1040, тактики credential-access и discovery) — перехват трафика. В pcap KnightCTF сканирование Nikto было видно по User-Agent в HTTP-запросах
  2. Начальный доступ (Initial Access) — эксплуатация уязвимости. vsFTPd 2.3.4 backdoor через Metasploit — классика, видимая в FTP-потоке
  3. Выполнение (Execution) — команды через reverse shell. TCP-поток на порту 6200 содержал plaintext bash-команды — полный лог действий атакующего
  4. Эксфильтрация (Exfiltration) — вывод данных через DNS-поддомены (T1048.003), HTTP POST (T1071.001) или FTP (T1071.002)

Когда читаешь условие задачи — определи, какой этап цепочки моделируется. «Найди IP атакующего» — разведка. «Какой CVE использовал атакующий» — initial access. «Какие команды выполнил» — execution. «Какие данные украл» — exfiltration. Каждый этап → свой набор фильтров.

Чеклист для решения network challenges CTF

Алгоритм для любой network-задачи. Распечатай и держи рядом на первых турнирах:

  1. Прочитай условие. Запомни формат флага и контекст — что именно нужно найти (креды, файл, действия атакующего, конкретный IP)
  2. strings + grep. strings capture.pcap | grep -i "формат_флага". Нашёл — сдавай, не думай
  3. Protocol hierarchy. tshark -r capture.pcap -q -z io,phs. Определи нетипичные или редкие протоколы — с них начинай
  4. Фильтрация по протоколу. HTTP: -Y http.request. FTP: -Y ftp. DNS: -Y dns.qry.name. Смотри, что выделяется
  5. Follow stream. Нашёл подозрительный пакет — определи номер TCP-потока, выполни tshark -r capture.pcap -q -z follow,tcp,ascii,N
  6. Извлечение файлов. HTTP-объекты: --export-objects http,./out/. Универсально: binwalk -e capture.pcap
  7. Декодирование. Base64: echo "строка" | base64 -d. Hex: echo "строка" | xxd -r -p
  8. DNS-проверка. Если в hierarchy есть DNS — tshark -r capture.pcap -T fields -e dns.qry.name | sort -u и ищи аномально длинные поддомены
Протокол Что искать Первая команда tshark
HTTP URL-параметры, POST-тела, заголовки tshark -r pcap -Y http.request -T fields -e http.request.uri
FTP Команды USER/PASS, файлы RETR/STOR tshark -r pcap -Y ftp
DNS Длинные поддомены, TXT-записи tshark -r pcap -T fields -e dns.qry.name
TCP/raw Plaintext в нестандартных потоках strings pcap \| grep -i flag

Когда алгоритм не работает: зашифрованный трафик (TLS/HTTPS) без предоставленного ключа — нужен ключ от организаторов. Кастомные бинарные протоколы — нужен scapy для ручного разбора полей пакета. Повреждённые pcap-файлы — используй pcapfix broken.pcap -o repaired.pcap перед анализом, как рекомендует ctf.support. Гигабайтные дампы с десятками тысяч потоков — GUI Wireshark для навигации удобнее CLI.

Network — самая предсказуемая категория в CTF для новичков. В 80% задач флаг лежит либо в HTTP-ответе, либо в FTP-кредах, либо закодирован в DNS-поддоменах. Три протокола, пять команд tshark, один grep — и категория закрыта.

Проблема в том, что большинство гайдов учат через Wireshark GUI: «откройте Statistics, нажмите Protocol Hierarchy, правый клик, Apply as Filter». На домашнем ноутбуке это работает. Но когда на турнире доступ — только SSH к боксу с pcap-файлом и нет возможности скачать дамп на свою машину, GUI бесполезен. А tshark работает везде, где есть терминал.

DNS-задачи стабильно имеют самый низкий процент решений в категории network, хотя технически они не сложнее HTTP. Причина — участники не воспринимают DNS как канал передачи данных. В реальных атаках DNS-туннелирование применяется годами (техника T1071.004, тактика Command and Control), APT-группы используют его для эксфильтрации из сетей, где весь остальной исходящий трафик фильтруется. А в CTF этот вектор считают экзотикой и пропускают. Научись распознавать hex и Base64 в поддоменах — будешь закрывать задачи, которые половина участников даже не начинает. Если хочешь пройти базу системно — от сетей до первых практических задач — IB Basics на codeby.school закрывает это без академического тона.

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

Поделиться

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

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

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