追踪失败的预约尝试及其重试

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 匹配任一端点。&& 表示两个条件必须同时成立,因此视图包含 Alder 双向已解码 HTTP 消息。应看到两个 POST 请求与两个 200 OK 响应。两次尝试共用请求 URI /api/bookings 及 TCP 流;单独使用其中任一个都不能唯一标识一笔事务。

选择第一个 POST 请求。在中间数据包详情面板中,点击小三角展开 Hypertext Transfer Protocol。阅读靠近底部的 [Response in frame: ...]。这个生成字段把此请求链接到 Wireshark 实际配对的响应。相应响应的协议详情中,[Request in frame: ...] 指回请求。通过数据包列表选择关联响应。No. 列给出原始帧号。重组后的 HTTP 可能显示在最后一个分段上,因此应使用这些解析帧引用,不要根据相邻 TCP 行猜测。

第一个 POST 指向其自己的响应帧

查看展开的 HTTP 详情中的 **[Response in frame: 21]**。此链接属于选定的第一个请求;第二个请求有不同的响应。

右击请求并选择 Follow → TLS Stream。阅读完整请求及其响应。请求 JSON 标识 attempt、workshop 和 slot。响应回显这些值。结合阅读 accepted、reason 和 confirmation。然后继续向下阅读同一流中的第二个请求与响应。

Alder 第一次尝试因场次已满而被拒绝:accepted 为 false,reason 为 "session_full",confirmation 为 null。重试被接受,并有它自己的确认码。两个 HTTP 状态行都是 200 OK:服务器处理了两个请求,但业务结果不同。此流中其他位置或 Birch 访问中的确认码不能借给被拒绝的尝试。

用 Close 关闭 Follow。它留下的流过滤器包含整条连接。返回上面的 Alder 与 HTTP 组合过滤器,记录四个原始帧号。整个表格练习始终使用这个输入文件;导出文件会重新编号数据包。

准备 attempts.csv,作为另一位分析人员能对照抓包核验的交接索引。CSV 指逗号分隔值:一行表头命名各列,此后每行代表一次尝试。共有七列:

列 含义
attempt 请求中精确的 attempt 值
request_frame 原输入中对应 POST 的帧号
response_frame 原输入中其自己的关联响应帧号
slot 请求的场次,响应也会回显
accepted 响应 JSON 中的 true 或 false
reason 响应中精确的原因文本
confirmation 此尝试的确认码,null 时留空

通过底部面板切换到终端;如果第一个仍被 Wireshark 占用,打开另一个 Terminal Emulator。启动已准备的文本编辑器:

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

准确输入以下表头,再输入从原始抓包读出的两行。不要把单词 null 写入 confirmation 列:拒绝行以逗号结束,表示最后一个字段为空。这些数据值均不含逗号,因此无需给 CSV 字段加引号。只要表头与值匹配,行与列的顺序均可变化。

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

使用 File → Save 并关闭编辑器。检查每个不同尝试恰有一行,且都指向自己的响应。如果值输错,用上述命令重新打开同一文件、编辑并保存。拼写错误不需要重新抓包或重置 VM。保持 Wireshark 打开,继续下一步。

交付可独立阅读的证据包

本步骤将导出完整目标连接,并用交付的密钥日志重新打开它。

从 Desktop 开始,Wireshark 应打开原始 input/casebook.pcapng。表格索引指向源文件,而交接抓包必须仅包含完整的 Alder TCP 连接。解密与重组应用数据需要 TLS 握手及先前分段。

把显示过滤器替换为:

ip.addr == 127.0.0.22

它保留 Alder 的双向流量和所有协议层。选择其中一个已解码 POST,右击并选择 Follow → TLS Stream。确认两个尝试均属于 Alder,再用 Close 关闭 Follow。保留它留下的 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 连接过滤器,再以 Displayed → All packets 重复 Export Specified Packets,替换不完整输出。如果数据包仍加密,修正 TLS 首选项中的输出密钥路径。这是两类问题:缺密钥会阻止解密,缺失的抓包分段无法通过修改首选项重新生成。

交接成果由三个真实文件组成:attempts.csv、evidence.pcapng 和 booking.keys。抓包与密钥必须能独立支撑表格。截图或输入一句成功声明不能替代实际数据包证据。

总结

你区分了相同 HTTP 状态码承载的两个业务结果,将每个请求与自己的响应配对,并把原始帧引用记录到简洁证据表。你导出了完整目标 TCP 连接,并使用单独密钥日志重新打开实际输出。

这份三文件交接成果无需你的 Wireshark 配置即可核验。它证明这些受控预约交换所报告的结果,不能证明生产支付、库存更新或服务器内部缺陷。