Caffe-Latte attack in Python

0

Ho un progetto github chiamato "Evil-Twin Framework" che fondamentalmente è un framework per pentesting Wi-Fi molto estendibile. Non ho intenzione di approfondire i dettagli, ma fondamentalmente si può codificare qualsiasi tipo di funzionalità / attacco Wi-Fi in cima al framework. Recentemente ho implementato attacchi WEP come l'attacco replay ARP e Caffe-Latte. L'attacco di replay ARP funziona bene poiché ho solo bisogno di identificare il pacchetto ARP crittografato e riprodurlo. L'attacco Caffe-Latte sembra essere un po 'più impegnativo. Uno deve catturare un pacchetto ARP gratuito, capovolgere alcuni bit, ricalcolare il checksum crc32 e quindi riprodurlo. Ho aperto un problema su questo argomento con molti dettagli e persino file * .pcap con i miei pacchetti falsi in confronto al pacchetto forgiato di aircrack-ng. Lascerò il link qui se voi ragazzi / ragazze vorreste verificarlo: link

Ok qui ti guiderò attraverso la mia implementazione "difettosa" dell'attacco. Dopo aver identificato il pacchetto, estraggo i wepdata originali e ICV in questo modo:

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

Quindi creo la maschera di bit come suggerito da Vivek Ramachandran, capovolgo i bit corretti (posso decifrare il pacchetto dopo e controllare). Quindi calcolo il crc32 della maschera di bit in questo modo:

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 ho XOR la maschera di bit con i wepdata originali e lo stesso per l'ICV e rimetto i risultati nel pacchetto.

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

Qui "flipped_packet" è una copia del pacchetto originale.

Non riesco a capire dove si trova l'errore, penso che il pacchetto sia malcostruito perché Wireshark "rifiuta" di decodificarlo ma è in grado di decifrare i pacchetti originali e i falsi riusciti creati da airbase-ng / aireplay-ng.

Maggiori dettagli su questo sono nel problema a cui ho lasciato il link sopra.

    
posta Esser420 11.08.2017 - 13:38
fonte

1 risposta

0

In un certo senso l'ho capito.

Prima di tutto avevo bisogno di concatenare la maschera di bit e icv_patch.

I 40 byte risultanti dovrebbero essere XORed con il contenuto crittografato originale.

Il calcolo crc32 di binascii o zlib è diverso da quello utilizzato da aircrack-ng. Ho tradotto la loro implementazione da C a Python e ora funziona.

Tuttavia non capisco i diversi risultati del calcolo crc32 (sì, entrambi sono crc32)

    
risposta data 14.08.2017 - 17:46
fonte

Leggi altre domande sui tag