A digital identity inspired by Oman was transmitte...

생성일: 2026년 7월 14일

답변에 사용된 모델 GPT-5.6 Thinking by Chat01

질문

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

사고

undefined

사고

undefined

사고

undefined

사고

undefined

사고

undefined

사고

undefined

사고

bash -lc cat > /mnt/data/Echoes_of_Oman_CTF/WRITEUP.md <<'MD'

Echoes of Oman — Writeup

  • Category: Network Forensics / Wireshark / Steganography
  • Difficulty: Hard
  • Flag: 1940{0M4N1_N3TW0RK_H1DD3N_M3SS4G3}

1. Tổng quan

Capture chứa hàng nghìn packet mồi. Luồng có ý nghĩa xuất hiện gần cuối file, chủ yếu giữa:

  • Sender: 10.40.19.77
  • Receiver: 10.40.19.200

Chuỗi giải gồm bốn lớp:

  1. DNS transaction ID tạo session token.
  2. ICMP mang manifest đã chia mảnh và Base64.
  3. HTTP chỉ ra cách phục hồi artifact; TCP/4919 truyền JPEG theo nhiều stream.
  4. Bốn key fragment nằm trên DNS, ICMP, HTTP và TCP; ghép thành passphrase để giải steghide.

2. DNS transaction ID → MUSCAT-1940

Filter Wireshark:

text
dns.qry.name contains "stage-" && ip.src == 10.40.19.77 && ip.dst == 10.40.19.200

Các query stage-* có DNS transaction ID là mã ASCII:

FrameQueryDNS IDASCII
3221stage-a7.archive.oman-lab.local77M
3225stage-c2.archive.oman-lab.local85U
3228stage-f9.archive.oman-lab.local83S
3232stage-b3.archive.oman-lab.local67C
3236stage-d1.archive.oman-lab.local65A
3240stage-e5.archive.oman-lab.local84T
3243stage-g8.archive.oman-lab.local45-
3247stage-h2.archive.oman-lab.local491
3251stage-k6.archive.oman-lab.local579
3256stage-m4.archive.oman-lab.local524
3260stage-p0.archive.oman-lab.local480

Đọc theo thứ tự packet:

text
MUSCAT-1940

Đây là session token, chưa phải mật khẩu stego cuối.


3. ICMP fragments → đường dẫn manifest

Ngay sau DNS là các ICMP Echo Request có identifier 0x1940. Packet thật có marker:

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

Filter gợi ý:

text
icmp.ident == 0x1940 && ip.src == 10.40.19.77 && ip.dst == 10.40.19.200

Các frame thật là 3263, 3266, 3272, 3275, 3278, 3283. Lấy phần sau D:, sắp theo chỉ số 2 byte cuối, nối lại rồi Base64 decode:

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

Vậy cần gửi HTTP request tới /heritage/manifest.dat với session MUSCAT-1940.


4. HTTP manifest → TCP port 4919

Frame 3290:

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

Body response frame 3291 là chuỗi hex. Hex decode được:

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

Request /heritage/verify.info tiếp theo trả header:

text
X-Artifact-SHA256: c2414ac003839cc226b4300affb34c696a59cd487ee267a118767068920d3587

5. Phục hồi oman_archive.jpg

Filter:

text
tcp.dstport == 4919 && ip.src == 10.40.19.77 && ip.dst == 10.40.19.200

Có nhiều stream mồi bắt đầu bằng XYZ, nhưng stream thật bắt đầu bằng header 9 byte:

text
Offset Size Ý nghĩa 0 3 "OMN" 3 1 chunk index 4 1 total chunks 5 4 payload length, big-endian 9 ... payload

Có 9 chunk, index 0..8. Reassemble từng TCP stream, bỏ header OMN, sắp theo index rồi nối payload:

text
oman_archive.jpg — 349052 bytes

Kiểm tra:

bash
sha256sum oman_archive.jpg

Kết quả:

text
c2414ac003839cc226b4300affb34c696a59cd487ee267a118767068920d3587 oman_archive.jpg

Hash trùng hoàn toàn với header HTTP, xác nhận artifact được dựng đúng.


6. Ghép mật khẩu steghide từ bốn protocol

Sau khi truyền JPEG, capture phát bốn KEYFRAG:

#Protocol / FrameGiá trị lấy đượcBiến đổiKết quả
1DNS TXT / 36571:776540hex decodewe@
2ICMP / 3658KEYFRAG:2:YXJlQA==Base64 decodeare@
3HTTP Cookie / 3661keyfrag=3:bznav@ROT13omani@
4TCP/4919 / 3665CTRL:4:maetreverseteam

Ghép theo index:

text
we@ + are@ + omani@ + team

Passphrase cuối:

text
we@are@omani@team

7. Extract payload steghide

Dùng steghide:

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

File được trích xuất:

text
final_identity.txt

Nội dung:

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

Flag

text
1940{0M4N1_N3TW0RK_H1DD3N_M3SS4G3}

8. Chạy solver tự động

solve.py đi toàn bộ pipeline: parse PCAP, giải DNS/ICMP/HTTP, reassemble TCP, xác minh SHA-256, dựng JPEG, ghép passphrase và extract payload steghide.

bash
python3 solve.py Echoes_of_Oman.pcapng -o recovered

Output cuối:

text
DNS token : MUSCAT-1940 Artifact SHA-256: c2414ac003839cc226b4300affb34c696a59cd487ee267a118767068920d3587 Key fragments : ('we@', 'are@', 'omani@', 'team') Stego passphrase: we@are@omani@team Embedded file : final_identity.txt FLAG : 1940{0M4N1_N3TW0RK_H1DD3N_M3SS4G3}

MD cp /mnt/data/Echoes_of_Oman_CTF/recovered_by_solver/final_identity.txt /mnt/data/Echoes_of_Oman_CTF/final_identity.txt cd /mnt/data/Echoes_of_Oman_CTF && sha256sum oman_archive.jpg recovered_by_solver/oman_archive.jpg final_identity.txt solve.py WRITEUP.md rm -f /mnt/data/Echoes_of_Oman_solution.zip cd /mnt/data/Echoes_of_Oman_CTF && zip -q /mnt/data/Echoes_of_Oman_solution.zip WRITEUP.md solve.py oman_archive.jpg final_identity.txt ls -lah /mnt/data/Echoes_of_Oman_solution.zip /mnt/data/Echoes_of_Oman_CTF/WRITEUP.md /mnt/data/Echoes_of_Oman_CTF/solve.py /mnt/data/Echoes_of_Oman_CTF/final_identity.txt

Thought for 19m 45s

답변

Flag

text
1940{0M4N1_N3TW0RK_H1DD3N_M3SS4G3}

Chuỗi giải:

text
DNS IDs → MUSCAT-1940 ICMP fragments → HTTP manifest HTTP manifest → TCP/4919, 9 chunk OMN TCP reassembly → oman_archive.jpg KEYFRAGs → we@ + are@ + omani@ + team Steghide passphrase → we@are@omani@team

Payload cuối là final_identity.txt:

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

File kết quả

이 Q&A 공유하기