Herramientas

Netcat

#network#shells

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

Terminal window
# Debian/Ubuntu (variante OpenBSD)
sudo apt install netcat-openbsd
# Ncat viene con Nmap
sudo apt install nmap

Uso (comandos comunes)

Terminal window
# Listener para una reverse shell
nc -lvnp 443
# Conectar a una bind shell
nc TARGET_IP 4444
# Banner grabbing de un servicio
nc -v TARGET_IP 25
# Transferir un fichero (receptor y emisor)
nc -lvnp 9001 > salida.bin # receptor
nc TARGET_IP 9001 < fichero.bin # emisor
# Ncat con TLS y sin las limitaciones del nc clásico
ncat --ssl -lvnp 443

Estabilizar 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:

Terminal window
# En la víctima, una vez dentro
python3 -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=xterm

Pitfalls / 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 --ssl lo resuelve.

Integración con otras notas

  • Conceptos: Shells (Reverse and Bind).
  • Alternativa más robusta: Socat.

Referencias

  1. Manual de Ncat — https://nmap.org/ncat/
  2. nc(1) de OpenBSD — https://man.openbsd.org/nc