Suplantando suma de comprobación UDP utilizando scapy

0

Estoy tratando de jugar con una herramienta de seguridad usando scapy para simular caracteres ASCII en una suma de comprobación UDP. Puedo hacerlo, pero solo cuando codifiqué los bytes en notación Hex. Pero no puedo convertir la palabra de cadena ASCII en notación binaria. Esto funciona para enviar los bytes de He (dos primeros caracteres de "Hola mundo"):

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

Pero siempre que trato de usar una variable de test2 en lugar de 0x4865 , el paquete DNS no se transmite a través de la red. Esto debería crear binario para este 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)

Cuando imprimo la variable test2 se muestra la representación de notación binaria correcta.

¿Cómo convierto una cadena como He para que se muestre en la notación de suma de comprobación aceptada por scapy, de 0x4865 ??

    
pregunta Robert 14.08.2017 - 19:13
fuente

1 respuesta

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

bin() devuelve una cadena. Elimine el bin() para obtener un entero, y úselo para la entrada chksum . Lo siguiente me envió el paquete correctamente:

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)
    
respondido por el RoraΖ 14.08.2017 - 20:33
fuente

Lea otras preguntas en las etiquetas