
Netcat es una de las herramientas más potentes y flexibles que existen en el campo de la programación, depuración, análisis y manipulación de redes y servicios TCP/IP. Es un recurso imprescindible tanto para expertos en seguridad de redes como para hackers. Esta receta incluye varios ejemplos de uso de GNU netcat.
Wikipedia: netcat es una herramienta de red originalmente desarrollada por Hobbit en 1996 y liberada bajo una licencia de software libre permisiva (no copyleft, similar a BSD, MIT) para UNIX. Posteriormente fue portada a Windows y Mac OS X entre otras plataformas. Netcat permite a través de intérprete de comandos y con una sintaxis 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). Existen muchos forks de esta herramienta que añaden características nuevas como GNU Netcat o Cryptcat.
Entre sus múltiples aplicaciones, es frecuente la depuración de aplicaciones de red. También es utilizada a menudo para abrir puertas traseras en un sistema.
Aunque netcat puede hacer muchas cosas, su función principal es muy simple:
Crea un socket con el destino indicado si es cliente, o en el puerto indicado, si es servidor.
Una vez conectado, envía por el socket todo lo que llegue en su entrada estándar y envía a su salida estándar todo lo que llegue por el socket.
Algo tan simple resulta ser extraordinariamente potente y flexible como vas a ver e continuación. Por simplicidad se utilizan conexiones locales aunque, por supuesto, se pueden utilizar entre máquinas diferentes.
dijo:netcat
bash (o equivalente)
utilidades GNU básicas
dijo:nc [-options] hostname port[s] [ports]
nc -l -p port [-options] [hostname] [port]
dijo:-l: modo ‘listen’, queda a la espera de conexiones entrantes.
-p: puerto local
-u: modo UDP
-e: ejecuta el comando dado después de conectar
-c: ejecuta órdenes de shell (hace /bin/sh -c [comando] después de conectar
Servidor
dijo:$ nc -l -p 2000
Cliente
dijo:$ nc localhost 2000
La instancia de nc que escucha recibe el fichero. El receptor ejecuta:
dijo:$ nc -l -p 2000 > fichero.recibido
Y el emisor:
dijo:$ nc localhost 2000 < fichero
Ponemos un servidor que ejecuta cat de modo que devolverá todo lo que se le envíe.
dijo:$ nc -l -p 2000 -e /bin/cat
Y en otra consola:
dijo:$ nc localhost 2000
hola
hola
…
Exactamente lo mismo que el ejemplo anterior pero ejecutando date en lugar de cat.
dijo:$ nc -l -p 2000 -e /bin/date
Y en otra consola:
dijo:$ nc localhost 2000
lun feb 23 21:26:48 CET 2004
Servidor
dijo:$ nc -l -p 2000 -e /bin/bash
Cliente
dijo:$ nc localhost 2000
En esta ocasión es el cliente quien pone el terminal remoto.
Servidor
dijo:$ nc -l -p 2000
Cliente
dijo:$ nc server.example.org 2000 -e /bin/bash
dijo:$ nc irc.freenode.net 6666
NOTICE AUTH :*** Looking up your hostname…
NOTICE AUTH :*** Found your hostname, welcome back
NOTICE AUTH :*** Checking ident
NOTICE AUTH :*** No identd (auth) response
NICK nadie
USER nadie nadie nadie :nadie
:kubrick.freenode.net 001 nadie :Welcome to the freenode IRC Network nadie
:kubrick.freenode.net 002 nadie :Your host is kubrick.freenode.net[kubrick.freenode.net/6666], running version hyperion-1.0.2b
[…]
y a partir de ahí puedes introducir cualquier comando de IRC:
dijo:LIST
JOIN #canal
PART #canal
PRIVMSG #canal :mensaje
WHO #canal
QUIT
Podemos usar netcat para enviar correo electrónico por medio de un servidor SMTP, utilizando el protocolo directamente:
dijo:~$ nc mail.servidor.com
220 mail.servidor.com ESMTP Postfix
HELO yo
250 mail.servidor.com
MAIL FROM:[email protected]
250 Ok
RCPT TO:[email protected]
250 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Aviso: su licencia ha caducado. Me deben un pastón.
.
250 Ok: queued as D44314A607
QUIT
221 Bye
Es sencillo conseguir un cliente y un servidor HTTP rudimentarios.
Servidor
dijo:$ nc -l -p http -c “cat index.html”
Al cual podemos conectar con cualquier navegador HTTP, como por ejemplo firefox.
Cliente
dijo:$ echo “GET /” | nc www.google.com 80 > index.html
Un sencillo ejemplo para hacer streaming de un fichero .mp3:
Servidor
dijo:$ nc -l -p 2000 < fichero.mp3
y para servir todos los .mp3 de un directorio:
dijo:$ cat *.mp3 | nc -l -p 2000
Cliente
dijo:$ nc server.example.org 2000 | madplay –
Servidor
dijo:$ nc -l -p 2000 < pelicula.avi
Cliente
dijo:$ nc server.example.org 2000 | mplayer –
Sirva para redirigir una conexión a otro puerto u otra máquina:
dijo:$ nc -l -p 2000 -c “nc example.org 22”
La trafico recibido en el puerto 2000 de esta máquina se redirige a la máquina example.org:22. Permite incluso que la conexión entrante sea UDP pero la redirección sea TCP o viceversa!
Esto se debe usar con muchísima precaución. ¡Si no estás 100% seguro, no lo hagas! No digas que no te avisé.
Es este ejemplo voy a copiar un pen drive USB que está conectado al servidor a un fichero en el cliente y después lo voy a montar para acceder al contenido.
Servidor
dijo:$ dd if=/dev/sda1 | nc -l -p 2000
Cliente
dijo:$ nc server.example.org 2000 | dd of=pendrive.dump
$ mount pendrive.dump -r -t vfat -o loop /mnt/usb
Es decir, usar el ratón conectado a una máquina para usar el entorno gráfico de otra. El ejemplo está pensado para Xorg.
Servidor
dijo:# nc -l -p 2000 < /dev/input/mice
Cliente
Editar el fichero /etc/X11/xorg.conf y modificar la configuración del ratón para que queda así:
dijo:Section "InputDevice"
Driver "mouse"
...
Option "Device" "/tmp/fakemouse"
....
EndSection
dijo:$ mkfifo /tmp/fakemouse
$ nc server.example.org 2000 > /tmp/fakemouse
# /etc/init.d/gdm restart
Servidor
dijo:$ nc -l -p 2000 | pv > /dev/null
Cliente
dijo:$ nc server.example.org 2000 < /dev/zero
Funciona en impresoras que soporten el estándar AppSocket/JetDirect, que son la mayoría de las que se conectan por Ethernet.
dijo:$ cat fichero.ps | nc -q 1 nombre.o.ip.de.la.impresora 9100
dijo:$ nc towel.blinkenlights.nl 23



Por defecto generalmente y en la inmensa mayoría de los casos, esta increible herramienta se encuentra en los repos oficiales de cada distribución, así que solo deberan buscarla e instalarla mediante el gestor de paquetes específico para su distro.

dijo:
The GNU Netcat project
Netcat – network connections made easy
Play with the Lovely Netcat
Usando la herramienta netcat en GNU/Linux. La navaja suiza del protocolo TCP/IP
Netcat o nc
Tutorial de netcat