Netcat : le couteau suisse du réseau

I. Introduction à netcat

Netcat, développé à l’origine pour Unix puis pour Windows plus tard par @stake, est un programme bien connu en ligne de commande. Il permet de faire pas mal de choses avec des sockets, c’est-à-dire connexions réseau pour simplifier. Plus concrètement, il permet d’ouvrir des connexions réseau, que ce soit UDP ou TCP, sans avoir besoin de programmer quoi que ce soit. Très utile pour réaliser des relations client/serveurs pour faire des tests ou autre. En fait, on peut faire pas mal de choses, que l’on va voir en détail plus loin, avec Netcat. C’est pour cela que j’aime bien le comparer à un couteau suisse. De plus, amis programmeurs sachez qu’il est open source, et donc on peut avoir accès aux sources (que ce soit pour la version Unix ou Windows). Et quand on voit la puissance du programme sur quelques Ko, cela peut être intéressant. Avant de détailler ses fonctionnalités, vous avez la possibilité de le télécharger pour Linux ou pour Windows chez @stake si vous ne l’avez pas déjà.

II. Explications

Étape 1 : L’aide de netcat Voici comment se présente l’aide de netcat, que vous pouvez obtenir en tapant la commande “nc -h“. Elle pourra vous rappeler la syntaxe des commandes netcat à tout moment.

tuto netcat image

Étape 2 : Scanner des ports avec Netcat


Et oui Netcat peut aussi scanner des ports… Par exemple si je veux scanner les ports ouverts entre 1 et 300 de l’ip 192.168.0.2, je fais :

nc -v -w2 -z 192.168.0.2 1-300

Bon bien sûr, ce n’est sûrement pas le meilleur outil pour scanner des ports, loin de là. Mais on peut déjà s’apercevoir qu’il en fait des choses.

Étape 3 : Netcat client


Pour ouvrir une connexion sur un port, il suffit de taper la commande : “nc ip_serveur port
Je vous donne quelques exemples certainement plus parlants :

– “nc ftp.proxad.net 21” : cette commande se connectera sur le ftp “ftp.proxad.net” (port ftp = port 21). Ensuite il faut connaître les commandes ftp pour pouvoir aller plus loin, car tout ne se fera pas tout seul comme avec un client ftp évolué. Allez un petit exemple pour ceux qui ne comprendraient pas trop ce que je veux dire :

tuto netcat image 1

En face des flèches blanches, ce que j’ai dû taper.
– “nc hostname.com 23” : cette commande se connectera sur le port (23) telnet de l’adresse hostname.com. A noter que Netcat prend en charge complètement le Telnet de meilleure façon. Pour cela utiliser plutôt : “nc -t hostname.com 23
De même on pourrait se connecter à un serveur web sur le port 80 etc etc.

Étape 4 : Netcat-serveur

Pour mettre Netcat en écoute sur un port de votre machine, il suffit d’utiliser les options -l et -p (listen et port) comme ceci :

nc -l -p 80
-l : pour le mettre en mode listen / écoute
-p : pour qu’il écoute sur le port

Normalement, il ne se passe rien et netcat ne vous redonne pas la main pour taper quoique ce soit, mais rien n’est planté pour autant.
Sur cet exemple avec le port 80, lancez la commande suivante dans une autre fenêtre : “telnet 127.0.0.1 80
De façon à vous connecter sur le port 80 précédemment ouvert sur votre machine. Et sur cette nouvelle fenêtre, si vous tapez quelque chose, vous le devriez le voir apparaître sur la première fenêtre. Comme quoi la fenêtre client communique bien avec la fenêtre serveur, magique non?

Maintenant vous pourrez remarquer que si vous fermez votre fenêtre cliente (telnet), la fenêtre serveur vous redonne la main. Autrement dit Netcat n’est plus ouvert. Une autre commande existe pour palier à cela : elle permet de remettre le port en écoute en permanence à la fin d’une connection cliente.

nc -L -p 80

En suivant la même démarche que précédemment mais avec cette nouvelle option -L à la place de -l, vous devriez vous rendre compte de cette différence.

Une autre option assez pratique dans notre cas est -v ; le mode verbose (littéralement “bavard”). Dans ce mode netcat est plus explicite sur ce qui se passe, et même encore un peu plus en faisant -vv, comme sur cet exemple :

nc -L -vv -p 80
Et vous pourrez vous en apercevoir dès le lancement de la commande puisqu’il vous retournera la phrase suivante : listening on [any] 80 … On sait vraiment ce qui se passe, et c’est pratique surtout quand on débute avec Netcat.

tuto netcat image 2


A quoi cela va bien pouvoir nous servir concrètement ? Et bien, voilà qui ne va pas vous donner la solution mais tout du moins qui va vous laissez réfléchir là-dessus, puisque son utilisation n’a comme limites que nos idées… Lancez Netcat en mode listen sur le port 80 (Oula le méchant, il ne donne pas la commande directement cette fois-ci mais c’est fait exprès pour voir si vous suivez). Sachant que le port 80 est le port d’écoute par défaut des serveurs web, lancez votre navigateur préféré et entrez l’url suivante :

http://127.0.0.1

Regardez maintenant votre fenêtre de Netcat et vous devriez apercevoir le texte initial qu’envoie le navigateur aux sites web. Magique non? Par la suite autant vous dire qu’en se renseignant un peu sur les commandes http, vous pouvez répondre à votre navigateur et ainsi de suite, ce qui émulerait un vrai serveur web.Étape 5 : RedirectionsSachez aussi qu’avec Netcat, à l’image de ce qu’on peut faire sous Unix, vous pouvez rediriger les entrées et sorties à l’aide des caractères < et >. Exemple :

nc -L -vv -p 21 > ftp.log” logguera toutes les commandes envoyées à votre Netcat port 21

nc -L -vv -p 21 < ftp.txt” Dans ce sens c’est ftp.txt qui va servir de fichier d’éntrée à Netcat. Lancez un client telnet, et vous verrez que Netcat ne va plus recevoir les caractères tapés au clavier mais bien ceux qui se trouvent dans notre ftp.txt.

L’option -e peut aussi servir de redirection dans le sens où elle permet d’exécuter un programme en entrée. Par exemple :

nc -L -vv -p 21 -e cmd.exe

Lancera le cmd.exe dans notre fenêtre cliente telnet. Mais encore mieux on pourrait détacher Netcat de la fenêtre de commande dans laquelle on le lance. L’intérêt ? Et bien si vous voulez vous faire un petit serveur Netcat pour de multiples raisons, alors vous allez devoir supporter la fenêtre de commande qui le lance en permanence ? Non pas vraiment puisque l’option -d permet de détacher Netcat de cette fenêtre et donc de le faire tourner en tâche de fond. Vous l’avez toujours dans votre liste de processus et pouvez ainsi le killer quand vous en avez plus besoin, mais il ne s’affiche plus à l’écran. Ainsi une personne mal intentionnée n’aurait aucun mal à laisser un port en écoute chez vous discrètement…

Étape 6 : Autres options


Les autres options en bref :

-n : pour n’entrer que des adresses ip numériques, pas de noms d’hôtes (mode client).
-o : pour loguer tous les octets reçus mais en hexadécimal cette fois.
-w : timeout, permet d’arrêter la tentative de connexion si le temps défini par est dépassé.
-u : ce mode permet de travailler avec le protocole UDP au lieu de TCP (modes client et serveur).
-s : l’adresse ip locale sur laquelle vous allez vous mettre en écoute.

III. Conclusion du tutorial

Au travers de ce tutoriel, vous avez pu voir quelques utilisations possibles de Netcat toujours intéressantes. Cet article a été repris de katabatik.com, site pour lequel je l’avais fait à l’origine, je trouvais approprié de le remettre ici puisqu’il est toujours d’actualité, même si le tuto date de 2003 et que le programme Netcat est encore beaucoup plus ancien que ça.

Soyez le premier à commenter

Poster un Commentaire

Votre adresse de messagerie ne sera pas publiée.


*