======TP5 (Scapy)====== Lancez la configuration suivante : /net/ens/qemunet/qemunet.sh -x -s /net/ens/qemunet/demo/gw.tgz Il s'agit du réseau ci-dessous qui est déjà configuré. grave | .2 ------------ 147.210.0.0/24 | .1 (eth0) Passerelle immortal | .1 (eth1) -------------- 192.168.0.0/24 .2 | | .3 opeth syl Scapy est un interpréteur de commande en Python qui permet de forger des paquets IP. Vous trouverez de la documentation et un tutoriel sur Scapy ici : * http://www.secdev.org/projects/scapy/demo.html * http://www.secdev.org/projects/scapy/doc/index.html Sur //opeth//, lancez la commande "scapy". L'invite '>>' indique que vous êtes maintenant dans l'interpréteur Scapy. Pour quitter Scapy, tapez 'ctrl-d'. ====Ping & Pong==== * Pour forger un paquet IP, il suffit d'appeler le constructeur IP(). La fonction //show()// vous montre tous les champs du paquet IP initialisés avec des valeurs par defaut. x = IP() x.show() * Pour effectuer un ping vers syl, il faut envoyer une requête 'echo' via le protocole ICMP au dessus d'IP. Tapez les commandes suivantes : ping = IP(dst="192.168.0.3")/ICMP(type="echo-request") pong = sr1(ping) * Que représentent les variables ping et pong ? A quoi sert la fonction sr1() ? * Utilisez la fonction show() pour afficher le contenu de ces paquets. Notez bien l'encapsulation de ICMP dans IP. * Maintenant, faire un ping vers //grave// de la même façon... ==== Traceroute ==== Dans cet exercice, nous allons coder un traceroute en //scapy//. Pour ce faire, nous utiliserons le réseau virtuel //chain// du TP3. Lancez cette topologie : /net/ens/qemunet/qemunet.sh -x -s /net/ens/qemunet/demo/chain.tgz Les IPs et les tables de routage sont déjà configurés. * Tout d'abord, testez la commande //traceroute// entre //opeth// et //nile//. * Lancez //scapy// sur //opeth//. Testez le code ci-dessous : x=IP(dst="147.210.15.2",ttl=1)/ICMP() # @nile y=sr1(x) y.show() * Que représente le champs TTL ? Qui a répondu ? Pourquoi ? Détaillez l'encapsulation de la réponse reçue ? * Recommencez avec ttl=2. Que constatez-vous ? * En s'appuyant sur ce principe, écrire une programme scapy qui effectue un //traceroute// ! __ Astuce__ : Pour écrire une boucle Python... >>> for i in range(10): ... print "iteration", i ... # résultat iteration 0 iteration 1 ... iteration 8 iteration 9 __Attention__ : Il ne faut pas oublier d'ajouter un ou deux espaces après '...' dans le corps de la boucle. ==== Syn Scan==== Relancez la première configuration : /net/ens/qemunet/qemunet.sh -x -s /net/ens/qemunet/demo/gw.tgz * Qu'est-ce qu'un //syn scan// ? * A quoi sert la commande 'nmap' ? * Depuis opeth, lancez la commande 'nmap -sS -n @syl' pour scanner les ports de //syl//... * Rappelez le principe de la //poignée de main// TCP. * Lancez maintenant Scapy sur //opeth//. Pour effectuer un //syn scan// avec Scapy , il faut essayer d'établir une connexion TCP/IP vers l'ensemble des ports (de 1 à 65535) de //syl//. Si un service est disponible sur un port de la machine cible, alors le serveur accepte la demande de connexion en répondant favorablement. * Pour faire un test en Scapy, créez un paquet TCP/IP à destination du port 80 de //syl// avec le champs //flags// de TCP égal à "S" (SYN). Envoyez ce paquet et observez la réponse. a = IP(???)/TCP(???) b = sr1(a) * Quel est le flag TCP en réponse. * Recommencez pour le port 3333. Que remarquez-vous ? En déduire une manière de détecter un port ouvert ou fermé... * Complétez le programme suivant, pour découvrir les ports de nile (de 1 à 1024) qui sont ouverts et pour les afficher comme le fait nmap. for p in range(1024): ... if ???: ... print "OPEN", p ... __Attention__ : Le test ??? n'est pas si évident à trouver ! Google est votre ami ;-) ====Connexion à un serveur TCP/IP (Bonus) ==== [[rx:tp5-bonus|bonus]]