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

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

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

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

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

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

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

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

При выгрузке 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