User Tools

Site Tools


rx:tp5

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 :

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.txt · Last modified: 2024/03/18 15:06 by 127.0.0.1