Paket fälschen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
markb1980
User
Beiträge: 2
Registriert: Samstag 11. August 2018, 08:50

Samstag 11. August 2018, 09:21

Hallo,

ich habe einen Paketsniffer mit Python/Scapy gebaut - die Arbeitsweise ist wie folgt:

Paket vom Client an den Server abfangen und kopieren
Auf ACK-Paket nach der Serverantwort warten und daraus seq- und ack-Nummer extrahieren
Paketinhalt verändern, seq- und ack-Nummer einfügen und dann Checksumme aktualisieren
Dann das gefälschte Paket absenden

Hier die Pakete:

Code: Alles auswählen

ORIGINAL-PACKET:

###[ Ethernet ]### 
  dst       = 40:f0:2f:c7:90:20
  src       = 00:1f:5b:34:45:3c
  type      = 0x800
###[ IP ]### 
     version   = 4
     ihl       = 5
     tos       = 0x0
     len       = 42
     id        = 34084
     flags     = DF
     frag      = 0
     ttl       = 64
     proto     = tcp
     chksum    = 0x0
     src       = 192.168.1.7
     dst       = 192.168.1.38
     \options   \
###[ TCP ]### 
        sport     = 4430
        dport     = 49710
        seq       = 1273911897
        ack       = 3316338221
        dataofs   = 5
        reserved  = 0
        flags     = PA
        window    = 8192
        chksum    = 0x839a
        urgptr    = 0
        options   = []
###[ Raw ]### 
           load      = 'oo'

ACK-PACKET:

###[ Ethernet ]### 
  dst       = 40:f0:2f:c7:90:20
  src       = 00:1f:5b:34:45:3c
  type      = 0x800
###[ IP ]### 
     version   = 4
     ihl       = 5
     tos       = 0x0
     len       = 40
     id        = 53843
     flags     = DF
     frag      = 0
     ttl       = 64
     proto     = tcp
     chksum    = 0x0
     src       = 192.168.1.7
     dst       = 192.168.1.38
     \options   \
###[ TCP ]### 
        sport     = 4430
        dport     = 49710
        seq       = 1273911899
        ack       = 3316338314
        dataofs   = 5
        reserved  = 0
        flags     = A
        window    = 8189
        chksum    = 0x8398
        urgptr    = 0
        options   = []


SPOOFED-PACKET:

###[ Ethernet ]### 
  dst       = 40:f0:2f:c7:90:20
  src       = 00:1f:5b:34:45:3c
  type      = 0x800
###[ IP ]### 
     version   = 4
     ihl       = 5
     tos       = 0x0
     len       = 45
     id        = 58454
     flags     = DF
     frag      = 0
     ttl       = 64
     proto     = tcp
     chksum    = 0x0
     src       = 192.168.1.7
     dst       = 192.168.1.38
     \options   \
###[ TCP ]### 
        sport     = 4430
        dport     = 49710
        seq       = 1273911899
        ack       = 3316338314
        dataofs   = 5
        reserved  = 0
        flags     = PA
        window    = 8192
        chksum    = 0x466d
        urgptr    = 0
        options   = []
###[ Raw ]### 
           load      = 'close'
Und der Code der auf dem Client läuft:

Code: Alles auswählen

from scapy.all import *
import random

wait_for_ack = False
new_pkt = None

def manip_pkt(pkt):
    global wait_for_ack
    global new_pkt
    
    try:
        if(pkt[TCP].sport == 4430 and isinstance(pkt.load, (bytes, bytearray))): 
            new_pkt = pkt
            pkt.show()
            print("")
            wait_for_ack = True
            
    except:
        if wait_for_ack and pkt.haslayer(TCP) and pkt[TCP].flags == "A" and pkt[TCP].sport == 4430:
            pkt.show()
            new_len = new_pkt.len - len(new_pkt.load) + 5
            new_seq = pkt.seq 
            new_ack = pkt.ack
            new_id  = random.randrange(1000, 65000)

            new_pkt.load = b"close"
            new_pkt.len = new_len
            new_pkt.seq = new_seq
            new_pkt.ack = new_ack
            new_pkt.id  = new_id

            del new_pkt[TCP].chksum

            new_pkt.show2(dump=True)
            sendp(new_pkt)
            wait_for_ack = False
        else:
            pass

sniff(iface="en0", prn=manip_pkt, store=0)
Der Server empfängt das gefälschte Paket - reagiert aber nicht darauf...
Wenn der nächste legitime Befehl von Client kommt wird dessen Paket in Wireshark sogar als Retransmission gewertet - witzigerweise reagiert darauf der Server mit ACK und Antwort.

Was übersehe ich hierbei bzw. warum reagiert der Server nicht auf das Paket?
markb1980
User
Beiträge: 2
Registriert: Samstag 11. August 2018, 08:50

Montag 13. August 2018, 21:21

Hab den Fehler selber gefunden...

del new_pkt[IP].chksum

hat noch gefehlt - die IP-Header Prüfsumme muss ich ja auch anpassen wenn ich da was dran drehe...
Antworten