A digital identity inspired by Oman was transmitte...

Créé le : 14 juillet 2026

Répondu en utilisant GPT-5.6 Thinking par Chat01

Question

Echoes_of_Oman_CTF.zip

A digital identity inspired by Oman was transmitted across the network, but the data was divided and hidden among thousands of packets.

Analyze the captured traffic and recover the final identity code.

Flag Format: 1940{...}
solved challenge rồi viết writeup

Réflexion

undefined

Réflexion

undefined

Réflexion

undefined

Réflexion

undefined

Réflexion

undefined

Réflexion

undefined

Réflexion

bash -lc python3 - <<'PY' p='/mnt/data/echoes_oman/solve.py' s=open(p).read() old=''' for pkt in packets:\n data = pkt.payload\n if b"OBJECT=" in data:\n body = data.split(b"\r\n\r\n", 1)[-1].strip()\n try:\n decoded = bytes.fromhex(body.decode()).decode()\n if "OBJECT=" in decoded:\n manifest = decoded\n except (ValueError, UnicodeDecodeError):\n pass\n''' new=''' for pkt in packets:\n data = pkt.payload\n if b"\r\n\r\n" in data:\n body = data.split(b"\r\n\r\n", 1)[1].strip()\n try:\n decoded = bytes.fromhex(body.decode()).decode()\n if "OBJECT=" in decoded:\n manifest = decoded\n except (ValueError, UnicodeDecodeError):\n pass\n''' if old not in s: raise SystemExit('old block not found') s=s.replace(old,new) open(p,'w').write(s) PY python3 /mnt/data/echoes_oman/solve.py /mnt/data/echoes_oman/Echoes_of_Oman_CTF/Echoes_of_Oman.pcapng -o /mnt/data/echoes_oman/recovered_no_steg | sed -n '1,38p' sha256sum /mnt/data/echoes_oman/oman_archive.jpg /mnt/data/echoes_oman/recovered_test/oman_archive.jpg cmp -s /mnt/data/echoes_oman/extracted/final_identity.txt /mnt/data/echoes_oman/recovered_test/final_identity.txt && echo 'final_identity.txt matches'

Thought for 17m 0s

Réponse

Flag

text
1940{0M4N1_N3TW0RK_H1DD3N_M3SS4G3}

Dưới đây là writeup hoàn chỉnh:

:::writing{variant="document" id="68421"}

Echoes of Oman — Writeup

Tổng quan

Challenge cung cấp một file network capture chứa hàng nghìn packet nhiễu. Dữ liệu thật được chia thành nhiều giai đoạn:

  1. Chỉ dẫn ban đầu được phân mảnh trong ICMP.
  2. HTTP cung cấp manifest và checksum.
  3. Một ảnh JPEG được chia thành chín TCP stream.
  4. Passphrase được giấu trong bốn giao thức khác nhau.
  5. Flag nằm trong file được nhúng vào JPEG bằng steghide.

1. Triage capture

Capture có tổng cộng 3665 packet. Mặc dù tên file có phần mở rộng .pcapng, nội dung thực tế sử dụng định dạng classic PCAP.

Phần lớn traffic là nhiễu. Endpoint đáng chú ý xuất hiện gần cuối capture:

text
10.40.19.77 -> 10.40.19.200

Có thể dùng Wireshark filter:

text
ip.addr == 10.40.19.200

Các giao thức liên quan gồm ICMP, HTTP, DNS và TCP.

2. Ghép các ICMP fragment

Một nhóm ICMP payload có cấu trúc:

text
M:77474dac|D:<base64_fragment>|<2-byte index>

Trong đó:

  • 77474dac là marker cố định.
  • Phần sau D: là fragment Base64.
  • Hai byte cuối là index theo big-endian.

Sau khi sắp xếp các fragment theo index, nối chúng lại và Base64-decode, ta thu được:

text
protocol=http stream_hint=x-oman-session stream_value=MUSCAT-1940 object=/heritage/manifest.dat

Thông tin này chỉ ra rằng cần tìm một HTTP request đến:

text
/heritage/manifest.dat

với session header:

text
X-Oman-Session: MUSCAT-1940

3. Phân tích HTTP manifest

Request tương ứng:

http
GET /heritage/manifest.dat HTTP/1.1 Host: archive.oman-lab.local User-Agent: OmanExhibitClient/1.0 X-Oman-Session: MUSCAT-1940

Body của response là một chuỗi hex:

text
4f424a4543543d6f6d616e5f617263686976652e6a70670a...

Hex-decode cho kết quả:

text
OBJECT=oman_archive.jpg TRANSFER=TCP CHANNEL=4919 CHECK=SHA256

Như vậy:

  • Artifact cần phục hồi là oman_archive.jpg.
  • Dữ liệu được truyền qua TCP port 4919.
  • File hoàn chỉnh phải được xác minh bằng SHA-256.

Một response khác chứa checksum:

text
X-Artifact-SHA256: c2414ac003839cc226b4300affb34c696a59cd487ee267a118767068920d3587

4. Reassemble TCP stream trên port 4919

Có chín TCP connection truyền dữ liệu đến port 4919.

Sau khi reassemble từng connection theo TCP sequence number, mỗi stream bắt đầu bằng custom header dài 9 byte:

text
Offset Size Description 0 3 Magic "OMN" 3 1 Chunk index 4 1 Total chunks 5 4 Payload length, big-endian 9 n Chunk data

Các chunk thu được:

Source portIndexTotalLength
89810938784
331111938784
398092938784
148073938784
87584938784
641475938784
545436938784
213597938784
310268938780

Cần bỏ header OMN, sắp xếp theo chunk index từ 0 đến 8, sau đó nối payload.

File kết quả có thông tin:

text
File: oman_archive.jpg Size: 349052 bytes Magic: ff d8 ff SHA256: c2414ac003839cc226b4300affb34c696a59cd487ee267a118767068920d3587

Checksum khớp hoàn toàn với giá trị trong HTTP response, xác nhận ảnh đã được khôi phục đúng.

5. Tìm passphrase đa giao thức

Gần cuối capture xuất hiện bốn key fragment. Mỗi fragment sử dụng một phép biến đổi khác nhau.

Fragment 1 — DNS TXT

text
1:776540

Hex-decode:

text
776540 -> we@

Fragment 2 — ICMP

text
KEYFRAG:2:YXJlQA==

Base64-decode:

text
YXJlQA== -> are@

Fragment 3 — HTTP Cookie

text
keyfrag=3:bznav@

ROT13:

text
bznav@ -> omani@

Fragment 4 — TCP control

text
CTRL:4:maet

Đảo ngược chuỗi:

text
maet -> team

Ghép các fragment theo thứ tự:

text
we@ + are@ + omani@ + team

Passphrase hoàn chỉnh:

text
we@are@omani@team

6. Trích payload bằng steghide

Dùng passphrase vừa khôi phục để kiểm tra ảnh:

bash
steghide info oman_archive.jpg -p 'we@are@omani@team'

Ảnh chứa file:

text
final_identity.txt

Payload được nén và mã hóa bằng Rijndael-128 CBC.

Trích file:

bash
steghide extract \ -sf oman_archive.jpg \ -p 'we@are@omani@team' \ -xf final_identity.txt \ -f

Nội dung file:

text
Congratulations. You recovered the hidden Omani transmission. Flag: 1940{0M4N1_N3TW0RK_H1DD3N_M3SS4G3}

Flag

text
1940{0M4N1_N3TW0RK_H1DD3N_M3SS4G3}

:::

Tệp kết quả

Partager cette Q&R