====== Packetforge-ng ====== ===== Descrizione ===== Lo scopo di packetforge-ng è realizzare pacchetti cifrati che possono essere utilizzati per l'injection. E' possibile realizzare vari tipi di pacchetti come ARP request, UDP, ICMP e pacchetti personalizzati. L'uso più comune consiste nello realizzare pacchetti di ARP request per l'injection. Per creare un pacchetto cifrato, è necessario avere un file con il PRGA (pseudo random genration algorithm). Quest'ultimo è utilizzato per cifrare il pacchetto che si vuole realizzare. Tipicamente è possibile ottenerlo con [[aireplay-ng]] utilizzando gli attacchi [[korek_chopchop|chopchop]] e [[fragmentation]]. ===== Utilizzo ===== Utilizzo: packetforge-ng ====Opzioni di realizzazione:==== *-p : specifica il frame control word (hex) *-a : specifica il MAC address dell'Access Point *-c : specifica il MAC address del destinatario *-h : specifica il MAC address del mittente *-j : specifica il bit FromDS *-o : pulisce il bit ToDS *-e : disabilita la cifratura WEP *-k : specifica l'indirizzo IP di destinazione [Porta] *-l : specifica l'indirizzo IP sorgente [Porta] *-t ttl : specifica il Time To Live *-w : scrive il pacchetto sul file pcap specificato ====Opzioni per la sorgente:==== *-r : legge i pacchetti da questo file raw *-y : legge il PRGA da questo file ====Modalità (doppio trattino per le long options):==== *--arp : crea un pacchetto ARP (-0) *--udp : crea un pacchetto UDP (-1) *--icmp : crea un pacchetto ICMP (-2) *--null : crea un pacchetto nullo (-3) *--custom : crea un pacchetto personalizzato (-9) ===== Esempi ===== ==== Generare un pacchetto di ARP request ==== Di seguito è riportato un esempio sul come realizzare un pacchetto di ARP request. Primo, ottenere il file da xorare (PRGA) con l'attacco chopchop o con l'attacco fragmentation mediante aireplay-ng. Quindi utilizzare il seguente comando: packetforge-ng -0 -a 00:14:6C:7E:40:80 -h 00:0F:B5:AB:CB:9D -k 192.168.1.100 -l 192.168.1.1 -y fragment-0124-161129.xor -w arp-request Dove: *-0 indica che si vuole realizzare un pacchetto di ARP request *-a 00:14:6C:7E:40:80 è il MAC address dell'Access Point *-h 00:0F:B5:AB:CB:9D è il MAC address sorgente che si vuole utilizzare *-k 192.168.1.100 è l'indirizzo IP di destinazione. In un ARP è "Chi ha questo IP?" *-l 192.168.1.1 è l'indirizzo IP sorgente. In un ARP è "Informare questo IP" *-y fragment-0124-161129.xor *-w pacchetto ARP Presupponendo di stare sperimentando con il proprio access point, il pacchetto ARP request generato di sopra può essere decifrato con la propria chiave. Per vedere che il pacchetto appena creato può essere decifrato usare il seguente comando: Inserire "airdecap-ng -w arp-request" Il risultato sarà simile al seguente: Total number of packets read 1 Total number of WEP data packets 1 Total number of WPA data packets 0 Number of plaintext data packets 0 Number of decrypted WEP packets 1 Number of decrypted WPA packets 0 Per vedere il pacchetto appena decifrato, lanciare "tcpdump -n -vvv -e -s0 -r arp-request-dec" Il risultato sarà simile al seguente: reading from file arp-request-dec, link-type EN10MB (Ethernet) 18:09:27.743303 00:0f:b5:ab:cb:9d > Broadcast, ethertype ARP (0x0806), length 42: arp who-has 192.168.1.100 tell 192.168.1.1 Ciò che ci si aspetta. Ora è possibile iniettare il pacchetto ARP request con "aireplay-ng -2 -r arp-request ath0". Il software risponderà come segue: Size: 68, FromDS: 0, ToDS: 1 (WEP) BSSID = 00:14:6C:7E:40:80 Dest. MAC = FF:FF:FF:FF:FF:FF Source MAC = 00:0F:B5:AB:CB:9D 0x0000: 0841 0201 0014 6c7e 4080 000f b5ab cb9d .A....l~@....... 0x0010: ffff ffff ffff 8001 6c48 0000 0999 881a ........lH...... 0x0020: 49fc 21ff 781a dc42 2f96 8fcc 9430 144d I.!.x..B/....0.M 0x0030: 3ab2 cff5 d4d1 6743 8056 24ec 9192 c1e1 :.....gC.V$..... 0x0040: d64f b709 .O.. Use this packet ? y Saving chosen packet in replay_src-0124-163529.cap You should also start airodump-ng to capture replies. End of file. Inserendo "y" di sopra, il pacchetto creato con packetforge-ng verrà iniettato. ==== Generare un pacchetto nullo ==== Quest'opzione permette di generare pacchetti LLC nulli. Questi sono i pacchetti più piccoli in assoluto e non contengono dati. L'opzione "-s" è usata per settare manualmente la dimensione del pacchetto. Una semplice via per generare piccoli pacchetti da iniettare. Da ricordare che il valore di dimensione (-s) definisce la dimensione assoluta di un pacchetto non cifrato, quindi è necessario aggiungere 8 byte per ottenere la sua lunghezza definitiva dopo il processo di cifratura (4 byte per IV+IDX e 4 byte per l'ICV). Questo valore include anche l'header 802.11 con una lunghezza di 24 byte. Il comando è: packetforge-ng --null -s 42 -a BSSID -h SMAC -w short-packet.cap -y fragment.xor Dove: * --null indica che si vuole realizzare un pacchetto LLC nullo (con il doppio trattino). * -s 42 specifica la lunghezza del pacchetto da realizzare. * -a BSSID è il MAC address dell'access point. * -h SMAC è il MAC address sorgente del pacchetto da realizzare. * -w short-packet.cap è il nome del file di output. * -y fragment.xor è lo stesso nome del file che contiene il PRGA. ==== Generare pacchetti personalizzati ==== Se si vuole realizzare un pacchetto personalizzato, per prima cosa occorre creare il pacchetto con uno tool a libera scelta. Quest'ultimo potrebbe essere un tool specializzato, un hex editor o anche una sessione di cattura precedente. Quindi salvarlo come file pcap e lanciare il seguente comando: packetforge-ng -9 -r input.cap -y keystream.xor -w output.cap Dove: * -9 indica che si vuole realizzare un pacchetto personalizzato. * -r input.cap è il file di input. * -y keystream.xor è il file che contiene il PRGA. * -w output.cap è il file di output. Al momento dell'avvio, packetforge-ng chiederà quale pacchetto usare e quindi il file di output. ===== Suggerimenti ===== La maggior parte degli access point non si curano di verificare quale indirizzo IP viene utilizzato per un ARP request. Quindi di conseguenza è possibile utilizzare 255.255.255.255 come indirizzo IP sorgente e destinatario. Così il comando di packetforge-ng diventa: packetforge-ng -0 -a 00:14:6C:7E:40:80 -h 00:0F:B5:AB:CB:9D -k 255.255.255.255 -l 255.255.255.255 -y fragment-0124-161129.xor -w arp-request ===== Risoluzione dei problemi ===== ==== Utilizzo di una o entrambe le opzioni -j e -o ==== Un errore comune è quello di includere una o entrambe le opzioni -j e -o e creare pacchetti invalidi. Queste opzioni regolano i bit FromDS e ToDS nel pacchetto generato. A meno che non si stia facendo qualcosa di veramente speciale o non si possiedono le conoscenze su quello che si sta veramente facendo, non usarle. In genere non sono necessarie. ==== Error message "Mode already specified" ==== Questo errore è solitamente causato all'usare il numero uno (-1) invece del trattino L minuscola (-l) nel comando. Inserendo: packetforge-ng -0 -a 00:14:6C:7E:40:80 -h 00:09:5B:EC:EE:F2 -k 255.255.255.255 -1 255.255.255.255 -y 00:14:6C:7E:40:80-03-00-14-6C-7E-40-80.xor -w arp-request Restituisce: Mode already specified. "packetforge-ng --help" for help. Questo perché viene usato -1 invece di -l. Usare semplicemente "-l".