======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]]