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.