Uso del comando Ncat (nc) en Linux con ejemplos

Hoy hablamos del comando ncat, también conocido como nc, una utilidad de red repleta de funciones que lee y escribe datos a través de redes, desde la línea de comandos. Una auténtica navaja suiza. Originalmente ncat fue escrito para el proyecto Nmap como mejora para el veterano Netcat.

Ncat no solo funciona con IPv4 o IPv6, sino que también proporciona al usuario una cantidad prácticamente ilimitada de usos. Como por ejemplo la capacidad de encadenar ncats; redirección de puertos TCP, UDP y SCTP a otros sitios, soporte SSL, conexiones de proxy a través de SOCKS4 o proxys HTTP.

Podemos utilizar a ncat como herramienta de escaneo de puertos, de seguridad o de monitoreo; además de como proxy TCP simple. Es muy útil para auditar la seguridad de sistemas, de servidores web, de servidores de correo, entre otros.

IMPORTANTE: Aunque se asemejan, ncat y netcat son programas diferentes. En esta página dan más detalles al respecto: Nueva herramienta de configuración de red (ncat)

Logo de Ncat

Instalación de Ncat en GNU/Linux

En una parte importante de las distribuciones como Debian ya viene preinstalada, pero en otras como Centos o RHEL, la tenemos que instalar así:

# En Centos 7 o RHEL 7
yum install nmap-ncat -y
 
# En Rocky Linux, Alma Linux o RHEL 8
dnf install nmap-ncat -y

Ejemplos de uso de Ncat

1. Ver si un puerto esta en uso

Al igual que hacen comandos como lsof o netstat, podemos utilizar ncat para saber si un puerto esta en uso, utilizando el parámetro «-l«, de la siguiente manera:

ncat -l 80

De esta manera sabemos si el puerto esta disponible para su uso.

Para muestra un botón:

Comprobamos si un puerto esta en uso

2. Conexión a un sistema remoto

Al igual que podemos hacer con el programa clásico telnet, también podemos utilizar ncat para conectar a un puerto específico de un host remoto.

ncat -v ochobitshacenunbyte.com 443

Con el resultado:

Comprobamos el uso de un puerto en un host remoto

3. Conexiones a puertos UDP

Por defecto ncat, utiliza las conexiones TCP, si queremos utilizar conexiones UDP, debemos añadir el parámetro «-u«, como sigue:

ncat -l -u 161

De esta manera veremos las conexiones al puerto 161/UDP para NET-SNMP

También lo podemos utilizar para comprobar las conexiones de un puerto remoto UDP, de esta manera:

ncat -v -u 192.168.0.200 161

4. Ncat como proxy

Ncat nos permite crear un sencillo proxy, simplemente escribiendo:

ncat -l 80 | ncat 192.168.0.200 80

De esta manera todas las conexiones que lleguen a nuestro servidor por el puerto 80, serán redirigidas de forma automática al servidor 192.168.0.200 en el puerto 80. Pero esto solo serviría de ida. Para hacer una conexión de ida y vuelta debemos utilizar otros comandos adicionales:

mkfifo 2way
ncat -l 80 0<2way | ncat 192.168.0.200 80 1>2way

5. Copiar ficheros utilizando ncat o nc

Ncat o nc, también se puede, utilizar para copiar los archivos de un sistema a otros, aunque no es lo más habitual, disponiendo de herramientas como scp o sftp. Pero como el saber no ocupa lugar, aquí viene un ejemplo.

Primero de todo nos conectamos al equipo en el que se recibirán los datos y comenzamos a utilizar nc en modo escucha:

ncat -l  80 > archivo.txt

Ahora, en el equipo desde se copiarán los datos, escribimos:

ncat 192.168.0.200 80 --send-only < data.txt

El fichero «data.txt» es el archivo que se debe enviar. Indicamos con «—send-only» que se debe cerrar la conexión una vez copiado el fichero.

6. Crear una puerta trasera utilizando ncat o nc

El comando ncat o nc, también se pueden utilizar para crear puertas traseras en nuestros sistemas. Esta técnica es muy utilizada por los cibercriminales cuando atacan a sistemas. Es importante saber como funciona este método para proteger nuestro sistema. La puerta se crearía de la siguiente manera:

ncat -l 8000 -e /bin/bash

Utilizando el parámetro «-e» adjuntamos bash al puerto 8000. Ahora un cliente podrá conectarse a dicho puerto en el servidor y tendrá acceso completo a nuestro sistema, a través de bash. Simplemente escribiendo, por ejemplo:

ncat 192.168.0.200 8000

7. Redirección de puertos utilizando ncat o nc

Podemos usar ncat o nc para el reenvío de puerto, usando el parámetro «-c«, de la siguiente manera, a modo de ejemplo de uso:

ncat -u -l  80 -c  'ncat -u -l 8180'

De esta manera redirigimos todo el tráfico del puerto 80 al puerto 8180

Fuentes consultadas

Página de man de Ncat en Linux.die.net

Página de ncat en la web de nmap