
Набор инструментов для атак на IPv6
THC-IPV6-ATTACK-TOOLKIT (c) 2005-2022 [email protected] https://github.com/vanhauser-thc/thc-ipv6
Лицензировано по AGPLv3 (см. файл LICENSE)
Этот код был вдохновлён, когда я познакомился с IPv6, узнавал о нём всё больше и больше — и не нашёл инструментов для игры (читай: «взлома»). Сначала я пытался реализовать вещи с помощью libnet, но потом обнаружил, что реализация IPv6 частична и отвратительна. Я попытался добавить недостающий код, но, ну, это было не так просто, поэтому я сэкономил время и быстро написал собственную библиотеку.
Этот код в настоящее время работает только на:
Для сборки инструментов у вас должен быть установлен libpcap-dev. Кроме того, рекомендуется также libssl-dev и libnetfilter-queue-dev.
Их можно установить с помощью (Kali, Debian, Ubuntu): sudo apt-get install libpcap-dev libssl-dev libnetfilter-queue-dev
Вы можете собрать инструменты, выполнив: make all
Вы можете установить инструменты и существующие руководства, выполнив: make install
Набор инструментов THC IPV6 ATTACK TOOLKIT уже включает множество эффективных атакующих инструментов:
Просто запустите инструменты без параметров, и они покажут справку и параметры командной строки.
Библиотека thc-ipv6-lib.c является сердцем и душой всех инструментов — и тех, которые вы, возможно, захотите написать. Реализация настолько проста, что обычно требуется всего 2–4 строки, чтобы создать полный пакет IPv6/ICMPv6 с содержимым по вашему выбору.
Ваша базовая структура: (thc_ipv6_hdr *) например: thc_ipv6_hdr *my_ipv6_packet; int my_ipv6_packet_len; и вам никогда не придётся возиться с её опциями/полями.
Всякий раз, когда вы хотите создать пакет IPv6, просто напишите: my_ipv6_packet = thc_create_ipv6_extended(interface, prefer, &my_ipv6_packet_len, src6, dst6, ttl, length, label, class, version); если что-то не удаётся, возвращается NULL (только если my_ipv6_packet_len или dst6 не существуют или malloc не удаётся). Параметры thc_create_ipv6_extended: (char*) interface — интерфейс, через который вы хотите отправить пакет (int) prefer — либо PREFER_LINK (использовать локальный адрес канала), либо PREFER_HOST (использовать IPv6-адрес хоста) и PREFER_GLOBAL (использовать публичный (интернет) IP6 адрес) (по умолчанию) (int ) &my_ipv6_packet_len — размер пакета, который будет создан (unsigned char) src6 — исходный IP6 (ОПЦИОНАЛЬНО; будет выбран, если NULL) (unsigned char*) dst6 — целевой IP6 (в сетевом формате, 16 байт) обычно результат thc_resolve6("ipv6.google.com"); (int) ttl — TTL пакета (ОПЦИОНАЛЬНО; 0 установит 255) (int) length — длина, которая будет установлена в заголовке (ОПЦИОНАЛЬНО; 0 = реальная длина) (int) label — метка потока (0 подходит) (int) class — класс пакета (0 подходит) (int) version — версия IP6 (ОПЦИОНАЛЬНО; 0 установит версию 6) Возвращает NULL при ошибках или malloc'нутый структуру при успехе. free() её, когда закончите.
Теперь вы можете установить заголовки расширения поверх него: 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); Описание функций: _route: Добавить заголовок маршрутизации пересылки (как IP Source Routing) (int) routers — количество маршрутизаторов в routerptr (char**) routerptr — структура char[routers + 1] с адресами маршрутизаторов в сетевом формате. См. пример в alive6.c. _fragment: Добавить заголовок фрагментации (int) offset — смещение, по которому должны быть записаны данные (обратите внимание: указывайте смещение в байтах, а не в октетах) (int) more_frags — установите 0, если это последний фрагмент, 1 для всех остальных (int) id — ID для пакета (одинаковый для всех фрагментов) _dst: Добавить заголовок опций назначения (char) buf — буфер символов. Вы сами управляете этим буфером, записывая в него то, что хотите. (int) buflen — длина buf _hopbyhop: Добавить заголовок Hop-By-Hop (char*) buf — буфер символов. Вы сами управляете этим буфером, записывая в него то, что хотите. (int) buflen — длина buf _nonxt: Указать, что никаких последующих заголовков не будет (int) hdropt — эта опция в настоящее время игнорируется _misc: Указать произвольный заголовок. Используйте это, если хотите создать недействительный или несуществующий заголовок расширения. (int) type — ID типа для указания заголовка (int) len — длина, рекламируемая для заголовка (ОПЦИОНАЛЬНО; -1 устанавливает правильное значение) (char*) buf — буфер символов. Вы сами управляете этим буфером, записывая в него то, что хотите. (int) buflen — длина buf Эти функции возвращают (int) 0 при успехе и -1 при ошибке.