User Tools

Site Tools


rx:tp5

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
rx:tp5 [2016/02/22 11:14] orelrx:tp5 [2024/03/18 15:06] (current) – external edit 127.0.0.1
Line 1: Line 1:
-====TP5 (Scapy)====+======TP5 (Scapy)======
  
-FIXME//à compléter...//+Lancez la configuration suivante :
  
-Lancez la configuration du TP5. +  /net/ens/qemunet/qemunet.sh -x -s /net/ens/qemunet/demo/gw.tgz
- +
-  $ /net/ens/qemunet/miage/qemunet.sh -x -s /net/ens/qemunet/miage/gw.tgz+
    
 Il s'agit du réseau ci-dessous qui est déjà configuré.                                Il s'agit du réseau ci-dessous qui est déjà configuré.                               
Line 26: Line 24:
 Sur //opeth//, lancez la commande "scapy". L'invite '>>' indique que vous êtes maintenant dans l'interpréteur Scapy. Pour quitter Scapy, tapez 'ctrl-d'. 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==+====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.   * 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.
Line 38: Line 36:
  
 <code python> <code python>
-ping = IP(dst="192.168.0.2")/ICMP(type="echo-request")+ping = IP(dst="192.168.0.3")/ICMP(type="echo-request")
 pong = sr1(ping) pong = sr1(ping)
 </code> </code>
Line 44: Line 42:
   * Que représentent les variables ping et pong ? A quoi sert la fonction sr1() ?   * 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.   * Utilisez la fonction show() pour afficher le contenu de ces paquets. Notez bien l'encapsulation de ICMP dans IP.
-  * Maintenant, faire un ping vers nile de la même façon...+  * Maintenant, faire un ping vers //grave// de la même façon...
  
-== Traceroute ==+==== 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 : 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/miage/qemunet.sh -x -s /net/ens/qemunet/miage/chain.tgz+  /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.  Les IPs et les tables de routage sont déjà configurés. 
Line 66: Line 64:
   * Que représente le champs TTL ? Qui a répondu ? Pourquoi ? Détaillez l'encapsulation de la réponse reçue ?    * 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 ?   * Recommencez avec ttl=2. Que constatez-vous ?
-  * En s'appuyant sur ce principe, écrire une programme scapy qui effectue un traceroute !+  * En s'appuyant sur ce principe, écrire une programme scapy qui effectue un //traceroute// !
  
-== SYN Scan==+__ Astuce__ : Pour écrire une boucle Python...
  
-  * Qu'est-ce qu'un "syn scan? A quoi sert la commande 'nmap'+<code python> 
-  * Depuis nilelancez la commande 'nmap -sS -n @syl' pour scanner les ports de syl... +>>> for i in range(10): 
-  * Pour effectuer la même chose avec scapy (sur immortal), il faut essayer d'établir une connexion TCP/IP vers l'ensemble des ports de nile (de à 65535)Pour créer un paquet TCP/IP avec scapy, il faut taper :+...   print "iteration", 
 +...  
 +# résultat 
 +iteration 0 
 +iteration 1 
 +... 
 +iteration 8 
 +iteration 9 
 +</code>
  
-     p = IP()/TCP()+__Attention__ : Il ne faut pas oublier d'ajouter un ou deux espaces après '...' dans le corps de la boucle.
  
-La commande suivante détaille l'ensemble des champs que vous pouvez modifier au niveau de IP et de TCP.+==== Syn Scan====
  
-     p.show()+Relancez la première configuration :
  
-  * Créez maintenant un paquet TCP/IP à destination du port 80 de syl avec le champs flags de TCP égal à "S" (SYN). Envoyez ce paquet et observer la réponseA quoi sert ce flag ?+  /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 à 65535de //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
  
-   a = IP(???)/TCP(???          # remplacer les ???+  * 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)    b = sr1(a)
  
-  * Quel est le flag TCP en réponse, correspondant à la variable b.payload.flags ?  +  * 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é sur une machine distante, en complétant le programme suivant !+  * 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.
  
 <code python> <code python>
-   if b.payload.flags == ???:     # remplacer les ??? +for p in range(1024): 
-   ...  print "OPEN" +...  if ???: 
-   ... else: +...    print "OPEN", p 
-   ...  print "CLOSED" +...        
-   ...        +</code>   
-</code>+
  
-__Attention__ : ne pas oublier d'ajouter un espace après '...' dans le corps de la boucle. +__Attention__ : Le test ??? n'est pas si évident à trouver ! Google est votre ami ;-)
-    +
-Complétez le programme suivant, pour découvrir les ports de nile (de 1 à 1024qui sont ouverts et pour les afficher comme le fait nmap.+
  
-<code python> +====Connexion à un serveur TCP/IP (Bonus) ====
-     for i in range(1024): +
-     ...  print "open %s" %i          +
-     ...  +
-</code>      +
- +
-==Connexion à un serveur TCP/IP (Bonus) ==+
  
 [[rx:tp5-bonus|bonus]] [[rx:tp5-bonus|bonus]]
- 
-Le but de cet exercice est d'ouvrir une connexion TCP/IP vers un serveur SSH (port 22) en effectuant la traditionnelle poignée de main avec Scapy. Pour établir la connexion TCP/IP avec Scapy vers le serveur SSH, il faut réaliser la traditionnelle poignée de main TCP en trois étapes (envoi de SYN -> réception de SYN-ACK -> envoi de ACK).  
- 
-  * Sur **immortal** (uniquement) ! 
-    - utiliser cette commande : <code>iptables -A OUTPUT -p tcp --tcp-flags RST RST -j DROP</code> 
-    - puis lancez Scapy. 
- 
-  * Complétez le programme ci-dessous en respectant les étapes suivantes : 
-    - envoi du paquet SYN avec notamment les champs TCP sport=7777, dport=22, flags="S" et seq=0. 
-    - réception du paquet SYNACK...  
-    - envoi du paquet ACK avec les champs TCP flags="A", seq=SYNACK.ack, ack=SYNACK.seq+1, ... 
-    - réception du message MSG envoyé par le serveur, qui doit contenir du texte indiquant la version du serveur OpenSSH, enfin si tout marche bien ! 
- 
-<code> 
-      SYN = IP(???)/TCP(???) 
-      SYNACK = sr1(SYN) 
-      ACK = IP(???)/TCP(???) 
-      MSG = sr1(ACK) 
-      print MSG.load  
-</code>       
- 
-__Attention__ : Il faut effectuer ces commandes rapidement pour éviter un "timeout" du serveur (sinon, le mieux serait d'utiliser une fonction Python) ! De plus, pour effectuer plusieurs tests consécutifs, il faut changer à chaque fois le numéro du port source TCP (sport=5467,...) car on ne ferme pas les connexions correctement ! 
- 
-  * https://samsclass.info/124/proj11/proj18-scapy-tcp.html 
  
rx/tp5.1456139671.txt.gz · Last modified: 2024/03/18 15:05 (external edit)