Netcat

Netcat est un utilitaire Unix simple qui permet de gérer les sockets (connexions réseaux), c’est-à-dire qu’il est capable d’établir n’importe qu’elle connexion à un serveur, en choisissant le port, l’IP etc. Il est conçu pour être un outil « back-end » et peut-être utilisé directement par d’autres programmes et/ou scripts.
Netcat est distribué librement sous la licence GNU Licence Publique Générale (GPL).


Installation :

Linux – Debian

Assez simple ici, en une ligne et hophophop ^_^

apt-get install netcat

Par les sources

wget http://internap.dl.sourceforge.net/sourceforge/netcat/netcat-0.7.1.tar.gz
~$ tar -xzf netcat-0.7.1.tar.gz
~$ cd netcat-0.7.1
~/netcat-0.7.1$ ./configure
~/netcat-0.7.1$ make

Windows

Vous pouvez le télécharger ici : nc111nt.zip

Utilisation basique :

Socket TCP

Commençons simplement : Ouverture d’une socket en mode listening du port 1337 :

nc -l -p 1337

Bon là tu peux te dire « eh dude, c’est quoi mode listening port 1337 ? » Bien pour faire très simple, on ouvre le port 1337 sur notre machine en local et on tend l’oreille !

On peut vérifier en ouvrant une autre instance de Netcat qui va nous servir de client. On se connecte ici à localhost (vu qu’on test sur notre propre machine) sur le port 1337 :

nc localhost 1337

Dans ce cas précis, on se limitera à une entrée clavier STDIN. Chaque phrase taper sur le serveur sera envoyer au client et vice/versa.

Ouaiiii on est fort on a réussi à faire un système de chat concurrent direct de MSN…ou pas…

Aller continuons dans les méandres de Netcat.

Socket UDP

On ajoute simplement -u pour la création de notre socket :

nc -l -u -p 1337

Redirections Entrées / Sorties

NetCat nous permet de manipuler facilement les entrées/sorties.

Prenons un fichier .txt et redirigeons le vers notre client :

nc -l -p 1337 < toto.txt

Cela va permettre d’automatiser Netcat. En effet, plutôt que de donner à Netcat les commandes à effectuer une par une, il est possible d’enregistrer ces commandes dans un fichier, puis de demander à Netcat d’aller les chercher dans ce même fichier.

Il est possible d’effectuer la manipulation inverse, à savoir rediriger les flux dans un fichier :

nc -l -p 1337 > file.log

NetCat permet aussi de rediriger les entrées et sorties d’un programme vers notre socket. Vous pouvez faire en sorte que la connexion à travers un socket aboutisse au lancement d’un programme :

nc -vv -l -p 1337 -e '/bin/sh' -t

-v signifie verbose et permet d’avoir plus d’information sur ce qui se passe réellement. -t permet de négocier une session telnet.

Ensuite, on se connecte avec notre client en utilisant Telnet  :

telnet IP_SERV 1337

Le shell du serveur s’affiche dans la fenêtre Telnet.

Sous Windows il est possible de faire la même chose :

nc -L -p 1337 -d -e c:\command.com

-d permet de cacher la fenêtre 😉

Transfert de fichier

Ici, il est nécessaire d’ajouter le fichier ici file.tar.gz en faisant un pipe :

cat file.tar.gz | nc -l 1337

Pour le client :

nc IP_SERV 1337 > file.tar.gz

Malheureusement, nous n’avons ici aucune information sur l’état d’avancement de notre téléchargement. Heureusement une astuce existe !

Il suffit de piper (se prononce paillepé) la commande pv qui permet d’indiquer la progression d’un flux en temps réel :

cat file.tar.gz | pv -b | nc -l 1337

On peut implémenter la même chose côté client :

nc IP_SERV 1337 | pv -b > file.tar.gz

Requête HTTP

Il est possible d’utiliser Netcat pour faire de la capture de bannières :

nc -v www.unnomdedomainequitue.com

A ce stade, n’importe quelle entrée génère une réponse. Dans notre exemple, si vous appuyez sur la touche Entrée, vous obtiendrez ce type de résultat :

HTTP/1.1 400 Bad Request
Server: Apache...
Date: ...
Content-Type: text/html
Content-Length:92
...
...

Une astuce dans le fichier readme de netcat indique comment rediriger le contenu d’un fichier dans netcat afin d’obtenir des informations supplémentaires des systèmes distants. Ainsi, il est possible de créer un fichier texte nommé chocapicz.txt contenant la ligne GET /HTTP/1.1, suivie de deux retours chariot, puis de taper la commande suivante :

nc -nvv -o bannieres.txt IP_SERV 80 < chocapicz.txt

Scan de ports

Une dernière particularité de Netcat en mode client est qu’il permet d’effectuer un scan de port.

Pour se faire, il suffit d’utiliser l’option -v, ou -vv si vous souhaitez obtenir des information supplémentaires sur les résultats du scan.

Par exemple, la commande nc -vv 127.0.0.1 1-65535 va effectuer un scan détaillé de vos ports 1 à 65535 (c’est-à-dire tous). Mais vous remarquerez que Netcat effectue ce scan en testant les ports un par un, par ordre décroissant. Par très discret non ? Pour éviter cela, l’utilisation de l’option -r permet de scanner les ports aléatoirement. Par contre, dès que Netcat trouve un port ouvert, il arrête son scan. Pas super pratique n’est-ce pas ? Pour forcer netcat à scanner la totalité des ports demandés, il existe l’option -z. Il est également possible de définir la durée entre le scan de chaque port, grâce à l’option -i suivie du délai souhaité, en milli-secondes.

Enfin, pour scanner plusieurs plages de ports, il suffit de les séparer par un espace. Exemple :

nc -vv -i 3000 -r -z IP_SERV 21 23 80-160 1337

Cette commande va effectuer le scan détaillé des ports 21, 23, 80 à 160 et 1337 du SERV, dans un ordre aléatoire, avec un intervalle de 3 secondes entre chaque scan.

Un dernier point sur le mode scan de Netcat : l’utilisation du protocole UDP au lieu de TCP, ce qui permet de scanner des ports dont les applications utilisent le protocole UDP.

Pour utiliser UDP, il suffit de rajouter l’option -u dans votre ligne de commande.

VOIP

Il est possible d’utiliser netcat pour la VOIP \o/ Pour cela rien de bien compliquer.

Sur notre serveur :

nc -l -u -p 1337 < /dev/audio > /dev/audio

Et sur notre client :

nc -u IP_SERV 1337 < /dev/audio > /dev/audio

CRYPTCAT

Cryptcat est un clone de netcat, qui permet de chiffrer ses communications via l’algorithme Twolfish.

Il faut savoir que Netcat laisse passer les commandes en clair sur le réseau.

Il est donc plus appréciable d’utiliser Cryptcat sachant que ce dernier utilise les mêmes commandes que Netcat.

17 Responses to "Netcat"

  • south says:
  • der Narr says:
  • Nicolas says:
  • Paqueuc says:
  • Nicolas says:
  • Dubois says:
  • Nicolas says:
  • jeandez says:
  • helo says:
  • VoxPopuli says:
  • Nicolas says:
  • VoxPopuli says:
  • Nicolas says:
  • charlie says:
  • Nicolas says:
  • sitou says:
Laissez un commentaire