186 words
1 minute
TCTT25 Network: Whisper in the Wire

Whispers in the Wire (200pts) - Network Security Write-up#

โจทย์#

ฐานทัพไซเบอร์แห่งใหม่เพิ่งถูกสร้างขึ้นโดยประเทศเพื่อนบ้าน พวกเขาใช้ระบบควบคุมแบบ gRPC over HTTP/2 เพื่อซ่อนคำสั่งลับและข้อมูลสำคัญระหว่าง นักวิจัยและเซิร์ฟเวอร์ทดสอบอาวุธ

แต่โชคดี ที่หน่วยไซเบอร์ของเราได้ แอบเก็บ ไฟล์ PCAP ที่บันทึกการสื่อสารได้มาแล้ว 🎧

แรก ๆ มันดูเหมือนข้อมูลไร้ค่า ที่อ่านไม่ออกทันที, ข้อความยังดูเหมือนอาจจะถูกบีบอัดด้วย zlib ไว้ อีกต่างหาก…

อย่างไรก็ตาม มีข่าวลือว่า ข้อความตอบกลับจาก ซ่อน flag เอาไว้! 🏴‍☠️

ภารกิจของคุณคือแกะรอยจากไฟล์ PCAP เพื่อดึง flag ที่ถูกซ่อนอยู่ให้ได้


ดาวน์โหลดไฟล์#

ไฟล์ดาวน์โหลด
PCAP + Script📦 GitHub Folder

ข้อสังเกต#

  1. gRPC วิ่งบน HTTP/2 ทำให้การตามสตรีม (Follow TCP Stream) ปกติอ่านยาก
  2. ข้อมูลที่ซ่อนน่าจะถูกบีบอัดด้วย zlib
  3. zlib มักขึ้นต้นด้วยไบต์ 78 01, 78 5E, 78 9C หรือ 78 DA
  4. ดังนั้นเราสามารถกวาดตำแหน่งเหล่านี้ในไฟล์ PCAP ได้ แล้วลองถอด (decompress) เพื่อหาข้อความที่อ่านออก

แนวคิดการแก้โจทย์#

  1. เปิดไฟล์ .pcapng ด้วย Python (อ่านเป็น binary ตรง ๆ)
  2. ทุกตำแหน่งว่ามีค่าเริ่มต้นตรงกับ header ของ zlib หรือไม่
  3. ถ้ามี ลอง zlib.decompress() ดู
  4. ถอดสำเร็จก็เช็กว่ามีข้อความ flag{...} อยู่หรือไม่

อธิบาย Script#

import zlib, re
PCAP = "thctt2025_open_netsec3_whisper-in-the-wire.pcapng"
ZLIB_HDRS = [b"\x78\x01", b"\x78\x5e", b"\x78\x9c", b"\x78\xda"]
def find_flag(path):
data = open(path, "rb").read()
for i in range(len(data)-2):
if data[i:i+2] in ZLIB_HDRS:
for end in range(i+10, i+5000):
try:
out = zlib.decompress(data[i:end])
m = re.search(rb"flag\{.*?\}", out)
if m:
return m.group(0).decode()
break
except:
pass
return None
if __name__ == "__main__":
flag = find_flag(PCAP)
if flag:
print("Flag found! = ", flag)
else:
print("Flag not found!")

การทำงาน:

  1. สร้าง List ค่า header ของ zlib
  2. อ่านไฟล์ทั้งหมดเป็น binary
  3. วนทุก byte เช็กว่า 2 byte ว่าตรงกับ header zlib หรือไม่
  4. ถ้าเจอ header ให้ลองขยายข้อมูลจากตำแหน่งเริ่มต้นไปเรื่อย ๆ (i+10 ถึง i+5000)
  5. ใช้ zlib.decompress() เพื่อถอดการบีบอัด
  6. ใช้ regex หา string ที่อยู่ในรูป flag{…}
  7. return ค่า flag

ผลลัพธ์#

เมื่อรัน Python Script แล้ว จะได้ Flag:

flag{fd3ca5a5acce56f112a725ce433c96e4}

Credits#

Writeup by netw0rk7 | Original Repo

TCTT25 Network: Whisper in the Wire
https://blog.lukkid.dev/posts/tctt25-network-whisper-in-the-wire/
Author
LUKKID
Published at
2025-12-13
License
CC BY-NC-SA 4.0