netcat, présenté comme le couteau suisse de TCP/IP, est un logiciel permettant de lire et écrire en utilisant le protocole TCP / UDP. Sa particularité de lecture / écriture fait de lui un outil de « communication / partage » entre machines.

Sous debian, netcat s'installe simplement grâce à apt-get install netcat.

ncat-5slides-all.png

Les slides sont beaux1 mais que raconter ?

Commentaires

Slide 2

netcat est un logiciel qui lit et écrit en TCP / UDP, il permet donc de se connecter à n'importe quel port (il voit donc s'il est ouvert) et d'essayer de communiquer … si je « parle mail » sur le port 25, je pourrais envoyer un mail ^^

Pour l'exemple, en se basant sur la RFC 821, je peux écrire2

  $ nc -vv localhost 25
  localhost [127.0.0.1] 25 (smtp) open
  220 seccotine.namok.be ESMTP Postfix (Debian/GNU)
  MAIL FROM:<pit@example.org>
  250 2.1.0 Ok
  RCPT TO:<pk@mailinator.com>
  250 2.1.5 Ok
  DATA
  354 End data with <CR><LF>.<CR><LF>
  Le corps du mail
  Blah blah blah 
  .
  250 2.0.0 Ok: queued as A4114EB4044
  QUIT
  221 2.0.0 Bye
    sent 122, rcvd 250

Je constate sur le screenshot que je reçois bien le mail. Profitez-en pour voir ce que racontent vos logs …

screenshot-mail-1.png

Slide 3

Comparaison avec le programme telnet pour le principe de connexion à un port, c'est un moyen simple de voir si un port est ouvert. L'envoi de mail fait avec nc peut très bien se faire avec telnet également.

J'utilise netcat en tant que client.

Slide 4

L'intérêt de netcat par rapport à telnet est de l'utiliser comme serveur.

Comme illustration, je lance une instance de netcat comme serveur sur un port et une autre instance comme client (sur le même port). Les deux instances peuvent communiquer. Ce que l'on illustre en faisant un chat.

screenshot-nc-1.png

Slide 5

En utilisant les redirections d'entrée / sortie, je peux envoyer / recevoir un fichier.

netcat me permettra donc de faire du transfert de fichiers (artisanal certes) pour peu qu'un port soit disponible (au sens non filtré par les firewalls) sur les machines.

Slide 6/7/8

Last but not least, netcat permet de passer une commande en argument !

Je peux lancer une commande sur l'une des deux machines et rediriger les entrées / sorties de celle-ci « dans le tuyau ». Ce qui a pour effet par exemple de lancer un shell sur la machine host1 et d'autoriser host2 d'utiliser ce shell avec mes privilèges.

Je m'appelle Bob (oui je sais, ça vous surprend) et j'ai besoin d'aide pour administrer ma machine MS Windows (ça vous étonne aussi hein !), je lance netcat -lvvp 4444 -e cmd.exe ce qui a pour effet de mettre l'interprèteur de commande MS Windows en écoute sur le port 4444.

Alice veut m'aider, il lui suffit de se connecter à ma machine via netcat -vv <mon ip> 4444 et elle aura accès à mon shell \°/

L'inverse – être prêt à recevoir une commande plutôt que de l'envoyer– est également possible.

Si Alice et Bob son conscients de ce qu'il font, c'est un moyen simple de s'entraider.

Par contre, si Malory parvient à faire exécuter du code à Alice à son insu et que ce code est « simplement » netcat -lvvp 4444 -e cmd.exe … c'est pas de bol !

Liens


  1. Je devrais dire que je trouve que les slides sont beaux et ne pas l'affirmer de manière péremptoire. Ce n'est pas grave pour une fois ;-) 

  2. Faire l'exercice une fois dans sa vie aide à comprendre ce qu'est un protocole et permet également de se rappeler que rien n'est magique