Wireshark как достать zip файл

Обновлено: 07.07.2024

Что-ж, приступим. На просторах интернета я нашел файлик перехваченого трафика и сегодня покажу Вам как происходит кража файлов с уже сдампленого файла.

Заходим в Wireshark и открываем файл ftp.pcap


Далее переходим в TCP-поток. Правой кнопкой на первый пакет. Follow->TCP Stream


Здесь мы увидим окно, в котором отражены все FTP-команды и ответы, которые передавались в этой сессии. Обратим внимание на участки с упоминанием *.zip файла. Это явно то что мы ищем.

SIZE OS Fingerprinting with ICMP.zip — запрос размера файла.

RETR OS Fingerprinting with ICMP.zip — ответ сервера.

610078 байт — размер файла

Этот файл нас заинтересовал. Теперь попробуем его найти. Нажимаем левой кнопкой мыши на RETR-пакет и попадаем в такое место(не забываем очистить полоску-фильтр сверху):


Ищем ближайший к нам FTP-DATA пакет. Кто не знал, FTP-DATA как-раз предназначен для передачи данных и файлов по протколу FTP.


На этом пакете правой кнопкой мыши. Follow->TCP Stream.


Получаем вывод в виде загогулин. Видим Show and save data as. Выбираем RAW. Получаем такое:


Тыкаем на Save as… Попадаем в диалоговое окно сохранения. Сохраняем файл name.zip

Открываем архив и видим:


Вы теперь знакомы с одним из основных способов поиска информации в стампленом TCP-трафике.

Мы можем снять трейсы определенного интерфейса и рассчитываем достать из этих трейсов нужную нам информацию (например, zip архив, интересующий нас jpeg файл или секретный PDF документ).

1. Способ Follow TCP stream

Для использования этого метода, нам нужно точно знать, что искомые данные находятся в определенном пакете. Определить это можно «увидев» передачу данных в потоке TCP. На пакете, в котором мы предполагаем велась передача данных, нажимаем правой кнопкой и выбираем Follow TCP Stream (см. рисунок ниже):

Wireshark trace

Затем в появившемся окне выбираем сохранить данные на диск, не забыв указать расширение файла (см. рисунок ниже):

Wireshark trace

Хочу отметить несколько очень важных моментов (см. следующий рисунок):

Хозяйке на заметку: файлы, начинающиеся с «MZ» являются исполняемыми.

  1. Также важно выбрать направление в котором велась передача файла, т.е. выбрать направление либо от сервера к клиенту, либо наоборот – определить это можно по IP адресам.
  2. Необходимо выбрать сохранение файла из «Raw» данных.

Wireshark trace

2. Фильтр data contains

Один из самых простых способов найти нужный нам пакет, жаль только не всегда срабатывает этот метод 🙂

В поле фильтра можно вбить:
data contains “SYS” – например, для поиска строковых значений в полях data, содержащих значение SYS (см. рисунок ниже).

Wireshark trace

Дальнейшие действия полностью совпадают с первым пунктом, т.е. выбрать пакет, содержащий необходимую нам информацию, нажать правой кнопкой – выбрать Follow TCP stream, а затем сохранить файл, указав его расширение.

В понимании Wireshark, этот фильтр воспринимается как поиск пакетов, содержащих «полезную нагрузку», т.е. те данные которые не принадлежат определенному протоколу и которые Wireshark не может расшифровать дальше.

Фильтр похож на поиск, реализованный по ссылке Edit => Find Packet (см. рисунок ниже):

Wireshark tracee

Следует быть внимательным с этим фильтром, т.к. если искомая строка не будет попадать в поле «data», то Wireshark ничего не найдет.

3. Фильтр frame[х]

Для того, чтобы воспользоваться этим методом, нам необходимо знать hex значение для ASCII символов типа файлов, которые мы ищем, т.к. фильтр frame[] принимает в качестве параметров только значения hex. Например, если мы ищем в трейсе файлы pdf, то нам необходимо знать hex значение для ASCII символов PDF. Узнать значения можно с помощью любого hex редактора. Я воспользуюсь бесплатной программой FileAlyzer.

Для этого необходимо открыть любой документ pdf в программе и перейти на закладку «Hex dump», а затем на закладку «Hex / Strings (new)». Здесь мы видим, что ASCII последовательности символов %PDF соответствует hex значение 25:50:44:46 (см. рисунок ниже).

Wireshark trace

frame[54:4] == 25:50:44:46, где

54 (десятичное) = 0x36 (hex) означаем оффсет, т.е. начало поиска, позицию с которой будем искать указанное значение (см. рисунок ниже):

Wireshark trace

Wireshark trace

Дальнейшие действия полностью совпадают с первым пунктом, т.е. выбрать пакет, содержащий необходимую нам информацию, нажать правой кнопкой – выбрать Follow TCP stream, а затем сохранить файл, указав его расширение.

Да, кстати, к чему это я о поиске файлов и GPRS…

Попробую это сделать с помощью Follow TCP stream, на «случайно» снятом трейсе передачи MMS на email с Gn интерфейса (см. рисунок ниже).

Wireshark trace

Пришлось выбрать только часть, относящуюся к данным картинки (см. рисунок ниже):

Wireshark trace

В итоге получаем сверхсекретный рисунок:

hacker cat

Это конечно же не единственные способы поиска нужных нам файлов в снятом трейсе с помощью Wireshark, но и с их помощью уже можно найти некоторые данные. В следующей статье, я покажу как можно реализовать MITM атаку для GPRS сети, используя как раз Wireshark и доступ к Gn интерфейсу.



Пакет с сертификатами от Хабра

Wireshark — очень известная программа для захвата и анализа сетевого трафика, незаменимый инструмент хакера, сетевого инженера, программиста, специалиста по безопасности. Да вообще любого любознательного человека, который хочет детально изучить трафик со своего или чужого мобильного телефона, фитнес-браслета, телевизора.

Wireshark в реальном времени перехватывает сетевые пакеты и сохраняет, например, в файлах pcap (Packet Capture). Их потом используют для изучения трафика, восстановления информации, анализа работы сети, обнаружения атак. Это альтернатива и дополнение к стандартной утилите tcpdump , с графическим интерфейсом, фильтрами и более широкими возможностями.

В Wireshark миллион функций, но буквально каждый человек с минимальными знаниями может использовать его с пользой. Ниже примеры основных сетевых задач.

Расшифровка трафика SSL/TLS

Chrome и Firefox могут записывать логи сессионных ключей, которые используются для шифрования трафика SSL/TLS. Наша задача — включить запись этих логов, а потом загрузить их в Wireshark для анализа. Предполагается, что у нас есть физический доступ к компьютеру пользователя, трафик которого мы хотим расшифровать. Или к серверу, который устанавливает зашифрованное соединение с пользователем.

Сначала включаем запись ключей.

Старые билды Windows 10

В старых билдах Windows 10 работает старый метод. Заходим в Панель управленияСистема и безопасностьСистема. На вкладке «Дополнительные параметры системы» нажимаем кнопку «Переменные среды».


Добавляем для пользователя новую переменную SSLKEYLOGFILE и указываем путь до файла.


В результате получаем логи с ключами, начало файла:

Новые билды Windows 10

В более новых версиях после установки Windows 10 старый способ добавления переменных окружения может больше не работать. Тогда есть альтернативный вариант с помощью команды в оболочке PowerShell.

[Environment]::SetEnvironmentVariable("PATH", "C:\TestPath", "User")

Первый параметр — это имя переменной, второй — значение, третий — для какого уровня переменная (пользовательский или системный).

[Environment]::SetEnvironmentVariable("SSLKEYLOGFILE", "D:\wireshark", "User")

Linux и Mac OS X

Под Linux и Mac OS X можно использовать такую команду для изменения переменной окружения и ведения логов — с запуском браузера из того же терминального окна, поскольку переменные окружения всегда работают в пределах одной сессии.


После накопления лога запускаем Wireshark.


Заходим в «Параметры», там на вкладке «Протоколы» (Protocols) находим раздел TLS (раньше он назывался SSL) — и указываем путь к файлу с логами и ключом, который использовался в сессии симметричного шифрования: (Pre)-Master-Secret log filename.


Например, при заходе пользователя на сервер Gmail в окне инспектирования пакетов QUIC мы видим обычные пакеты QUIC, зашифрованные ключом TLS.


Но в нижней части экрана появляется новая вкладка Decrypted QUIC, которая показывает расшифрованное содержимое этих пакетов.


Такой метод расшифровки трафика клиента не требует установки Wireshark на его компьютер, достаточно только скачать дамп с ключами, а потом использовать его вместе с дампом трафика.


Анализируем трафик с другого компьютера

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

Записываем пакеты на сервере с помощью сниффера пакетов tcpdump, который входит в стандартный комплект *nix:


Затем копируем файлы к себе на компьютер:


Здесь уже запускаем Wireshark и открываем полученный файл.

Есть вариант отслеживать серверный трафик в реальном времени со своего домашнего/рабочего компьютера. Например, весь трафик, кроме портов 22 и 53:


Примерно то же самое с компьютера под Windows:

Ищем проблемы

Чтобы выделить конкретное TCP-соединение, находим любой интересующий пакет, щёлкаем по нему правой кнопкой мыши — и применяем фильтр диалога.


Теперь из всего записанного трафика остались только пакеты, принадлежащие конкретно этому соединению.


На скриншоте мы видим пакеты с начала установки соединения TLS: пакет с приветствием клиента, ответный пакет с приветствием сервера, предъявленный сертификат, список шифров и так далее. Содержимое каждого пакета можно изучить отдельно. Очень удобно.

Типичный паттерн — использовать Wireshark для диагностики конкретных проблем. Например, в случае разрыва TLS-соединения мы можем зайти и посмотреть, кто его разорвал (клиент или сервер), на каком этапе это произошло и по какой причине.

Содержимое пакетов

Отключение сетевого интерфейса Intel происходит, если по адресу 0x47f находится значение 2 или 3, то есть 32 HEX или 33 HEX. Если там 4, то всё нормально.


Поиск пакетов по содержанию

Выше мы применили фильтр диалога, чтобы выдать все пакеты для конкретного TCP-соединения. Однако фильтры можно писать и вручную. Вот некоторые примеры запросов:

  • frame contains "google" — поиск всех пакетов со словом “google” в любом месте пакета
  • tcp.port == 443 — порт 443
  • dns.resp.len > 0 — все DNS-ответы
  • ip.addr == 95.47.236.28 — конкретный IP-адрес для получателя или отправителя

Трафик с мобильного телефона

Аналогичным образом можно проанализировать трафик с фитнес-часов по Bluetooth или трафик любого мобильного приложения под Android. Для этого нужно записать пакеты PCAP на мобильном устройстве — и передать их для анализа в Wireshark на рабочем ПК.

Есть несколько мобильных программ для записи PCAP. Например, приложение
PCAPdroid для Android:



PCAPdroid

В принципе, можно не передавать записанные файлы PCAP, а анализировать их прямо на мобильном устройстве. В некоторых мобильных снифферах есть и зачаточные функции анализатора пакетов, см. Packet Capture и Termux (о нём ниже).



Packet Capture

Wireshark имеет и прямой интерфейс Androiddump, чтобы снимать данные с телефона напрямую через Android SDK.

Трафик с телевизора и других бытовых приборов

Чтобы изучить трафик с телевизора, смартфона жены или других бытовых приборов, которые подключены в домашнюю сеть по Ethernet и WiFi, придётся записывать PCAP на маршрутизаторе. Иногда достаточно встроенных инструментов. Если у вас маршрутизатор с прошивкой DD-WRT, то можно прямо на устройстве запустить tcpdump :


Для прошивки OpenWrt есть вариант зеркалировать трафик с помощью iptables-mod-tee.

Можно зеркалировать и записывать трафик с помощью дополнительного физического хаба или врезки в сеть. Подробнее см. в документации.



Другой способ — перехватить беспроводной трафик WiFi с помощью утилиты Airodump-ng без подключения к маршрутизатору. Но это больше подходит для анализа трафика на чужих хотспотах.

Далее всё по накатанной — загружаем файлы в Wireshark, запускаем фильтры.

Кстати, Wireshark поддерживает также анализ трафика USB: встроенный сниффер USBPcap и импорт пакетов из сторонних снифферов, таких как Npcap и RawCap.

Если вы анализируете объёмные логи на удалённом сервере, но не хотите копировать всё на свою машину, может пригодиться Termshark — удобный пользовательский интерфейс в консоли для анализатора TShark, по внешнему виду напоминающий Wireshark.

Функции

  • Чтение файлов pcap и прослушивание трафика с активных интерфейсов в реальном времени (где разрешён tshark)
  • Фильтрация pcap или активных интерфейсов с помощью фильтров отображения Wireshark
  • Повторная сборка и инспектирование потоков TCP и UDP
  • Просмотр сетевых сеансов по каждому протоколу
  • Копирование выделенных пакетов из консоли в буфер обмена
  • Инструмент написан на языке Go, на каждой платформе компилируется в единый исполняемый файл: есть уже собранные версии для Linux, macOS, вариантов BSD, Android (termux) и Windows


Вот как выглядит версия под Android:


Если по каким-то причинам вы не можете запустить Wireshark на локальной машине, можно воспользоваться облачным сервисом CloudShark, который сделан на удивление качественно.


Сервис платный, есть 30-дневный пробный период.

В общем, Wireshark — просто фантастическая программа на все случаи жизни.

Кроме реальной практической пользы, анализатор даёт примерное представление о том, как работает фильтрация DPI у российских провайдеров. Там всё устроено примерно так же. Система в реальном времени сканирует трафик, фильтрует конкретно пакеты от Twitter — и замедляет их доставку пользователям на территории России. В частности, этим непотребством занимается Роскомнадзор с 10 марта 2021 года.

На правах рекламы

Если для работы необходим сервер в аренду на Linux или Windows, то вам однозначно к нам — активация услуги через минуту после оплаты!

НО такие объемные дампы лучше не делать, а использовать функционал по созданию каждые N-пакетов/секунд/байт нового файла в Output настройках Wireshark (настраивается перед стартом захвата).

  • задать отключение сбора дампа(ов) после N-пакетов/секунд/байт.
  • включить резолвинг IP адресов в DNS имена (как по умолчанию у tcpdump)

Analyze -> Expert Info. Очень удобно понять были ли duplicated ack/retransmissions и прочие проблемы (см. раздел Notes).


WIRESHARK


  • В Wireshark есть выгрузка object из дампов – можно картинки просмотренного сайта выгрузить, страницы html


  • Можно искать запросы к определенным URL (можно и в tcpdump, но проще куда в акулке)
  • Продуманный интерфейс: Сразу можно посмотреть и HEX и ASCII репрезентацию данных, отсортировать пакеты, увидеть проблемы по цвету, отфильтровать вывод и прочпроч

Wireshark не только с точки зрения удобства использования лучше tcpdump, он считается и намного более мощным инструментом в сравнении с ним, особенно когда идет вопрос в анализе уровня приложений (поддержка более 2к протоколов, даже таких как USB/Bluetooth/Zigbee). Так же использует libpcap. Кроме того у Wireshark есть консольная утилита tshark (terminal-shark), которая часто позволяет обойтись без tcpdump вовсе (сори, tcpdump), но при больших нагрузках (гигабит и более фреймами 64 байта) нужно учитывать, что tshark хуже по производительности в сравнении с tcpdump. Например, можно использовать фильтры, аналогичные wireshark в консоли.

Фильтры

Фильтры бывают двух видов:



Очень полезная вещь, которая позволяет не знать синтаксис:


Профили (profiles)

RTT

statistics -> tcp stream graph -> round trip time

VoIP

  • sngrep это утилита для анализа SIP/VoIP трафика в консоли Linux сервера.
  • Wireshark очень полезен для диагностики VoIP.

Заходим в контекст Telephony, выбираем VoIP Calls. Видим звонки успешные и не очень. Так же видим и активные звонки.



Выбрав звонок и нажав на Flow Sequence можно посмотреть наглядно весь процесс согласования.


А по Play Streams можно даже прослушать звонок (если он успешен и поддерживается кодек, как тут G.711A), через встроенный в акулу RTP player. Круто!




Пример дампа с разговором (из курса GNS3 Wireshark: Packet Analysis and Ethical Hacking: Core Skills). Для прослушивания RTP потока нужно сделать decode as по одному из UDP пакетов разговора и выбрать протокол RTP для интерпретирования.

Время


Статистика

В разделе statistics можно узнать кучу разных вещей (только часть):

  • общая статистика по файлу, эту статистику можно получить используя консольную утилиту capinfos от Wireshark:
    • дата/время первого и последнего пакета
    • размер дампа
    • количество пакетов
    • время съема трафика
    • средний pps, packet size, bits/s


    • распределение по протоколам в protocol hierarchy, причем можно посмотреть на эти данные в самом дампе, применив стандартный Apply as a filter в статистике


    • по размерам пакетов в packet lengths


    • найти top talkers в endpoints (MAC, IP4/6, UDP, TCP)


    • проанализировать взаимодействие между хостами по объему трафика в conversations (MAC, IP4/6, UDP, TCP)




    tcpdump
    • Tcpdump работает на почти любые типы интерфейсов, которые идентифицируются системой (не DPDK): sub интерфейсы, bridge интерфейсы, туннельные интерфейсы и даже loopback
    • Tcpdump может при старте не показывать какое-то время наличие пакетов на интерейсе, особенно если не отключен DNS resolve через -n
    • При передаче файлов с дампами по сети, всегда нужно учитывать, что Wireshark/tcpdump не ужимают дампы, а после сжатия обычным zip/rar файл может весить в десятки раз меньше (gzip c 800MB до 50MB, 7z c 800MB до 20MB).

    Опции (подробнее в man tcpdump):

    Есть поддержка фильтров, как базовых, так и довольно сложных (напр. L4). Возможна комбинация фильтров (см. usage).

    packetdump

    Читаем последние логи для интерфейса:

    Python + pyshark
    Редактирование
    PYTHON + SCAPy

    Самый удобный способ когда нужно сделать более чем одно действие по изменению сетевых дампов. Легко можно сделать даже непростые операции, например, заменить все сетевые (MAC, IP, PORT) адреса в дампе на другие, IPv6 header на IPv4. Замена IPv6 header на IPv4 подразумевает извлечение payload, создание IPv4 header, добавление в него payload, пересчет checksum и length (см. в HEX EDITORS).

    Подробнее в python поиском по scapy.

    HEX READER and WIRESHARK

    Извлекаем из записанных byte файлов вывод для сопоставления с Wireshark.

    hex editors

    Самый хардкорный 🙂 способ изменения дампов. Подразумевает и пересчет checksum, тут может помочь tcprewrite.

    К примеру, c помощью hex editor ipv6 header заменить на ipv4 не так просто (особенно, в сравнении со python + scapy):

    1) изменяем hex строку. Много разных способов, хорошо с gif описано тут.

    2) после изменения нужно использовать pcapfix (причина однозначно непонятна, возможно, разрушается структура при экспорте)

    4) IPv4 header должен иметь корректный total length от IPv4 header + payload; т.е. при каждой замене нужно корректировать total length для каждого пакета, иначе пакет будет отбрасываться еще на уровне ядра ОС (Linux, Windows)

    5) Checksum может не пересчитываться tcprewrite с segmentation fault (помог запуск tcprewrite на другой VM)

    И все это нужно делать для всех пакетов в дампе.

    tcprewrite

    Хороший, хотя и базовый, редактор дампов.

    Change MAC

    Change IP

    Можно менять по net/mask, если не использовать опцию -fixsum, то чексумма может не пересчитаться.

    bittwist/bittwiste

    Хорошие, но старые утилиты для воспроизведения/генерации трафика (bittwist) и редактирования pcap (bittwiste). Bittwiste не поддерживает IPv6.

    Может помочь удалить лишние инкапсуляции

    dsniff
    WireEdit

    Хороший продукт для редактирования pcap. У самого Wireshark была beta с возможностью edit, но видимо дальше беты не зашло.

    С помощью WireEdit в пару кликов можно поменять любые поля (в том числе массовые замены) и пересчитать checksum. Требует лицензию (высылают на почту при регистрации, сейчас с этим стало сложнее).


    Продукт развивается, пример добавлений в новом релизе:

    SPLIT PCAP

    Разбиваем крупный pcap на несколько дампов по 100 MB (tcpdump).

    Разбиваем крупный pcap на несколько дампов по миллиону пакетов (editcap).

    editcap + mergecap
    Воспроизведение
    pfsend

    pfsend позволяет создавать большую нагрузку в сравнении с tcpreplay без кастомизаций (netmap, preload). Основан не на netmap/DPDK, а на pfring.

    Tcpreplay

    Tcpreplay по умолчанию стремится повторить pcap с точки зрения задержек между пакетами и уложить все за время снятия дампа!

    performance tuning results

    dump size

    объем памяти

    taskset

    tcpreplay-edit с fuzzing

    Может падать с segmentation fault (segfault) на какие-то дампы/каких-то сборках, так же как tcprewrite.

    tcpreplay с netmap

    Сборка netmap.

    Для начала качаем сборку tcpreplay-4.3.1.tar.xz с сайта разработчика т.к. напрямую с git требует autogen + сборка можеты быть не stable. Далее схема аналогична netmap.

    Запуск tcpreplay с netmap.

    Для запуска требуются установленные в ядро драйвера netmap (netmap.ko) и сетевой карты (напр. ixgbe.ko, igb.ko, igb_uio.ko, e1000e), иначе будет ошибка. Загружаем в ядро драйвер с помощью insmod.

    Можно так же проверить lsmod, ls /dev/netmap. Просмотреть путь до всех модулей ядра/драйверов можно используя awk + xargs.

    Выгрузить драйвер можно с помощью rmmod и modprobe.

    Анонимизация
    Комплексные продукты

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