
Kit de herramientas de ataque IPv6
THC-IPV6-ATTACK-TOOLKIT (c) 2005-2022 [email protected] https://github.com/vanhauser-thc/thc-ipv6
Licenciado bajo AGPLv3 (ver archivo LICENSE)
Este código fue inspirado cuando entré en contacto con IPv6, aprendí más y más sobre él, y luego no encontré herramientas para jugar (léase: "hackear") con él. Primero intenté implementar cosas con libnet, pero luego descubrí que la implementación de IPv6 es solo parcial - y es pésima. Intenté agregar el código faltante, pero bueno, no fue tan fácil, así que ahorré mi tiempo y rápidamente escribí mi propia librería.
Este código actualmente solo funciona en:
Debes tener instalado libpcap-dev para poder construir las herramientas. Adicionalmente se recomienda libssl-dev y libnetfilter-queue-dev.
Se pueden instalar con (Kali, Debian, Ubuntu): sudo apt-get install libpcap-dev libssl-dev libnetfilter-queue-dev
Puedes construir las herramientas ejecutando: make all
Puedes instalar las herramientas y las páginas de manual existentes ejecutando: make install
EL THC IPV6 ATTACK TOOLKIT ya viene con muchas herramientas de ataque efectivas:
Simplemente ejecuta las herramientas sin opciones y te darán ayuda y mostrarán las opciones de línea de comandos.
La librería thc-ipv6-lib.c es el corazón y el alma de todas las herramientas - y aquellas que quizás quieras escribir. La implementación es tan simple que normalmente son solo 2-4 líneas para crear un paquete IPv6/ICMPv6 completo con el contenido que elijas.
Tu estructura básica que usas es (thc_ipv6_hdr *) por ejemplo thc_ipv6_hdr *my_ipv6_packet; int my_ipv6_packet_len; y nunca tendrás que jugar con sus opciones/campos.
Cuando quieras construir un paquete IPv6, solo escribes: my_ipv6_packet = thc_create_ipv6_extended(interface, prefer, &my_ipv6_packet_len, src6, dst6, ttl, length, label, class, version); si algo falla, devuelve NULL (solo si my_ipv6_packet_len o dst6 no existen o malloc falla). Las opciones de thc_create_ipv6_extended son: (char*) interface - la interfaz en la que deseas enviar el paquete (int) prefer - puede ser PREFER_LINK (para usar la dirección de enlace local) o PREFER_HOST para usar una dirección IPv6 de host, y PREFER_GLOBAL para usar una dirección IP6 pública (internet) (por defecto) (int ) &my_ipv6_packet_len - el tamaño del paquete que se creará (unsigned char) src6 - la IP6 de origen (OPCIONAL - se seleccionará si es NULL) (unsigned char*) dst6 - la IP6 de destino (en formato de red, 16 bytes de longitud) usualmente el resultado de thc_resolve6("ipv6.google.com"); (int) ttl - el ttl del paquete (OPCIONAL - 0 establecerá esto a 255) (int) length - la longitud que se establecerá en la cabecera (OPCIONAL - 0 = longitud real) (int) label - la etiqueta de flujo (0 está bien) (int) class - la clase del paquete (0 está bien) (int) version - la versión de IP6 (OPCIONAL - 0 establecerá esto a la versión 6) Devuelve NULL en errores o una estructura asignada con malloc en caso de éxito. libérela con free() una vez que hayas terminado con ella.
Ahora puedes establecer cabeceras de extensión sobre ella: 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); Las funciones explicadas: _route: Agrega una cabecera de reenvío de enrutamiento (como Source Routing IP) (int) routers - el número de routers en routerptr (char**) routerptr - una estructura char[routers + 1] con destinos de router en formato de red. Consulta alive6.c para un ejemplo. _fragment: Agrega una cabecera de fragmento (int) offset - el desplazamiento en el cual se deben escribir los datos (nota: aquí coloca la ubicación del desplazamiento en bytes, no en octetos de byte) (int) more_frags - establece a 0 si es el fragmento final, 1 en todos los demás (int) id - un ID para el paquete (igual para todos los fragmentos) _dst: Agrega una cabecera de opciones de destino (char) buf - un búfer de caracteres. Debes controlar este búfer tú mismo con lo que quieras escribir en él. (int) buflen - la longitud de buf _hopbyhop: Agrega una cabecera salto por salto (char*) buf - un búfer de caracteres. Debes controlar este búfer tú mismo con lo que quieras escribir en él. (int) buflen - la longitud de buf _nonxt: Especifica que no habrá cabeceras siguientes en absoluto (int) hdropt - esta opción actualmente se ignora _misc: Especifica una cabecera miscelánea. Úsala si quieres diseñar una cabecera de extensión inválida o inexistente. (int) type - el ID de tipo para especificar la cabecera (int) len - la longitud que se anunciará para la cabecera (OPCIONAL - -1 establece esto a el valor correcto) (char*) buf - un búfer de caracteres. Debes controlar este búfer tú mismo con lo que quieras escribir en él. (int) buflen - la longitud de buf Estas funciones devuelven (int) 0 en caso de éxito y -1 en caso de error.