Ataque de Caffe-Latte en Python

0

Tengo un proyecto github llamado 'Evil-Twin Framework' que básicamente es un marco de prueba de Wi-Fi muy extensible. No voy a profundizar en los detalles, pero básicamente uno puede codificar cualquier tipo de característica / ataque de Wi-Fi sobre el marco. Recientemente he estado implementando ataques WEP como el ataque de repetición ARP y Caffe-Latte. El ataque de reproducción de ARP funciona bien ya que solo necesito identificar el paquete ARP encriptado y reproducirlo. El ataque de Caffe-Latte parece ser un poco más desafiante. Uno tiene que capturar un paquete ARP gratuito, voltear algunos bits, volver a calcular la suma de comprobación crc32 y luego reproducirlo. He abierto un problema sobre esto con muchos detalles e incluso archivos * .pcap con mis paquetes falsificados en comparación con el paquete falsificado de aircrack-ng. Dejaré el enlace aquí si a ustedes / gals les gustaría verlo: enlace

Bien, aquí te guiaré a través de mi implementación 'defectuosa' del ataque. Después de identificar el paquete, extraigo el wepdata original y el ICV así:

wepdata = list(packet[Dot11WEP].wepdata)
original_icv = packet[Dot11WEP].icv

Luego creo la máscara de bits sugerida por Vivek Ramachandran, doy la vuelta a los bits correctos (puedo descifrar el paquete y verificarlo). Luego calculo el crc32 de la máscara de bits de esta forma:

bitmask = list('\x00' * len(wepdata))
Flip bits of the bitmask corresponding to the last byte of sender MAC and IP respectively
bitmask[len(wepdata) - 11] = chr(randint(0, 255))
bitmask[len(wepdata) - 15] = chr(randint(0, 255))
Create crc32 checksum for the bitmask, the logical AND with only Fs turns it into a unsigned crc32
icv_patch = crc32("".join(bitmask)) & 0xffffffff

Finalmente, YO XO la máscara de bits con el wepdata original y lo mismo para el ICV y devuelvo los resultados al paquete.

flipped_result = [ chr( ord(wepdata[i]) ^ ord(bitmask[i]) ) for i in range(len(wepdata)) ]
patched_icv = icv_patch ^ original_icv
Put the results back in the packet
flipped_packet[Dot11WEP].wepdata = "".join(flipped_result)
flipped_packet[Dot11WEP].icv = patched_icv

Aquí "flipped_packet" es una copia del paquete original.

No puedo averiguar dónde está el error, creo que el paquete está mal construido porque Wireshark "se niega" a descifrarlo pero puede descifrar los paquetes originales y las falsificaciones exitosas creadas por airbase-ng / aireplay-ng. / p>

Más detalles sobre esto están en el tema al que dejé el enlace anterior.

    
pregunta Esser420 11.08.2017 - 13:38
fuente

1 respuesta

0

Me di cuenta de eso.

Primero que todo, necesitaba concatenar la máscara de bits y icv_patch.

Los 40 bytes resultantes deben ser XOR con el contenido cifrado original.

El cálculo de crc32 por binascii o zlib es diferente del que utiliza aircrack-ng. Traduje su implementación de C a Python y ahora funciona.

Sin embargo, no entiendo los diferentes resultados del cálculo de crc32 (sí, ambos son crc32)

    
respondido por el Esser420 14.08.2017 - 17:46
fuente

Lea otras preguntas en las etiquetas