Vous êtes ici : Accueil  > > Papers > >  Spoofing d'IP pratique     Page précédente ;

Spoofing d'IP, pratique

Par BeRgA

Ce tutoriel va vous montrer comment mettre en oeuvre une attaque par spoofing d'IP. Nous vous conseillons fortement de lire l'article sur le sujet Spoofing d'IP théorie, cela vous aidera à comprendre les manipulations effectuées.

Après, si vous souhaitez suivre les indications à la lettre sans les comprendre, ça ne regarde que vous ;-).

Pré-requis

Bien, pour cet exercice, vous allez avoir besoin d'un réseau, d'un accès à deux machines. Nous avons utilisé un réseau composé de deux machines, reliées par un HUB. L'une des deux tourne sous Windows98, et fera office de serveur, tandis que l'autre, sous XP, nous servira de client. Voilà pour la configuration physique.

Au niveau logiciel, vous devrez disposer, sur la machine client, d'un sniffer (nous avons utilisé Ethereal), et d'un forgeur de paquet (Ce sera Winject pour nous). Il vous faudra également un serveur installé sur la machine serveur (Logique ? Ah bon...), netcat fera très bien l'affaire. Reportez-vous au tutoriel sur le logiciel netcat pour plus de détails sur ce dernier.

N.B : Il se peut qu'Ethereal refuse de lancer les captures. Celà peut provenir du fait que vous ne possédez pas les librairies nécessaires au sniffing. Pour rémédier à ce problème, il vous suffit d'installer WinPCAP.

Tout est prêt ?

Passons à la mise en place

Tout d'abord, installons le serveur. Pour cela, sur votre machine serveur, placez Netcat et ses attributs dans le dossier de commandes (Par défaut : c:\windows\command sous Windows 98), ouvrez une invite de command MS-Dos, et tapez :

nc -L -p 21", ou "nc -L -v -v -p 21

pour obtenir plus de détails sur les connexions. Cela aura pour effet de mettre Netcat en écoute sur le port 21 de la machine serveur.

Bon, nous allons établir une connexion normale entre les deux machines pour bien voir ce qui s'y passe. Nous passerons à l'attaque en elle-même après.

- Pour cela, sur la machine client, lancez Ethereal. La fenêtre principale doit ressembler à celle-ci :

Fenêtre Ethereal

Nous allons d'abord mettre en place un filtre, pour n'afficher que les paquets TCP, ce qui vous facilitera déjà la tâche.

- Allez donc dans Edit, Display Filters.

- Sélectionnez "Add Expression", puis recherchez "TCP" dans la liste qui s'affiche. Donnez un nom à votre filtre, sauvez puis quittez.

- Ensuite, tout en bas de la fenêtre principale, dans la zone "filter", entrez le nom de votre filtre. Bien.

- Lancez ensuite la capture ("Capture", puis "Start"). Une fenêtre de configuration s'ouvre. Dans la zone "Interface", vérifiez que c'est bien votre carte réseau qui est sélectionnée. Cochez ensuite les cases Capture packets in promiscious mode, Update list of packets in real time (ce qui a pour effet d'afficher les paquets au moment de leurs passages), Automatic scrolling in live capture (Si vous souhaitez que la fenêtre descende automatiquent quand il y a trop de lignes), ainsi que les trois cases dans l'encadré Name Resolution. Validez avec "OK", la capture se lance.

- Connectez-vous ensuite sur le port 21 du serveur, grâce à Netcat ou Telnet par exemple.

- Retournez sous Ethereal, coupez la capture. Vous devriez obtenir quelque chose comme ça :

Connexion TCP

Nous voyons très bien ici l'établissement de la connexion TCP sur le modèle d'une "Three Handshake Connection". Tout y est : envoi d'un paquet SYN, réponse du serveur par un SYN/ACK, renvoi d'un ACK, incrémentation des numéros de séquences, et des numéros ACK.

Si un petit retour à la thérorie vous parait nécessaire, n'hésitez pas.

Bon, maintenant que vous avez eu un aperçu des fonctionnalités d'Ethereal, on va passer à l'attaque en elle-même.

Le but est de réussir à se connecter sur le serveur avec une autre adresse que votre adresse Ethernet.

Nous allons commencer par forger un premier paquet, le paquet SYN de l'établissement de la connexion. Pour cela, ouvrez Winject. Alors d'abord dans "Settings" :

- Vérifiez que votre connexion est bien "Static", et que l'IP présente est celle qui vous identifie sur le réseau.

- Cliquez sur "test", attendez le résultat, et faites "Save".

- Ensuite, dans l'encadré "Packets", sélectionnez "Open", allez dans le dossier Packets, et ouvrez SYN.pkt.

Dans la partie gauche de la fenêtre de Winject, vous devriez donc trouver toutes les caractéristiques d'un paquet SYN. Il va maintenant falloir les modifier.

- Cherchez la ligne IP-src, ouvrez-la. Pour le format, choisissez "IP", et comme valeur, entrez une adresse IP qui n'est pas attribuée sur votre réseau. Cette IP correspond en fait à l'adresse de la machine spoofée.

- Modifiez ensuite de la même façon la ligne IP_Dst, en entrant celle du serveur. Voilà pour les adresses.

- Remplacez le port distant TCP_dport par 21 (celui par lequel vous comptez vous connectez au serveur), laissez le port source TCP_sport par défaut (1024).

Il faut maintenant changer le numéro de séquence TCP_seq.

- Donnez une valeur simple. Nous avons pris 200000.

Vient ensuite le checksum TCP_cksum. Vous ne pouvez pas le connaître. Il va donc falloir le trouver. Pour celà :

- Modifiez ça ligne en choisissant "Hex" comme format, et "0" en valeur.

- Lancez ensuite une capture sur Ethereal (n'oubliez pas le filtre TCP si vous ne voulez pas avoir à rechercher votre paquet parmi 15).

- Retournez sous Winject, et injectez votre paquet Inject.

Ne stoppez pas la capture et regardez la fenêtre d'Ethereal.

- Selectionnez la ligne correspondant au passage de votre paquet.

Dans la fenêtre du milieu, vous devriez trouver diverses informations.

- Affichez l'arborescence de la ligne Transmission Control Protocol. Vous devriez obtenir quelque chose du genre :

Transmission Control Protocol

Vous voyez donc qu'Ethereal se charge de nous indiquer quel devrait être le checksum correct. Dans notre cas, il suffit donc de :

- Retourner sous Winject, d'éditer la ligne TCP_cksum, et de remplacer la valeur (0), par d06c.

- Bien, une fois le checksum corrigé, réinjectez le paquet.

- Stoppez la capture.

Vous voyez maintenant que le serveur à essayé plusieurs fois de répondre à votre paquet. Il était donc correct. Notez que les réponses ne sont pas dirigées vers votre machine, mais vous les recevez car le HUB renvoie les paquets qu'il reçoit à toutes les machines connectées.

Il va maintenant falloir envoyer le paquet ACK attendu pour établir entièrement la connexion. Pour cela, retournez sous Winject :

- Dans l'encadré "Packet", faites "New", allez sur l'onglet "Noname", et ouvrez à nouveau SYN.pkt.

- Modifiez les champs IP_src, IP_Dst, TCP_Dport, TCP_Seq, TCP_cksum comme pour le premier paquet.

- Mettez également le champ TCP_Syn à 0 et TCP_Ack (celui de 1bit, pas celui de 32) à 1 (supprime le flag SYN, et active ACK).

- Modifiez ensuite le champ TCP_Seq de 32bits en remplaçant la valeur par celle du numéro de séquence du paquet envoyé par le serveur, incrémenté de 1 (en décimal), et en remplaçant ensuite la valeur TCP_Seq par le numéro Ack du paquet reçu.

- Lancez une capture, injectez le premier paquet avec le checksum corrigé, suivi du second (une fois la réponse reçue).

- Corrigez ensuite le checksum de la même manière que pour le premier paquet. Après celà, recommencez cette manipulation, les deux paquets étant corrigés.

Allez faire un tour du côté du serveur : Netcat a bien détecté une connexion depuis l'adresse inattribuée indiquée dans les paquets que vous avez envoyés.

Et voilà, le tour est joué !

Voir la page IP Spoofing théorie.

BeRgA

Contacter l'auteur ;

Page précédente  |   Accueil  |   Allez Up ! ;