Конвертация объектов из post запросов в wireshark
2 min read

Конвертация объектов из post запросов в wireshark

Если при экспорте захваченных GET объектов проблем с идентификацией файлов не возникает, то при выгрузке данных из POST запросов все не так очевидно. Я написал утилиту для конвертации и предлагаю ее вашему вниманию.
Конвертация объектов из post запросов в wireshark

Захват объектов Wireshark

Wireshark — мощный инструмент для анализа сетевого трафика. Он практически всегда является первым средством мониторинга сетевой активности при проведении пентеста и иногда бывают ситуации, когда необходимо выгрузить из трафика переданные объекты (это могут быть документы .docx .xls .pdf, различные изображения, архивы и прочие файлы).

Объекты могу передаваться двумя способами:

  1. Это либо GET запрос, если пользователь их скачивает.
  2. Либо POST, если пользователь их загружает на сервер.

При просмотре трафика есть возможность извлечения различных объектов, которые попали в wireshark при передачи по открытому http соединению без применения шифрования.

Однако, если при экспорте захваченных GET объектов проблем с идентификацией файлов не возникает, то при выгрузке данных из POST запросов все не так очевидно.

При выгрузке GET данных wireshark сохраняет файлы в указанную нами директорию под изначальным именем и расширением в точности совпадающим с оригиналом.

В то же время выгрузка переданных объектов из POST запросов сохраняется под именем скрипта, на который этот POST отправлялся, что вызывает некоторые неудобства при просмотре таких файлов:

Пример выгрузки объектов из POST запросов

Сама структура таких файлов проста: либо внутри идет содержимое в текстовом виде, если передавалось какое-то значение, либо в том же текстовом виде идут файлы, но с описанием MIME-типа и включающие данные файла.

Ниже пример загрузки текстового файла, где первые 3 строки включают описание запроса с оригинальным названием и Content-Type.

Внутри находится и сам текстовый файл:

Формат объекта при POST запросе

Здесь его удобно читать, так как сам kernel.txt является текстовым, в случае же с другим типом файла мы увидим бинарные данные, которые сложно быстро адаптировать для чтения, особенно если этих файлов много.

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

Конвертирование объектов с wsconv

Для автоматизации процесса я написал небольшую утилиту, которая позволяет автоматизировать этот процесс. Логика работы следующая:

  1. Сканируем все файлы выгруженных объектов на наличие Content-Type.
  2. Переводим в шестнадцатеричный вид c помощью утилиты xxd для сохранения целостности при модификации объектного файла.
  3. Модифицируем файл.
  4. Сохраняем в отдельную папку под оригинальным именем.

Очевидно, что после выполнения утилиты в папке found_files мы обнаружим файлы в первозданном виде.

Конечный результат работы утилиты 

Как пользоваться?

  1. Для начала необходимо подготовить трафик для экспорта.
  2. Затем произвести экспорт POST объектов в нужную директорию из интерфейса Wireshark.
  3. Затем запустить в директории выгрузки утилиту ./wsconv.sh.
  4. Все распознанные файлы будут находится в found_files

Загрузка доступна из репозитория github:

wget raw.githubusercontent.com/n0a/wireshark-post-convert/main/wsconv.sh
chmod +x wsconv.sh
sudo ./wsconv.sh

Пример работы утилиты wsconv.sh:

Демонстрация работы wsconv.sh

Надеюсь, что моя утилита кому-то облегчит жизнь и позволит автоматизировать рутинную задачу по конвертации POST-объектов из wireshark.

Репозиторий на github: https://github.com/n0a/wireshark-post-convert