
Kit de ferramentas de ataque IPv6
THC-IPV6-ATTACK-TOOLKIT (c) 2005-2022 [email protected] https://github.com/vanhauser-thc/thc-ipv6
Licenciado sob AGPLv3 (ver arquivo LICENSE)
Este código foi inspirado quando entrei em contato com IPv6, aprendi mais e mais sobre ele – e então não encontrei ferramentas para brincar (leia-se: "hackear") por aí. Primeiro tentei implementar coisas com libnet, mas descobri que a implementação IPv6 é apenas parcial – e é ruim. Tentei adicionar o código faltando, mas bem, não era tão fácil, então economizei meu tempo e rapidamente escrevi minha própria biblioteca.
Este código atualmente só roda em:
Você precisa ter o libpcap-dev instalado para poder construir as ferramentas. Além disso, libssl-dev e libnetfilter-queue-dev também são recomendados.
Eles podem ser instalados por (Kali, Debian, Ubuntu): sudo apt-get install libpcap-dev libssl-dev libnetfilter-queue-dev
Você pode construir as ferramentas executando: make all
Você pode instalar as ferramentas e as páginas de manual existentes executando: make install
O THC IPV6 ATTACK TOOLKIT já vem com muitas ferramentas de ataque eficazes:
Basta executar as ferramentas sem opções e elas lhe darão ajuda e mostrarão as opções de linha de comando.
A biblioteca thc-ipv6-lib.c é o coração e alma de todas as ferramentas – e aquelas que você pode querer escrever. A implementação é tão simples que geralmente são apenas 2 a 4 linhas para criar um pacote IPv6/ICMPv6 completo com o conteúdo de sua escolha.
Sua estrutura básica que você usa é (thc_ipv6_hdr *) por exemplo: thc_ipv6_hdr *my_ipv6_packet; int my_ipv6_packet_len; e você nunca precisará mexer com suas opções/campos.
Sempre que você quiser construir um pacote IPv6, basta escrever: my_ipv6_packet = thc_create_ipv6_extended(interface, prefer, &my_ipv6_packet_len, src6, dst6, ttl, length, label, class, version); se algo falhar, retorna NULL (apenas se my_ipv6_packet_len ou dst6 não existirem ou malloc falhar). As opções para thc_create_ipv6_extended são: (char*) interface - a interface na qual você deseja enviar o pacote (int) prefer - PREFER_LINK (para usar o endereço link-local) ou PREFER_HOST para usar um endereço IPv6 de host, e PREFER_GLOBAL para usar um endereço IP6 público (internet) (padrão) (int ) &my_ipv6_packet_len - o tamanho do pacote que será criado (unsigned char) src6 - o IP6 de origem (OPCIONAL - será selecionado se NULL) (unsigned char*) dst6 - o IP6 de destino (em formato de rede, 16 bytes) geralmente o resultado de thc_resolve6("ipv6.google.com"); (int) ttl - o TTL do pacote (OPCIONAL - 0 definirá para 255) (int) length - o comprimento que será definido no cabeçalho (OPCIONAL - 0 = comprimento real) (int) label - o rótulo de fluxo (0 é ok) (int) class - a classe do pacote (0 é ok) (int) version - a versão do IP6 (OPCIONAL - 0 definirá para versão 6) Retorna NULL em erros ou uma estrutura alocada via malloc em caso de sucesso. free() quando terminar de usá-lo.
Agora você pode definir cabeçalhos de extensão sobre ele: 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); As funções explicadas: _route: Adicionar um Cabeçalho de Roteamento (como IP Source Routing) (int) routers - o número de roteadores em routerptr (char**) routerptr - uma estrutura char[routers + 1] com destinos de roteador em formato de rede. Veja alive6.c para um exemplo. _fragment: Adicionar um Cabeçalho de Fragmento (int) offset - o offset no qual os dados devem ser escritos (nota: coloque a localização do offset em bytes aqui, não em octetos) (int) more_frags - defina como 0 se for o último fragmento, 1 em todos os outros (int) id - um ID para o pacote (mesmo para todos os fragmentos) _dst: Adicionar um Cabeçalho de Opções de Destino (char) buf - um buffer de char. Você mesmo deve gerenciar este buffer com o que quiser escrever nele. (int) buflen - o comprimento de buf _hopbyhop: Adicionar um Cabeçalho Hop-By-Hop (char*) buf - um buffer de char. Você mesmo deve gerenciar este buffer com o que quiser escrever nele. (int) buflen - o comprimento de buf _nonxt: Especificar que não haverá cabeçalhos seguintes quaisquer (int) hdropt - esta opção é atualmente ignorada _misc: Especificar um cabeçalho miscelâneo. Use isso se quiser projetar um cabeçalho de extensão inválido ou inexistente. (int) type - O ID do tipo para especificar o cabeçalho (int) len - O comprimento a anunciar para o cabeçalho (OPCIONAL - -1 define para o valor correto) (char*) buf - um buffer de char. Você mesmo deve gerenciar este buffer com o que quiser escrever nele. (int) buflen - o comprimento de buf Essas funções retornam (int) 0 em caso de sucesso e -1 em erro.