
Toolkit per attacchi IPv6
THC-IPV6-ATTACK-TOOLKIT (c) 2005-2022 [email protected] https://github.com/vanhauser-thc/thc-ipv6
Licensed under AGPLv3 (vedi file LICENSE)
Questo codice è nato quando sono entrato in contatto con IPv6, ho imparato sempre di più - e poi non ho trovato strumenti per giocare (leggi: "hackerare") con esso. All'inizio ho provato a implementare cose con libnet, ma poi ho scoperto che l'implementazione IPv6 è solo parziale - e fa schifo. Ho provato ad aggiungere il codice mancante, ma beh, non era così facile, quindi ho risparmiato tempo e ho scritto rapidamente la mia libreria.
Questo codice attualmente funziona solo su:
Devi avere installato libpcap-dev per poter compilare gli strumenti. Inoltre sono raccomandati anche libssl-dev e libnetfilter-queue-dev.
Questi possono essere installati con (Kali, Debian, Ubuntu): sudo apt-get install libpcap-dev libssl-dev libnetfilter-queue-dev
Puoi compilare gli strumenti eseguendo: make all
Puoi installare gli strumenti e le pagine man esistenti eseguendo: make install
Il THC IPV6 ATTACK TOOLKIT viene già fornito con molti strumenti di attacco efficaci:
Basta eseguire gli strumenti senza opzioni e ti daranno aiuto e mostreranno le opzioni della riga di comando.
La libreria thc-ipv6-lib.c è il cuore e l'anima di tutti gli strumenti - e quelli che potresti voler scrivere. L'implementazione è così semplice, di solito sono bastano 2-4 righe per creare un pacchetto IPv6/ICMPv6 completo con il contenuto che desideri.
La struttura base che usi è (thc_ipv6_hdr *) per esempio thc_ipv6_hdr *my_ipv6_packet; int my_ipv6_packet_len; e non dovrai mai giocare con le sue opzioni/campi.
Ogni volta che vuoi costruire un pacchetto IPv6, scrivi: my_ipv6_packet = thc_create_ipv6_extended(interface, prefer, &my_ipv6_packet_len, src6, dst6, ttl, length, label, class, version); se qualcosa fallisce, restituisce NULL (solo se my_ipv6_packet_len o dst6 non esistono o malloc fallisce). Le opzioni di thc_create_ipv6_extended sono: (char*) interface - l'interfaccia su cui inviare il pacchetto (int) prefer - PREFER_LINK (per usare l'indirizzo link-local) o PREFER_HOST per usare un indirizzo IPv6 host, e PREFER_GLOBAL per usare un indirizzo IP6 pubblico (default) (int ) &my_ipv6_packet_len - la dimensione del pacchetto che verrà creato (unsigned char) src6 - l'IP6 sorgente (OPZIONALE - verrà selezionato se NULL) (unsigned char*) dst6 - l'IP6 di destinazione (in formato rete, 16 byte) solitamente il risultato di thc_resolve6("ipv6.google.com"); (int) ttl - il ttl del pacchetto (OPZIONALE - 0 lo imposterà a 255) (int) length - la lunghezza che verrà impostata nell'header (OPZIONALE - 0 = lunghezza reale) (int) label - l'etichetta di flusso (0 va bene) (int) class - la classe del pacchetto (0 va bene) (int) version - la versione IP6 (OPZIONALE - 0 imposterà la versione 6) Restituisce NULL in caso di errore o una struttura mallocata in caso di successo. free() una volta che hai finito.
Ora puoi impostare header di estensione sopra: thc_add_hdr_route(my_ipv6_packet, &my_ipv6_packet_len, routers, routerptr); thc_add_hdr_fragment(my_ipv6_packet, &my_ipv6_packet_len, offset, more_frags, id); thc_add_hdr_dst(my_ipv6_packet, &my_ipv6_packet_len, buf, buflen); thc_add_hdr_hopbyhop(my_ipv6_packet, &my_ipv6_packet_len, buf, buflen); thc_add_hdr_nonxt(my_ipv6_packet, &my_ipv6_packet_len, hdropt); thc_add_hdr_misc(my_ipv6_packet, &my_ipv6_packet_len, type, len, buf, buflen); Le funzioni spiegate: _route: Aggiungi un Routing Forwarding Header (come IP Source Routing) (int) routers - il numero di router in routerptr (char**) routerptr - una struttura char[routers + 1] con destinazioni router in formato rete. Vedi alive6.c per un esempio. _fragment: Aggiungi un Fragment Header (int) offset - l'offset in cui scrivere i dati (nota: inserisci la posizione dell'offset in byte qui, non in ottetti) (int) more_frags - impostato a 0 se è l'ultimo frammento, 1 su tutti gli altri (int) id - un ID per il pacchetto (uguale per tutti i frammenti) _dst: Aggiungi un Destination Options Header (char) buf - un buffer di char. devi gestire questo buffer tu stesso con ciò che vuoi scrivere dentro. (int) buflen - la lunghezza di buf _hopbyhop: Aggiungi un Hop-By-Hop Header (char*) buf - un buffer di char. devi gestire questo buffer tu stesso con ciò che vuoi scrivere dentro. (int) buflen - la lunghezza di buf _nonxt: Specifica che non ci saranno header successivi (int) hdropt - questa opzione è attualmente ignorata _misc: Specifica un header miscellaneo. Usalo se vuoi progettare un header di estensione non valido o inesistente. (int) type - l'ID del tipo per specificare l'header (int) len - la lunghezza da pubblicizzare per l'header (OPZIONALE - -1 imposta il valore corretto) (char*) buf - un buffer di char. devi gestire questo buffer tu stesso con ciò che vuoi scrivere dentro. (int) buflen - la lunghezza di buf Queste funzioni restituiscono (int) 0 in caso di successo e -1 in caso di errore.