TraceBash 2026 — The Silent Echo Çözüm Yazısı

DNS gürültüsü, aldatıcı bir ICMP seli ve sahte bir SSH oturumu gibi görünen küçük bir yakalama. Gerçek mesaj kimsenin bakmadığı iki başlık alanında gizli: ICMP yankılarının IP kimlik alanı ve bir HTTP akışının TCP pencere boyutu.

3 dk okuma
ibrahimsql
463 kelime

TraceBash 2026 — The Silent Echo

Gizli kanallar üzerine bir ağ adli bilişim sorusu: görünen her şey aldatmaca, bayrak ise normalde göz ardı ettiğiniz başlık alanlarında yaşıyor.

  • Etkinlik: TraceBash 2026
  • Kategori: Adli Bilişim (Forensics)
  • Dosya: the_silent_echo.zip → challenge.pcap
  • Bayrak formatı: TBCTF{...}

1. Üç konuşma, üçü de şüpheli

Yakalama yalnızca 106 paket. Protokole göre ayırdığınızda üç ayrı hikâye çıkıyor:

DNS   25 paket   ubuntu.com, github.com, stackoverflow.com, microsoft.com, google.com sorguları
ICMP  32 paket   192.168.1.111 <-> 10.0.0.222, echo istek/yanıt, yük "AAAA..."
TCP   49 paket   iki HTTP akışı ve bir "SSH" akışı

Üçü de normal trafik kılığına girmiş birer yanıltmaca. ICMP yükü her pakette 32 baytlık A harfi — hiçbir şey taşımayan bir "sessiz yankı". DNS sorguları hiçbir adı çözmüyor ve işlem kimliği olarak 0 kullanıyor. 22 portundaki "SSH" akışı ise SSH değil:

SSH-2.0-OpenSSH_8.2p1\r\nTm90aGluZyBoZXJlLCBrZWVwIGxvb2tpbmcu\n

Son satır base64:

>>> base64.b64decode("Tm90aGluZyBoZXJlLCBrZWVwIGxvb2tpbmcu")
b'Nothing here, keep looking.'

Sizi tam anlamıyla "bakmaya devam et" diyen bir yanıltmaca. Demek ki yükler boş — veri başlıklarda olmalı.

2. Göründüğü gibi olmayan iki HTTP akışı

Text
GET /api/v1/status HTTP/1.1          -> 10.0.0.80:80
    User-Agent: Mozilla/5.0 ID-Check/1.0
    X-Window-Trace: enabled
 
GET /downloads/ubuntu-22.04.iso      -> 10.0.0.88:80
    (yanıt: 2304 bayt saf sıfır)

ubuntu-22.04.iso indirmesi, sıfırlanmış baytlardan oluşan 18 segment — dosya sistemi yok, veri yok, bir yanıltmaca daha. Ama istek akışı öyle değil: istemci 192.168.1.122 ve X-Window-Trace: enabled başlığı ipucunun kendisi. İki özel başlık da gizli kanalları adlandırıyor: IP ID ve TCP window.

3. Birinci kanal — IP kimlik alanı

Her ICMP echo isteğinin rastgele görünen bir IP id alanı var. Rastgele değil. 16 bitlik bu değerin üst baytı bir karakter:

Python
from scapy.all import rdpcap, IP, ICMP
 
pk = rdpcap("challenge.pcap")
part1 = "".join(chr(p[IP].id >> 8) for p in pk
                if ICMP in p and p[ICMP].type == 8)
# 'TBCTF{h1dd3n_1n_'

On altı istek, on altı karakter; her biri çoğu aracın yalnızca ondalık bir sayı olarak gösterdiği bir alanın üst baytında gizli.

4. İkinci kanal — TCP pencere boyutu

İkinci akıştaki HTTP istemcisi, duyurduğu pencereyi hiç "normal" bir değerde göndermiyor. Tüm ACK'leri varsayılan 8192'nin biraz üzerinde oturuyor; bu tabanı çıkarınca kalan değer bir ASCII kodu:

Python
part2 = "".join(chr(p[TCP].window - 8192) for p in pk
                if IP in p and TCP in p and p[IP].src == "192.168.1.122"
                and p[TCP].dport == 80 and p[TCP].window != 8192)
# 'w1nd0w_4nd_1p_1d!}'

Sunucu tarafı sabit 65535 penceresiyle yanıtlıyor; dolayısıyla yalnızca istemcinin değişken penceresi önemli. İki kanalı birleştirmek bayrağı tamamlıyor.

5. Mesajı yeniden birleştirmek

print(part1 + part2)
# TBCTF{h1dd3n_1n_w1nd0w_4nd_1p_1d!}

6. Bayrak

TBCTF{h1dd3n_1n_w1nd0w_4nd_1p_1d!}

Gizli kanalın tüm amacı şu: başlık metadatasıdır, kimse ona bakmaz. Burada paket gövdeleri bilinçli bir gürültü geçit töreniydi ve cevap iki alana bölünmüştü — ICMP yankılarının IP id'si ve HTTP istemcisinin penceresi — ki çoğu yakalama aracı bunları hiç kaydırmadığınız tek bir sütunda özetler.

---
Bu yazıyı paylaş:
TwitterLinkedInFacebook

Ne düşünüyorsun?

Tepki bırakarak geri bildirim ver

İlgili Yazılar