Spoofing checksum UDP usando scapy

0

Sto provando a giocare con uno strumento di sicurezza usando scapy per falsificare i caratteri ASCII in un checksum UDP. Posso farlo, ma solo quando ho hardcode i byte nella notazione esadecimale. Ma non posso convertire la parola stringa ASCII in notazione binaria. Questo funziona per inviare i byte di He (i primi due caratteri di "Hello world"):

sr1(IP(dst=server)/UDP(dport=53, chksum=0x4865)/DNS(rd=1,qd=DNSQR(qname=query)),verbose=0)'

Ma ogni volta che provo a usare una variabile di test2 invece di 0x4865 , il pacchetto DNS non viene trasmesso sulla rete. Questo dovrebbe creare binari per questo ASCII:

test2 = bin(int(binascii.hexlify('He'),16))

sr1(IP(dst=server)/UDP(dport=53, chksum=test2)/DNS(rd=1,qd=DNSQR(qname=query)),verbose=0)

Quando stampo la variabile test2 viene mostrata la corretta rappresentazione della notazione binaria.

Come faccio a convertire una stringa come He in modo che sia visibile nella notazione checksum accettata da scapy, di 0x4865 ??

    
posta Robert 14.08.2017 - 19:13
fonte

1 risposta

0
>>> test
'0b100100001100101'
>>> type(test)
<type 'str'>
>>> test2
18533
>>> type(test2)
<type 'int'>

bin() restituisce una stringa. Rimuovi bin() per ottenere un numero intero e usalo per l'input chksum . Il seguente ha inviato il pacchetto correttamente per me:

from binascii import hexlify
from scapy.all import *

test2 = int(hexlify('He'),16)
send(IP(dst='127.0.0.1')/UDP(dport=53, chksum=test2)/DNS(rd=1, qd=DNSQR(qname="query")),verbose=0)
    
risposta data 14.08.2017 - 20:33
fonte

Leggi altre domande sui tag