Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
dhcpoptinj — Инжектор DHCP-опций | Kitploit
Инструменты/GitHubGitHub/misje/dhcpoptinj
Сниффинг и анализ пакетовСетевая безопасностьТестирование на ПроникновениеRed Teaming
GitHubmisje/dhcpoptinj

dhcpoptinj

Инжектор DHCP-опций

Репозиторий
4314486 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Инжектор опций DHCP

Build Status Total alerts

Вам когда-нибудь хотелось перехватывать DHCP-запросы и незаметно для отправителя вставлять несколько дополнительных DHCP-опций? Скорее всего, нет. Однако, если такая необходимость возникнет, dhcpoptinj (надеюсь) вам поможет.

Зачем

Причин для изменения DHCP-запросов может быть много, хотя, скорее всего, вам стоит поискать гораздо лучший способ решения вашей проблемы. Возможно, у вас нет доступа к DHCP-серверу/клиентам и нужно изменить их DHCP-опции, возможно, DHCP-программное обеспечение сложно настроить (или не поддерживает то, что вы хотите сделать), возможно, у вас очень сложная и/или необычная настройка, или, возможно, вы просто хотите поэкспериментировать с отправкой экзотических или повреждённых опций? Есть небольшая вероятность, что dhcpoptinj действительно может оказаться полезным.

Как

dhcpoptinj ожидает прибытия пакетов в очередь netfilter. Он проверяет, является ли пакет на самом деле пакетом BOOTP/DHCP, и если да, то приступает к инжекции опций. Он пересчитывает контрольную сумму заголовка IPv4, отключает контрольную сумму UDP (для упрощения реализации) и затем возвращает пакет обратно в netfilter.

Вам нужно правило iptables для перехвата пакетов и отправки их в dhcpoptinj. Допустим, у вас есть два интерфейса, объединённых в мост, eth0 и eth1. Допустим, вы хотите перехватывать все BOOTP-запросы, поступающие с , и инжектировать (82/0x52). Придумаем глупую полезную нагрузку: со значением "Фъяс".

eth0
опцию информации агента ретрансляции
подуопцию идентификатора цепи агента

Добавьте правило в таблицу mangle iptables:sudo iptables -t mangle -A PREROUTING -m physdev --physdev-in eth0 -p udp --dport 67 -j NFQUEUE --queue-num 42.

Затем запустите dhcpoptinj (запустим его на переднем плане с дополнительным отладочным выводом): sudo dhcpoptinj -d -f -q 42 -o'52 01 04 46 6A 61 73'. Обратите внимание, что dhcpoptinj должен запускаться пользователем, имеющим возможность CAP_NET_ADMIN. Вам не нужно, и вам действительно не следует запускать dhcpoptinj от root. Вместо этого вы можете, например, предоставить возможность CAP_NET_ADMIN двоичному файлу (с помощью setcap) и ограничить права выполнения только определённым пользователем или группой. Это метод, используемый для запуска Wireshark не от root, так что вы найдёте несколько руководств, помогающих это сделать.

Теперь отправьте DHCP-пакет на интерфейс eth0 и наблюдайте (с помощью такого инструмента, как wireshark), как он изменился, когда достигает мостового интерфейса. Он должен иметь инжектированную опцию в конце списка опций. Если вы захватите входящий DHCP-пакет с помощью Wireshark, он будет отображаться неизменённым, хотя на самом деле он будет модифицирован.

Обратите внимание на формат аргумента для опции -o: это должна быть шестнадцатеричная строка, начинающаяся с кода DHCP-опции, за которым следует полезная нагрузка опции. Длина опции (байт, который обычно следует за кодом опции) вычисляется автоматически и не должна указываться. Шестнадцатеричная строка может быть разделена нешестнадцатеричными символами для удобочитаемости. Все опции должны иметь полезную нагрузку, за исключением специальной опции заполнения (код 0).

Макет бессмысленной опции, использованной в этом примере (сначала макет DHCP-опции, затем конкретный макет подопции опции информации агента ретрансляции), выглядит следующим образом:

КодДлинаДанные
52(авто)01 04 46 6A 61 73 ("Фъяс")
Подоп.ДлинаДанные
01446 6A 61 73 ("Фъяс")

Обратите внимание, что dhcpoptinj не заботится о том, что вы пишете в полезных нагрузках опций, и не проверяет, существует ли ваш код опции. Однако он запрещает использовать код опции 255 (завершающая опция). dhcpoptinj вставляет эту опцию как последнюю автоматически.

Скриншот

root@kitploit:~
dhcpoptinj -f -d -q42 -r -o'0C 66 6A 61 73 65 68 6F 73 74' -o'52 01 04 46 6A 61 73' -o 320A141E28
root@kitploit:~
3 DHCP option(s) to inject (with a total of 25 bytes): 12 (0x0C) (Hostname), 82 (0x52) (Relay Agent Information), 50 (0x32) (Address Request)
Existing options will be removed
Initialising netfilter queue
Initialising signal handler
Initialisation completed. Waiting for packets to mangle on queue 42
Received 416 bytes
Inspecting 328-byte DHCP packet from B6:40:FE:41:30:DC to 255.255.255.255:67
Mangling packet
Found option  53 (0x35) (DHCP message type)        DHCPREQUEST (copying)
Found option  54 (0x36) (DHCP Server Id)           with   4-byte payload 0A 14 1E 01 (copying)
Found option  50 (0x32) (Address Request)          with   4-byte payload 0A 14 1E 28 (removing)
Found option  12 (0x0C) (Hostname)                 with  12-byte payload 33 31 36 64 65 39 31 34 64 61 62 34 (removing)
Found option  55 (0x37) (Parameter List)           with  13-byte payload 01 1C 02 03 0F 06 77 0C 2C 2F 1A 79 2A (copying)
Found END option (removing)
Injecting option  12 (0x0C) (Hostname)                 with   9-byte payload 66 6A 61 73 65 68 6F 73 74
Injecting option  82 (0x52) (Relay Agent Information)  with   6-byte payload 01 04 46 6A 61 73
Injecting option  50 (0x32) (Address Request)          with   4-byte payload 0A 14 1E 28
Inserting END option
Padding with 10 byte(s) to meet minimal BOOTP payload size
Sending mangled packet

Установка

Packaging status

dhcpoptinj есть в Debian/Ubuntu. Пакет deb находится под управлением исходного кода на salsa. Рекомендуется устанавливать dhcpoptinj из пакета deb, а не с помощью следующей процедуры ручной установки, поскольку он также включает страницу руководства, правила автодополнения bash, примеры файлов и т.д.

Предварительные требования

Вам понадобятся cmake и libnetfilter_queue (а также компилятор C, поддерживающий C99). Надеюсь, вы используете систему, подобную Debian, в этом случае вы можете выполнить следующее для их установки: sudo apt-get install cmake libnetfilter-queue-dev.

Сборка

  1. Загрузите или клонируйте исходный код: git clone git://github.com/misje/dhcpoptinj
  2. Перейдите в каталог: cd dhcpoptinj
  3. Создайте каталог сборки и перейдите в него (необязательно, но рекомендуется): mkdir build && cd build
  4. Запустите cmake: cmake .. (или cmake -DCMAKE_BUILD_TYPE=Debug .., если вам нужна отладочная сборка)
  5. Запустите make: make -j4
  6. Установите (необязательно, но вы получите выгоду от наличия dhcpoptinj в вашем PATH): sudo make install

Удаление

  1. Выполните sudo make uninstall из каталога сборки

Каталог сборки со всем его содержимым можно безопасно удалить. Если вы не использовали каталог сборки, вы можете избавиться от всего мусора cmake, выполнив git clean -dfx. Однако обратите внимание, что это удаляет всё в каталоге проекта, что не находится под управлением исходного кода.

Конфигурационный файл

dhcptopinj попытается проанализировать /etc/dhcpoptinj.conf или файл, переданный с помощью -c/--conf-file. Синтаксис конфигурационного файла:

  • ключ=значение, где ключ — это длинное имя опции, или
  • ключ, если опция не принимает аргумент

Пробелы необязательны. Всё после и включая символ # считается комментарием. DHCP-опции перечисляются по одной в виде опция=01:02:03. Кавычки вокруг шестнадцатеричной строки опции необязательны, а байты могут быть разделены любым количеством нешестнадцатеричных символов.

Опции version, help и conf-file не принимаются в конфигурационном файле.

Пример:

root@kitploit:~
# Запуск на переднем плане:
foreground
# Включение отладочного вывода:
debug
# Переопределение имени хоста на "fjasehost":
option = '0C 66 6A 61 73 65 68 6F 73 74'
# Отправка идентификатора агента "Фъяс":
option = "52:01:04:46:6A:61:73"
# Переопределение запроса адреса на запрос 10.20.30.40:
option=320A141E28
# Использовать очередь 12:
queue = 12

remove-existing-opt # Удалить опции перед вставкой

Справка

Этот readme должен был помочь вам начать. Также ознакомьтесь со страницей руководства (в пакете deb) и выводом справки (dhcpoptinj -h), которые должны охватывать всё, что может предложить утилита.

По вопросам ошибок и предложений, пожалуйста, создайте issue.

Ограничения

dhcpoptinj прост и, надеюсь, останется таким. Тем не менее, ниже перечислены отсутствующие функции, которые, надеюсь, когда-нибудь будут добавлены:

  1. Удаление опций вместо их замены
  2. Фильтрация входящих пакетов по типу DHCP-сообщения (код 53) перед их изменением

Устранение неполадок

  1. Failed to bind queue handler to AF_INET: Operation not permitted

    Скорее всего, у вас нет возможности CAP_NET_ADMIN или другой процесс (возможно, другой экземпляр dhcpoptinj?) привязан к тому же номеру очереди netfilter.

Известные проблемы

  1. Утечка памяти при нештатном завершении.

    Это не считается утечкой. Однако при нормальном завершении (перехват SIGTERM, SIGINT или SIGHUP) утечки памяти быть не должно.

Полезная информация

При создании правил iptables для использования с dhcpoptinj могут быть полезны следующие опции:

  • --queue-bypass

Не сбрасывать пакеты, а пропускать их, если dhcpoptinj не запущен (или не прослушивает правильный номер очереди).

Вклад

Если у вас есть какие-либо предложения, пожалуйста, оставьте issue, и я свяжусь с вами. Вы можете внести свой вклад, и pull-запросы очень приветствуются.

Если вы нашли dhcpoptinj полезным, я был бы рад узнать, для чего вы его используете. Обновите страницу вики и опишите своё применение.

Лицензия

Я выбрал GPL для этого проекта. Если это вам не подходит, свяжитесь со мной, и мы сможем договориться о другой лицензии.

Скачать инструмент