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.
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 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