Hidden coordinates

توضیحات چلنج

Jack Sparrow may be searching for treasure, but he’ll never find the map if he can't decipher the signals. Buried within a seemingly ordinary pcap file are hidden details encoded in ICMP packets. Unearth the secrets concealed in these packets to reveal the flag.

یک فایل packet capture بهمون داده شده که باید فلگ رو از داخلش در بیاریم

wireshark screen of packet capture with some tcp and mdns and quic and tls PDUs

طبق گفته چلنج احتمالا فلگ داخل پیام های ICMP مخفی شده ،ولی بهتره به استراتژی همیشگی بچسبیم و اول ببینیم پیامی هست که رمز نگاری و مخفی نشده باشه

مثل همیشه اول روی فلگ پوش TCP فیلتر میزاریم که ببینیم چی دستمون میاد

wireshark screen of tcp and tls PDUs

کلی پیام TLS داریم میبینیم که فعلا استفاده ای برامون ندارن پس فیلترشون میکنیم که نبینیمشون

wireshark screen of tcp retransmissions

خب مثل اینکه از TCP چیزی در نمیاد فعلا

خب بریم سر ICMP ببینیم چیزی دستمون رو میگیره یا نه

wireshark screen of icmp PDUs

ICMP payload

یکی از قسمت هایی که خیلی خیلی مهمه payload داخل ICMP هست که برای 2 tunneling و در کل انتقال دیتا استفاده میشه چون سادس

خب ما که به پکت های ICMP نگاه میکنیم میبینیم کلا دو جور payload دارن این پیاما

  • datadatadatadata

  • abcdefghijklmnopqrstuvwabcdefghi

برنامه هایی که پینگ میگیرن معمولا اگه ازشون بخوای که یسری دیتا هم بفرستن که پینگ کردن یکم سنگین تر شه میان به ترتیب حروف الفبای انگلیسی میچینن payload رو

پس میتونیم با قاطعیت بگیم اونایی که payload دومی رو دارن متعلق به نرم افزار پینگ استانداردن

با فیلتر کردن ICMP هایی که پیلود abcdefghijklmnopqrstuvwabcdefghi رو دارن رو حذف میکنیم

wireshark screen of icmp PDUs

خب اگه درست جلو اومده باشیم فلگ جاهای محدودی میتونه باشه

باید بگردیم داخل فیلد های مختلف پکت که دیتا ممکنه داخلشون مخفی شده باشه

ICMP sequence number دیتایی نداشت

ICMP checksum هم نمیتونه مهم باشه چون مقدار درستی داره

تصور اینکه اینقدر خوب پکت رو درست کرده باشن که از checksum فلگ در بیاد دور از انتظاره

فیلد ttl از هدر IP داخل پیام هایی که از سمت 192.168.1.50 میاد خیلی مشکوکه

ولی قبلش باید یه مقدمه بهتون بگم از ttl

Ttl

ttl یک فیلد داخل IPv4 هست که نشون میده پکت حق داره چند بار توسط روتر forward شه

حواستون باشه این با forward کردن توی سویچ های link layer فرق داره

و هر دفعه که forward میشه router یکی از ttl پکت کم میکنه

یسری router ها به دلایل امنیتی اینکار رو نمیکنن

وقتی به صفر برسه router اون پکت رو drop میکنه

تقریبا همیشه دستگاه فرستنده این فیلد رو یکی از اینا ست میکنه

64, 128, 255

دستگاه 192.168.1.50 مقدار ttl رو به صورت استاندارد ست نمیکنه

از کجا میدونیم؟

چون پکت کپجر روی این دستگاه انجام شده و باید داخل ttl یکی از اعداد 255،128،64 رو میدیدیم

از کجا میدونیم پکت کپچر روی 192.168.1.50 انجام شده؟

وقتی به پیام های عادی که از سمت 192.168.1.50 هستن نگاه میکنیم میبینیم که ttl=128 دارن یعنی هنوز یکبار هم forward نشدن

پس ما 192.168.1.50 هستیم

فرمت فلگ uctf{} هست و ttl پیام اول فیلتر شده 117 که مطابق کد اسکی u هست که میشه کاراکتر اول فلگ

پیام هایی که فیلتر کردیم رو با وایرشارک export میکنیم و با این برنامه فلگ رو به دست میاریم

from scapy.all import *
pcap = rdpcap("icmp.pcapng")
for packet in pcap:
         #if is not icmp echo request, skip the packet
     if packet[ICMP].type != 8:
         continue
     #print ttl of IP layer
     print(chr(packet[IP].ttl), end='')
FLAG 🚩

uctf{Iran_K4run_River}

نویسنده

Ali