Netcat
Netcat (nc) es la "navaja suiza" de las redes TCP/UDP: abre, escucha y mueve datos crudos por un socket sin ningún protocolo por encima. En una máquina lees o escribes en un puerto como si…
Qué es
Netcat (nc) es la “navaja suiza” de las redes TCP/UDP: abre, escucha y mueve datos crudos por un socket sin ningún protocolo por encima. En una máquina lees o escribes en un puerto como si fuera un fichero, y eso lo convierte en la herramienta de referencia para reverse y bind shells, transferencias rápidas y pruebas de conectividad.
Conviven varias implementaciones incompatibles en detalles: la de OpenBSD (la habitual en Linux, sin -e por seguridad), la GNU netcat, y Ncat del proyecto Nmap, que añade TLS y control de acceso. Saber cuál tienes delante evita la mitad de los problemas.
Para qué sirve
- Escuchar una conexión entrante (el lado atacante de una reverse shell).
- Conectarse a un puerto que ya sirve una shell (bind shell).
- Transferir un fichero entre dos máquinas sin montar nada.
- Comprobar a mano si un puerto responde y qué banner devuelve.
Cuándo usarla
- En la fase de explotación, para recibir la primera shell tras un RCE.
- En enumeración, para hablar con un servicio en texto plano (HTTP, SMTP, FTP) y ver cómo responde.
- Cuando necesitas mover datos entre hosts y no hay SSH ni SCP disponibles.
Instalación
# Debian/Ubuntu (variante OpenBSD)sudo apt install netcat-openbsd
# Ncat viene con Nmapsudo apt install nmapUso (comandos comunes)
# Listener para una reverse shellnc -lvnp 443
# Conectar a una bind shellnc TARGET_IP 4444
# Banner grabbing de un servicionc -v TARGET_IP 25
# Transferir un fichero (receptor y emisor)nc -lvnp 9001 > salida.bin # receptornc TARGET_IP 9001 < fichero.bin # emisor
# Ncat con TLS y sin las limitaciones del nc clásiconcat --ssl -lvnp 443Estabilizar la shell
Una shell de nc llega “cruda”: sin control de trabajos, sin Ctrl-C sin matar la sesión, sin autocompletado. El truco habitual:
# En la víctima, una vez dentropython3 -c 'import pty; pty.spawn("/bin/bash")'# Ctrl-Z para suspender, y en tu terminal:stty raw -echo; fg# de vuelta en la shell:export TERM=xtermPitfalls / Errores comunes
- La opción
-e(ejecutar un binario al conectar) no existe en la variante OpenBSD por motivos de seguridad. Si un tutorial la usa, o tienes GNU netcat, o necesitas Ncat, o el truco del named pipe. - Las shells de netcat son inestables por defecto: sin TTY, se cuelgan con cualquier programa interactivo.
- El tráfico va en texto plano: cualquiera que capture la red ve tu shell entera. Ncat con
--ssllo resuelve.
Integración con otras notas
- Conceptos: Shells (Reverse and Bind).
- Alternativa más robusta: Socat.
Referencias
- Manual de Ncat — https://nmap.org/ncat/
nc(1)de OpenBSD — https://man.openbsd.org/nc