Qu'est-ce que Netcat ? C'est un petit utilitaire en ligne de
commandes, qui permet de gérer les sockets (connexions réseaux), c'est-à-dire
qu'il est capable d'établir n'importe qu'elle connexion à un seveur, un
choisissant le port, l'IP, etc. De plus, ces sources sont disponibles, aussi
bien pour sa version Linux que Windows (si, si, c'est vrai !). Petit tour
d'horizon des possibilités offertes par cette petite merveille...
Avant de commencer nos petits exercices, il est fortement conseillé de
placer netcat dans le répertoire de commande de votre OS. Cela permettra de
lancer netcat directement depuis la console, sans être obligé de vous replacez
dans le bon répertoire à chaque fois. Si vous êtes sous Windows, ouvrez une
invite MS-DOS, tapez "path", et vous verrez la liste des répertoires de
commandes. Placez Netcat dans l'un d'eux. Notez que vous pouvez également
ajouter le répertoire de Netcat à la liste des répertoires de commandes. Pour se
faire, reportez-vous à la section konsole/ms-dos du site. Faites également
attention au nom de l'éxécutable. C'es ce dernier que vous devrez ensuite
utiliser pour appeler netcat. Le plus souvent, il sera nommé "nc", et cette
dénomination qui sera utilisée dans ce tutorial. Mais il se peut que l'éxécutable
soit appelé "netcat". Si c'est le cas, vous devez simplement taper netcat au
lieu de nc dans toutes les lignes de commandes décrites ci-dessous. Enfin, il
est conseillé de lancer netcat à partir d'une console, et non directement. Cela
évitera à la fenêtre de se fermer automatiquement à chaque interruption. Pour
interrompre netcat, que ce soit pour couper une connexion, stopper une écoute,
il suffit de taper Ctrl+C.
Bon, normalement, on devrait pouvoir commencer. Comme il a été dit plus
haut, Netcat ne fait que gérer des connexions. Cela signifie qu'il ne connait
aucun protocole, et que par conséquent, toutes les négociations durant une
connexion sera reporté par Netcat. Vous allez donc voir se qui se passe
exactement. Pour établir une connexion simple avec un serveur, il vous suffit de
taper la commance suivante :
nc IP_du_serveur port : par exemple nc 127.0.0.1 21 pour vous connecter sur
votre port 21
Mais étant donné que Netcat ne connait aucun protocole, cela sera à vous de
les respecter lors de votre requête.
Que s'est-il-passé ? Nous nous sommes connecté au port 80 du serveur
principal de wanadoo, et nous avons envoyé une requête (ici "test"), à travers
le socket. Mais la requête en question ne faisant pas partie du protocole à
respecter lors de la connexion (ici HTTP, puisque port 80), le serveur a coupé
la connexion. Pourtant, la réponse du seveur offre quelques renseignements
intéressants. On y voit le type de code (html => page Web), et le "Method Not
Implemented" nous indique que nous sommes en présence de la page d'erreur 501.
Netcat permet aussi de gérer les connexions telnet, en remplacement du
traditionnel Telnet de Windows. L'interêt ? Une transparence totale de la
connexion. De plus, le client telnet de windows peut se révéler un peu trop
bavard sur son utilisateur...Mais cela implique que vous connaissiez le
protocole à respecter lors de la connexion.
Une dernière particularité de Netcat en mode client est qu'il permet
d'effectuer un scan de port. Pour se faire, il suffit d'utiliser l'option -v, ou
-vv si vous souhaitez obtenir des information supllémentaires sur les résultats
du scan. Par exemple, la commande nc -vv 127.0.0.1 1-65535 va effectuer un scan
détaillé de vos ports 1 à 65535 (c'est-à-dire tous). Mais vous remarquerez que
Netcat effectue ce scan en testant les ports un par un, par ordre décroissant.
Par très discret non ? Pour éviter cela, l'utilisation de l'option -r permet de
scanncer les ports aléatoirement. Par contre, dès que Netcat trouve un port
ouvert, il arrête son scan. Pas super pratique n'est-ce pas ? Pour forcer netcat
à scanner la totalité des ports demandés, i lexiste l'option -z. Il est
également possible de définir la durée entre le scan de chaque port, grâce à
l'option -i suivie du délai souhaité, en milli-secondes. Enfin, pour scanner
plusieurs pages de ports, il suffit de les séparer par un espace. Exemple :
nc -vv -i 3000 -r -z serveur_cible 21 23 80-160 12345 : Cette commande va
effectuer le scan détaillé des ports 21, 23, 80 à 160 et 12345 du serveur_cible,
dans un ordre aléatoire, avec un intervalle de 3 secondes entre chaque scan.
Un dernier point sur le mode scan de Netcat : l'utilisation du protocole UDP
au lieu de TCP, ce qui permet de scanner des ports dont les applications
utilisent le protocole UDP. Pour utiliser UDP, il suffit de rajouter l'option -u
dans votre ligne de commande.
Mais Netcat peut aussi fonctionner en mode serveur...
En effet, Netcat peut vous permettre de mettre un port de votre machine en
écoute, c'est-à-dire un attente d'un connexion. Pour mettre un port en écoute,
il suffit de taper la commande suivante :
nc -l -p numéro_du_port
Cette commande a pour effet de placer le port spécifié en attente d'une
connexion extérieure. Lorsque que netcat recevra une demande de connexion sur ce
port, il ouvrira alors un socket entre ce port et le port distant. Lorsque
l'hôte distant coupera la connexion, Netcat stoppera l'écoute sur le port. Pour
forcer Netcat à rester en écoute après la déconnexion, utilisez l'option -L à la
place de -l. Petit exemple : Placez votre port 80 en écoute en tapant "nc -l -p
80" dans votre invite MS-DOS, ouvrez votre browser internet, et connectez-vous à
l'adresse 127.0.0.1. Regardez ensuite votre invite MS-DOS.
Penchons-nous un peu sur les informations reçues par Netcat (donc envoyé par
votre browser). Rien ne vous surprend ? Juste en se connectant sur un serveur,
votre browser a donné comme information son nom et sa version (MSIE 6.0), l'OS
sur lequel il tourne (Windows NT 5.1),l'IP de votre machine (127.0.0.1 ici, nous
sommes en local), la langue utilisée (donc le pays). Pas très discret tout ça !
Vous voyez, quand on vous dit que Microsoft vous cache des choses...
Une autre particularité de Netcat est le fait qu'il permet d'enregistrer
toutes les informations dans un fichier. Par exemple, si vous répétez la manip
précédente, mais avec la ligne de commande suivante : "nc -l -p 80>trafic.log",
toutes les informations reçues tout à l'heure par Netcat seront enregistrés dans
le fichier trafic.log, qui sera créé par Netcat dans le répertoire dans lequel
il se trouve. Il est également possible d'enregistrer le trafic sous forme
héxadécimal. Pour cela, il suffit d'utiliser l'option "-o trafic.log" à la place
de ">trafic.log"
Il est également possible d'utiliser des fichiers extérieurs dans l'autre
sens, c'est-à-dire d'utiliser un fichier pour "automatiser" Netcat. En effet,
plutôt que de donner à Netctat les commandes à effectuer une par une, il est
possible d'enregistrer ces commandes dans un fichier, puis de demander à Netcat
d'aller les chercher dans ce fichier. Par exemple, crééz un fichier nommé
test.txt, dans lequel vous écrivez "hello". Notez que le fichier doit être placé
dans le même répertoire que celui où votre console indique être. Ensuite, placez
un port en écoute, puis , dans une seconde console, tapez la commande suivante:
"nc 127.0.0.1 numéro_du_port< test.txt"
Retournez dans la première, et vous verrez que Netcat a bien reçu hello de la
part de la seconde console. Il est donc possible d'automatiser le fonctionnement
de Netcat en créant des fichiers de commances respectant les protocoles
utilisés. l'utilisation d'un fichier de commande peut se faire aussi bien en
mode serveur qu'en mode client. Dans les deux cas, Netcat ira chercher dans le
fichier les requêtes et/ou commandes à envoyer à travers le socket. Ah oui, une
dernière chose : Vous pouvez également combiner l'option de minuterie pour
régler le temps que Netcat mettra entre l'envoi de chaque requête.
Enfin, nous allons voir une fonction très intéressante de ce petit bijou
qu'est Netcat, le fait de pouvoir rediriger le socket vers un programme.
Explication. Grâce à Netcat, vous pouvez faire en sorte que la connexion à
travers un socket aboutisse au lancement d'un programme. Exemple :
nc -L -p 23 -e cmd.exe
L'option "-e cmd.exe" va permettre de rediriger une connexion sur le port 23
(Telnet), vers l'invite de commande Ms-Dos. Vous voulez vérifiez ? Ouvrez votre
client telnet, connectez-vous sur 127.0.0.1, et vous devriez voir l'invite de
commande dans votre fenêtre Telnet. Cette option peut se révéler très utile pour
effectuer de la maintenance à distance sur une machine, mais aussi pour
installer une BackDoor. Comment ? Eh bien il suffit de placer la commande "nc -L
-d -p 666 -e cmd.exe" dans le fichier autoexec.bat. Ainsi, à chaque démarrage,
Netcat va placer, très discretement (cf. explication de l'option -d ci-dessous),
le port 666 de la machine en écoute, et redirigez toute connexion sur ce port
vers l'invite de commance. Il ne vous restera plus qu'à vous y connecter depuis
chez vous pour disposer d'un shell sur la machine.
Vous l'aurez compris, l'utilité de Netcat n'a pour limite que votre
imagination. Vous pouvez grâce à lui créer des exploits, mettre en place des
Honey Pots, établir n'importe quelle connexion, scanner, etc...Soyez imaginatifs
!
Diverses options :
-d: Permet de fermer la console, tout en laissant Netcat actif. -h: Affiche la liste des options disponibles et leur signification. -w durée_en_secondes: Permet de spécifier la durée pendant laquelle
Netcat doit rester connecté au serveur distant. -g nombre_de_sauts: Spécifie le nombre de routages maximum que doit subir
le socket.