User Tools

Site Tools


Writing /net/www/auesnard/teaching/data/cache/a/a0cc0004c73722a7ea33f149b95652db.metadata failed
rx:tp5-bonus
Writing /net/www/auesnard/teaching/data/cache/b/b917139305956507b1746900fb337322.xhtml failed

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
Last revisionBoth sides next revision
rx:tp5-bonus [2016/02/22 11:18] orelrx:tp5-bonus [2019/01/31 10:37] orel
Line 1: Line 1:
-==== TP5 : Connexion à un serveur TCP/IP avec Scapy (Bonus) ====+======Connexion à un serveur TCP/IP avec Scapy (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). Toutes les machines du réseau virtuel dispose d'un serveur SSH. 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). Toutes les machines du réseau virtuel dispose d'un serveur SSH.
  
   * Sur une machine cliente, par exemple //immortal// :   * Sur une machine cliente, par exemple //immortal// :
-    - utilisez cette commande : <code>iptables -A OUTPUT -p tcp --tcp-flags RST RST -j DROP</code> +    - utilisez cette commande : <code>iptables -A OUTPUT -p tcp --tcp-flags ALL RST -j DROP</code> 
     - puis lancez Scapy.     - puis lancez Scapy.
  
Line 21: Line 21:
 </code>       </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 !+__Attention__ : Il faut effectuer ces commandes rapidement pour éviter un "timeout" du serveur (sinon, le mieux est 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 ! 
 + 
 + 
 +Pour aller plus loin : http://packetlife.net/blog/2010/jun/7/understanding-tcp-sequence-acknowledgment-numbers/ 
 + 
 + 
 + 
 +<code python> 
 +#!/usr/bin/env python 
 + 
 +import sys 
 +from scapy import * 
 + 
 + 
 +### Warning: Do not forget to firewall you host to prevent your kernel 
 +### sending a RST when receiving a SYN ACK for a SYN it knows nothing 
 +### about. 
 +### 
 +### iptables --table filter -A OUTPUT -p tcp --tcp-flags ALL RST --dport 13 -j DROP  
 +### 
 + 
 +### CONNECT ### 
 + 
 + 
 +def connect(dst,dport): 
 + 
 +  print "Opening connection..." 
 + 
 +  seq = RandShort() * 1 
 +  sport = RandShort() * 1 
 + 
 +  print "dst = %s" % dst 
 +  print "seq = %s" % seq 
 +  print "sport = %s" % sport 
 +  print "dport = %s" % dport 
 + 
 +  # SYN 
 +  a = IP(dst=dst)/TCP(sport=sport,dport=dport,seq=seq,flags="S")  
 +  # SYN/ACK 
 +  b = sr1(a,verbose=0)  
 +  # ACK 
 +  c = IP(dst=dst)/TCP(sport=sport,dport=dport,seq=b.ack,ack=b.seq+1,flags="A"
 +  d = sr1(c,verbose=0) 
 +  return d 
 + 
 +### CLOSE ### 
 + 
 +def close(f): 
 + 
 +  print "Closing connection..." 
 + 
 +  # FIN/ACK 
 +  g = IP(dst=dst)/TCP(sport=sport,dport=dport,seq=f.ack,ack=f.seq+1,flags="FA"
 +  # FIN/ACK 
 +  h = sr1(g,verbose=0) 
 +  return 
 + 
 +# Après la fermeture, la connexion est dans un état TIME_WAIT... et il 
 +# faut attendre un peu pour que la fermeture soit effective. C'est 
 +# pourquoi on ne peut pas réutiliser immédiatement le même numéro de 
 +# port source. 
 + 
 + 
 +##################### TEST ##################### 
 + 
 +dport = 13 
 +dst = "192.168.0.1" 
 + 
 +# connect 
 +d = connect(dst,dport) 
 + 
 +print d.load     
 + 
 +# ack 
 +e = IP(dst=dst)/TCP(sport=sport,dport=dport,seq=d.ack,ack=d.seq+len(d.load),flags="A"
 +f = sr1(e,verbose=0) 
 + 
 +# close 
 +close(f) 
 + 
 +</code> 
 + 
 + 
  
-  * https://samsclass.info/124/proj11/proj18-scapy-tcp.html 
rx/tp5-bonus.txt · Last modified: 2024/03/18 15:06 by 127.0.0.1