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/12 13:55] orelrx:tp5 [2024/03/18 15:06] (current) – external edit 127.0.0.1
Line 1: Line 1:
-====TP5 (Scapy)====+======TP5 (Scapy)======
  
-Lancez la configuration du TP5.+Lancez la configuration suivante :
  
-  /net/ens/qemunet/qemunet.sh -x -s /net/ens/qemunet/miage/tp5.tgz+  /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é.                                Il s'agit du réseau ci-dessous qui est déjà configuré.                               
                                                                
-                                  grave +                 grave  
-                                    +                   .2 
-                                    |  +               ------------  147.210.0.0/24  
-                                  opeth  +                   .1 (eth0) 
-                                    +   Passerelle   immortal 
-                                    |  +                   .1 (eth1)              
-                               nile   syl +             --------------  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 : 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 :
  
Line 20: Line 22:
   * http://www.secdev.org/projects/scapy/doc/index.html   * http://www.secdev.org/projects/scapy/doc/index.html
  
-Sur //nile//, 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 effectuer un ping vers syl, il faut envoyer une requête 'echo' via le protocole ICMP au dessus d'IP. Tapez les commandes suivantes :+  * 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.
  
-    ping = IP(dst="192.168.0.2")/ICMP(type="echo-request"+<code python> 
-    pong = sr1(ping)+= IP(
 +x.show()   
 +</code>
  
-  * Que représentent les variables ping et pong ? Tapez le nom de ces variables pour afficher leur contenu. A quoi sert la fonction sr1() ? +  * Pour effectuer un ping vers syl, il faut envoyer une requête 'echo' via le protocole ICMP au dessus d'IPTapez les commandes suivantes :
-  * Maintenant, faire un ping vers nile de la même façon...+
  
-== SYN Scan==+<code python> 
 +ping IP(dst="192.168.0.3")/ICMP(type="echo-request"
 +pong sr1(ping) 
 +</code>
  
-  * Simuler un serveur HTTP sur syl à l'aide de cette commande :+  * 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...
  
-     nc -l -vv -p 80    &+==== Traceroute ====
  
-  * Qu'est-ce qu'un "syn scan" ? A quoi sert la commande 'nmap'+Dans cet exercicenous allons coder un traceroute en //scapy//. Pour ce fairenous utiliserons le réseau virtuel //chain// du TP3. Lancez cette topologie :
-  * Depuis nilelancez la commande 'nmap -sS -n syl' pour scanner les ports de syl... +
-  * 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 1 à 65535). Pour créer un paquet TCP/IP avec scapyil faut taper :+
  
-     p = IP()/TCP()+  /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. 
  
-La commande suivante détaille l'ensemble des champs que vous pouvez modifier au niveau de IP et de TCP. 
  
-     p.show()+  * Tout d'abord, testez la commande //traceroute// entre //opeth// et //nile//. 
 +  * Lancez //scapy// sur //opeth//. Testez le code ci-dessous :
  
-  * 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éponse. A quoi sert ce flag ?+<code python> 
 +x=IP(dst="147.210.15.2",ttl=1)/ICMP() # @nile 
 +y=sr1(x) 
 +y.show() 
 +</code>
  
-   = IP(???)/TCP(???          # remplacer les ??+  * Que représente le champs TTL ? Qui répondu Pourquoi Détaillez l'encapsulation de la réponse reçue  
-   b = sr1(a)+  * Recommencez avec ttl=2. Que constatez-vous 
 +  * En s'appuyant sur ce principe, écrire une programme scapy qui effectue un //traceroute// !
  
-  * Quel est le flag TCP en réponse, correspondant à la variable b.payload.flags ?  +__ Astuce__ : Pour écrire une boucle Python...
-  * Recommencez pour le port 3333Que 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 !+
  
 <code python> <code python>
-   if b.payload.flags == ???    # remplacer les ??? +>>> for i in range(10)
-   ...  print "OPEN+...   print "iteration", i 
-   ... else: +...  
-   ...  print "CLOSED" +# résultat 
-   ...       +iteration 0 
 +iteration 1 
 +... 
 +iteration 8 
 +iteration 9
 </code> </code>
  
-__Attention__ : ne pas oublier d'ajouter un espace après '...' dans le corps de la boucle+__Attention__ : Il ne faut pas oublier d'ajouter un ou deux espaces après '...' dans le corps de la boucle.
-    +
-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> +==== Syn Scan====
-     for i in range(1024): +
-     ...  print "open %s" %i          +
-     ...  +
-</code>     +
  
-== Traceroute ==+Relancez la première configuration :
  
-Ecrire un programme Scapy qui réalise un traceroute entre nile et grave.+  /net/ens/qemunet/qemunet.sh -x -s /net/ens/qemunet/demo/gw.tgz
  
-==Connexion à un serveur TCP/IP (Bonus==+  * 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. 
  
-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). +  * 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
  
-  * Sur **immortal** (uniquement+   a = IP(???)/TCP(???          
-    - utiliser cette commande : <code>iptables -A OUTPUT -p tcp --tcp-flags RST RST -j DROP</code> +   b = sr1(a)
-    - puis lancez Scapy.+
  
-  * Complétez le programme ci-dessous en respectant les étapes suivantes : +  * Quel est le flag TCP en réponse.  
-    envoi du paquet SYN avec notamment les champs TCP sport=7777, dport=22, flags="S" et seq=0+  * Recommencez pour le port 3333. Que remarquez-vous ? En déduire une manière de détecter un port ouvert ou fermé... 
-    - réception du paquet SYNACK...  +  * 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
-    - 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 python> 
 +for p in range(1024): 
 +...  if ???: 
 +...    print "OPEN", 
 +...        
 +</code>   
  
-<code> +__Attention__ : Le test ??? n'est pas si évident à trouver ! Google est votre ami ;-)
-      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 !+====Connexion à un serveur TCP/IP (Bonus====
  
-  * https://samsclass.info/124/proj11/proj18-scapy-tcp.html+[[rx:tp5-bonus|bonus]]
  
rx/tp5.1455285315.txt.gz · Last modified: 2024/03/18 15:05 (external edit)