Netcat

Netcat

Introduction

L’aide de netcat

Scanner des ports avec Netcat

Netcat client

Netcat serveur

Redirections

Autres options

Spoofer les header http avec netcat

Transférer des fichiers avec netcat

Cloner des disques durs ou des partitions

Introduction

Netcat, developpe à 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 reseau pour simplifier. Plus concretement, il permet d’ouvrir des connexions reseau, que ce soit UDP ou TCP, sans avoir besoin de programmer quoi que ce soit. Tres utile pour realiser 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 detail 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 acces aux sources (que ce soit pour la version Unix ou Windows). Et quand on voit la puissance du programme sur quelques Ko, cela peut etre interessant.

Avant de detailler ses fonctionnalites, vous avez la possibilites de le telecharger pour Linux ou pour Windows chez stake si vous ne l’avez pas deja fait

L’aide de netcat

Voici comment se presente l’aide de netcat, que vous pouvez obtenir en tapant la commande “nc -h”. Elle pourra vous rappeler la syntaxe des commandes netcat a tout moment.


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 sr, ce n’est srement pas le meilleur outil pour scanner des ports, loin de la Mais on peut deja s’apercevoir qu’il en fait des choses.

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.sunet.se 21 : cette commande se connectera sur le ftp ftp.sunet.se (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 Allez un petit exemple pour ceux qui ne comprendraient pas trop ce que je veux dire :


En face des fleches bleues, ce que j’ai du 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 completement le Telnet de meilleure facon. Pour cela utiliser plutot : nc -t hostname.com 23
De meme on pourrait se connecter à un serveur web sur le port 80 etc etc.

Netcat-serveur

Pour mettre Netcat en ecoute 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 / ecoute
-p : pour qu’il ecoute 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 perdu pour autant.
Sur cet exemple avec le port 80, lancez la commande suivante dans une autre fenetre : telnet 127.0.0.1 80
De facon à vous connecter sur le port 80 precedemment ouvert sur votre machine. Et sur cette nouvelle fenetre, si vous tapez quelque chose, vous le devriez le voir appara�re sur la premi�e fenetre. Comme quoi la fenetre client communique bien avec la fenetre serveur, magique non?

Maintenant vous pourrez remarquer que si vous fermez votre fenetre cliente (telnet), la fenetre 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 ecoute en permanence à la fin d’une connection cliente.

nc -L -p 80

En suivant la meme demarche que precedemment mais avec cette nouvelle option -L à la place de -l, vous devriez vous rendre compte de cette difference.

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 meme encore un peu plus en faisant -vv, comme sur cet exemple :

nc -L -vv -p 80
Et vous pourrez vous en apercevoir des 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 debute avec Netcat.

A quoi cela va bien pouvoir nous servir concretement ? Et bien, voilà qui ne va pas vous donner la solution mais tout du moins qui va vous laissez reflechir dessus, puisque son utilisation n’a comme limites que nos idees… Lancez Netcat en mode listen sur le port 80. Sachant que le port 80 est le port d’ecoute par defaut des serveurs web, lancez votre navigateur prïvilegie et entrez l’url suivante :

http://127.0.0.1

Regardez maintenant votre fenetre 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 repondre à votre navigateur et ainsi de suite, ce qui emulerait un vrai serveur web.

Redirections

Sachez aussi qu’avec Netcat, à l’image de ce qu’on peut faire sous Unix, vous pouvez rediriger les entrees et sorties à l’aide des caracteres < et >. Exemple :

nc -L -vv -p 21 > ftp.log logguera toutes les commandes envoyees à votre Netcat port 21

nc -L -vv -p 21 < ftp.txt
Dans ce sens c’est ftp.txt qui va servir de fichier d’ïnstruction à Netcat. Lancez un client telnet, et vous verrez que Netcat ne va plus recevoir les caracteres tapes 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’executer un programme en entree. Par exemple :

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

Lancera le cmd.exe dans notre fenetre cliente telnet. Mais encore mieux on pourrait detacher Netcat de la fenetre de commande dans laquelle on le lance. Et bien si vous voulez vous faire un petit serveur Netcat pour de multiples raisons, alors vous allez devoir supporter la fenetre de commande qui le lance en permanence ? Non pas vraiment puisque l’option -d permet de detacher Netcat de cette fenetre et donc de le faire tourner en tache 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 a l’ecran. Ainsi une personne mal intentionnee n’aurait aucun mal à laisser un port en ecoute chez vous discretement…

Autres options

Les autres options en bref :

-n : pour n’entrer que des adresses ip numeriques, pas de noms d’hotes (mode client).
-o : pour logguer tous les octets mais en hexadecimal cette fois.
-w : timeout, permet d’arreter la tentative de connection si le temps defini par est depasse
-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 ecoute.

Spoofer les header http avec netcat

Si vous souhaitez envoyer des requêtes http à un serveur web, vous pouvez maquiller les en-têtes http, créer de faux navigateurs et de faux referer ainsi que d’autres choses. Voici un exemple de maquillage d’entêtes http depuis google.com, vous devriez savoir quel genre d’entête vous avez besoin

netcat -v www.google.com 80
www.google.com [216.239.59.99] 80 (http) open
GET / HTTP/1.1
Host: www.google.com
User-Agent: mybrowser 😀
Accept: image/png,*/*;q=0.5
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: www.nosite.com
HTTP/1.1 302 Found
Location: http://www.google.co.uk/cxfer?c=PREF%3D:TM%3D1103918397:S%
3D_KtpIy_HOz4CJcYF&prev=/
Content-Type: text/html
Server: GWS/2.1
Content-Length: 217
Date: Fri, 24 Dec 2004 19:59:57 GMT

Transférer des fichiers avec netcat

Par exemple, on veut copier un fichier monfichier.tar.gz d’une machine1 vers une machine2. Sur la machine2 saisir

nc -lp 1234 > monfichier.tar.gz

Le port 1234 peut être remplacé par le port de votre choix et sur machine1 faites

nc -w 1 server2.example.com 1234 < monfichier.tar.gz

pour démarrer le transfert

Cloner des disques durs ou des partitions

On peut copier des disques ou des partitions depuis le réseau Par exemple, si je veux copier /dev/sda de machine1 vers machine2, je vais démonter ma partition sur le système cible, en bootant par exemple sur machine2 avec un live CD
La machine cible a pour adresse 192.168.0.12 on va éxécuter sur cette machine

nc -l -p 1234 | dd of=/dev/sda

Ensuite, depuis la machine1,

dd if=/dev/sda | nc 192.168.0.12 1234

pour démarrer la copie

Source de l’article