Проследите неудачную попытку и её повтор

WiresharkBeginner
Практиковаться сейчас

Введение

Alder сообщает, что страница бронирования Lantern Room обработала две попытки, но только одна привела к бронированию. У команды поддержки есть разрешённая запись HTTPS и соответствующий журнал ключей TLS. Обе попытки используют одинаковые URI и соединение TCP; файл также содержит другого посетителя.

В настоящем интерфейсе Wireshark вы определите каждый прикладной результат и подготовите небольшую таблицу доказательств и полный, независимо читаемый комплект захвата. Следует пройти Read Your Authorized HTTPS Session или уже знать настройку журнала ключей TLS и Follow TLS Stream. Также нужны простой ввод команд и понимание путей. Работа независимо предоставляет собственные контролируемые записи; оценка продолжительности учитывает чтение и обычные ошибки.

Сопоставьте каждую попытку с её прикладным результатом

На этом шаге вы свяжете каждый исходный кадр запроса с его собственным полным ответом и запишете оба результата.

Начните в Desktop → Applications → Terminal Emulator. Откройте подготовленный входной файл в пустом профиле Booking:

wireshark -C Booking /home/labex/project/booking/input/casebook.pcapng

Разверните Wireshark. Два входных файла только для чтения — casebook.pcapng и casebook.keys; все результаты сохраняются в /home/labex/project/booking/output/. Данные синтетические, но каждое рукопожатие TLS, обмен HTTP и сегмент TCP созданы настоящим контролируемым локальным приложением.

В Edit → Preferences → Protocols → TLS задайте (Pre)-Master-Secret log filename:

/home/labex/project/booking/input/casebook.keys

Оставьте включёнными обе настройки сборки TLS и нажмите OK. Журнал позволяет расшифровать эти записанные сеансы; он не является универсальным ключом для всех соединений HTTPS.

Посетитель Адрес клиента Область анализа
alder 127.0.0.22 Обе попытки бронирования paper-lantern, которые нужно объяснить
birch 127.0.0.23 Другой посетитель; исключите из передачи

Примените фильтр отображения и нажмите Enter:

ip.addr == 127.0.0.22 && http

ip.addr соответствует любому из концов соединения. && требует выполнения обоих условий: видны расшифрованные сообщения HTTP Alder в обе стороны. Ожидаются два POST и два ответа 200 OK. URI /api/bookings и поток TCP общие для обеих попыток; ни один сам по себе не определяет отдельную транзакцию.

Выберите первый POST. В средней панели сведений о пакете разверните Hypertext Transfer Protocol маленьким треугольником. Найдите [Response in frame: ...] ближе к низу. Это вычисляемое поле связывает запрос с ответом, который Wireshark действительно сопоставил с ним. В сведениях соответствующего ответа поле [Request in frame: ...] указывает обратно. Выберите связанный ответ в списке пакетов. Столбец No. содержит исходный номер кадра. Собранный HTTP может отображаться на последнем сегменте, поэтому используйте эти ссылки на кадры разбора, а не предполагайте связь соседних строк TCP.

Первый POST указывает на собственный кадр ответа

Найдите [Response in frame: 21] в развёрнутых сведениях HTTP. Эта ссылка относится к выбранному первому запросу; у второго запроса другой ответ.

Щёлкните запрос правой кнопкой и выберите Follow → TLS Stream. Прочитайте полный запрос и ответ. JSON запроса определяет attempt, workshop и slot; ответ повторяет эти значения. Прочитайте вместе accepted, reason и confirmation. Затем ниже в том же потоке прочитайте второй запрос и его ответ.

Первая попытка Alder отклонена из-за отсутствия мест: accepted равно false, reason — "session_full", confirmation — null. Повтор принят и имеет собственное подтверждение. Обе строки статуса HTTP — 200 OK: сервер обработал оба запроса, но прикладные результаты различаются. Подтверждение из другой части потока или визита Birch нельзя присвоить отклонённой попытке.

Закройте Follow кнопкой Close. Полученный фильтр потока включает всё соединение. Верните исходный фильтр Alder-и-HTTP выше, чтобы записать четыре исходных номера кадров. При составлении таблицы работайте с этим входным файлом: экспортированный файл перенумеровывает пакеты.

Подготовьте attempts.csv, небольшой индекс для передачи, который другой аналитик сможет проверить по захвату. CSV — значения, разделённые запятыми: первая строка задаёт названия столбцов, каждая следующая — одну попытку. Столбцов семь:

Столбец Значение
attempt Точное значение attempt из запроса
request_frame Исходный номер кадра POST во входном файле
response_frame Исходный номер собственного связанного кадра ответа
slot Запрошенное время, повторённое этим ответом
accepted true или false из JSON ответа
reason Точный текст причины из ответа
confirmation Подтверждение этой попытки или пустое поле для null

Переключитесь в терминал через нижнюю панель либо откройте другой Terminal Emulator, если первый занят Wireshark. Запустите подготовленный текстовый редактор:

mousepad /home/labex/project/booking/output/attempts.csv

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

attempt,request_frame,response_frame,slot,accepted,reason,confirmation

Используйте File → Save, затем закройте редактор. Проверьте наличие отдельной строки для каждой попытки и связь с собственным ответом. При опечатке снова откройте тот же файл командой выше, исправьте и сохраните. Новый захват или сброс VM не нужен. Оставьте Wireshark открытым для следующего шага.

Передайте независимо читаемый комплект доказательств

На этом шаге вы экспортируете полное целевое соединение и откроете его с передаваемым журналом ключей.

Начните в Desktop, с исходным input/casebook.pcapng в Wireshark. Таблица индексирует источник, а передаваемый захват должен содержать только полное соединение TCP Alder. Для расшифровки и сборки прикладных данных нужны рукопожатие TLS и предыдущие сегменты.

Замените фильтр отображения:

ip.addr == 127.0.0.22

Он оставляет оба направления и все протокольные уровни Alder. Выберите один расшифрованный POST, щёлкните правой кнопкой и выберите Follow → TLS Stream. Убедитесь, что обе попытки принадлежат Alder, затем закройте Follow кнопкой Close. Оставьте фильтр tcp.stream eq .... Он включает всё выбранное соединение, а не только строки HTTP.

Выберите File → Export Specified Packets. Укажите формат pcapng, диапазон Displayed и All packets внутри отображаемого набора. Сохраните:

/home/labex/project/booking/output/evidence.pcapng

Экспорт всего отображаемого соединения

Диалог показывает Displayed и All packets с 38 целевыми пакетами. Исходный файл содержит 65 пакетов: выбор Captured включил бы и другого посетителя.

Не используйте Export Packet Dissections, экспортирующий сводки. Не экспортируйте только строки http: они могут исключить рукопожатие или предыдущие сегменты TLS/TCP, необходимые для расшифровки и сборки. Не встраивайте секреты через Inject TLS Secrets; комплект использует отдельный журнал ключей.

Переключитесь в Terminal Emulator и скопируйте разрешённый журнал рядом с результатом. cp копирует первый путь во второй, сохраняя исходный входной файл, а не переименовывая его.

cp /home/labex/project/booking/input/casebook.keys /home/labex/project/booking/output/booking.keys

Учебная передача остаётся в той же разрешённой области анализа. Предоставленный журнал содержит секреты синтетических сеансов исходной записи; минимизация или удаление отдельных записей журнала не входят в упражнение. Сам захват всё равно должен исключать пакеты Birch. Эквивалентные соответствующие журналы допустимы, если независимо расшифровывают оба полных целевых ответа.

Закройте главное окно Wireshark, затем откройте настоящий экспортированный файл в изначально пустом профиле BookingReview:

wireshark -C BookingReview /home/labex/project/booking/output/evidence.pcapng

В Edit → Preferences → Protocols → TLS задайте (Pre)-Master-Secret log filename равным выходному журналу ниже и нажмите OK:

/home/labex/project/booking/output/booking.keys

Примените http, затем откройте POST через Follow → TLS Stream. Снова прочитайте оба полных запроса и ответа. Экспорт должен показывать отказ и подтверждение Alder с собственными значениями attempt, без визита Birch. Он должен работать с выходным журналом, не завися незаметно от исходного пути ключей.

Настоящий экспортированный файл открывается с обоими полными результатами

Прочитайте повторённый attempt рядом с каждым результатом: отказ не имеет подтверждения, а только повтор имеет ALDER-02-CONF. Заголовок показывает выходной файл evidence.pcapng.

Закройте Follow и очистите фильтр, чтобы проверить наличие рукопожатия и остальных пакетов TCP. В этом файле собственная нумерация кадров; ссылки attempts.csv должны оставаться на исходные входные кадры. Закройте главное окно.

Если выходной файл пуст или тело неполно, откройте источник, восстановите фильтр полного соединения Alder и повторите Export Specified Packets с Displayed → All packets, заменив неполный результат. Если пакеты зашифрованы, исправьте путь выходного журнала в настройках TLS. Это разные проблемы: отсутствие ключей мешает расшифровке, а недостающие захваченные сегменты нельзя восстановить изменением настройки.

Передаваемый результат — три настоящих файла: attempts.csv, evidence.pcapng и booking.keys. Захват и ключи должны независимо подтверждать таблицу. Снимок экрана или напечатанное утверждение об успехе не заменяют настоящие пакеты.

Резюме

Вы различили два прикладных результата с одинаковыми кодами HTTP, сопоставили каждый запрос с собственным ответом и записали исходные ссылки на кадры в краткой таблице. Вы экспортировали всё целевое соединение TCP и открыли настоящий результат с отдельным журналом ключей.

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