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

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

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

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

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

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/baldassarrefe/fep3370-advanced-ethical-hacking
Анализ уязвимостейЭксплуатацияСетевая безопасностьТестирование на ПроникновениеОбучение и ОбразованиеЛаборатории и Практика
GitHubbaldassarrefe/fep3370-advanced-ethical-hacking

FEP3370-advanced-ethical-hacking

Эксплуатация DHCP с помощью DynoRoot (CVE-2018-1111)

РепозиторийСайт
85 лет назадЕщё не проверено

Популярное

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

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

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

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

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

DynoRoot CVE-2018-1111

Финальный проект курса Advanced Ethical Hacking в KTH, Стокгольм

Этот проект демонстрирует известную уязвимость машин Fedora и RedHat, связанную с небезопасной реализацией клиентской части протокола Dynamic Host Configuration Protocol (DHCP). Поддельный DHCP-сервер может создавать DHCP-предложения с вредоносной нагрузкой, которая выполняется в корневой оболочке на машине жертвы.

Уязвимость приписывается Феликсу Вильгельму (Felix Wilhelm) и известна как CVE-2018-1111 или «DynoRoot».

Содержание:

  • Введение
    • Предпосылки
    • Уязвимость
    • Источники
  • Настройка
    • Предварительные требования
    • Машина-шлюз
    • Атакующий
    • Жертва Fedora
  • Выполнение атаки
    • Шлюз
    • Атакующий
    • Жертва
    • Анализ
  • Дальнейшая работа
  • Благодарности

Введение

Предпосылки

Протокол Dynamic Host Configuration Protocol (DHCP) — это часто упускаемый из виду компонент в сетевых системах. Его роль заключается в динамической настройке машин-хостов, подключающихся к существующей сети. Наиболее распространенный случай использования — назначение IP-адреса вновь подключенным хостам и информирование о существующих маршрутах для доступа к другим сетям. Могут быть указаны дополнительные опции, например адрес локального DNS-сервера и обслуживаемая зона, или местоположение загрузочного файла.

Давайте проанализируем четырехшаговый протокол, который выполняется, когда новый хост хочет присоединиться к сети после физического подключения через Ethernet или беспроводное соединение.

  1. Клиент, не имеющий IP-адреса, отправляет широковещательное сообщение DISCOVER в сеть.
  2. DHCP-сервер, отвечающий за эту сеть, отвечает предложением OFFER, содержащим: IP-адрес, маску подсети, адрес маршрутизатора и другие опции.
  3. Клиент отвечает запросом REQUEST, официально запрашивая аренду IP-адреса, который был предложен.
  4. Сервер завершает обмен сообщением ACK, указывая, что клиенту разрешено использовать IP-адрес в течение заданного времени.

После начального обмена клиент может продлить аренду, просто отправив еще одно сообщение REQUEST. Сервер проверит наличие аренды с IP-адресом и MAC-адресом клиента и ответит сообщением ACK.

DHCP-сессия (рисунок из Wikimedia Commons, по лицензии CC BY-SA 4.0).

Некоторые моменты, на которые стоит обратить внимание:

  • Клиент также может пропустить фазу DISCOVER и сразу запросить REQUEST адрес. Это распространено в сценариях, когда клиент уже подключался к сети ранее и помнит предыдущий адрес. В этом случае сервер проверяет доступность адреса и подтверждает запрос ACK, или, если аренда недоступна, отправляет NACK.
  • При отключении клиенты могут отправить сообщение RELEASE, чтобы сообщить серверу, что адрес теперь доступен. Однако это не требуется протоколом, и сервер будет периодически собирать просроченные аренды.
  • Каждый DHCP-сервер управляет ограниченным пулом IP-адресов; когда все они назначены, сервер не сможет предлагать аренды новым клиентам.
  • В одной сети может существовать несколько DHCP-серверов. Если клиент получает несколько OFFER, он примет только один; остальные серверы увидят широковещательный REQUEST и отменят предложение.

Уязвимость

Уязвимость находится в /etc/NetworkManager/dispatcher.d/11-dhclient, который выполняется клиентом для разбора и установки опций, полученных через DHCP.

  • declare — это встроенная команда bash, которая при использовании без аргументов выводит все объявленные переменные
  • grep фильтрует все переменные, связанные с DHCP
  • while read opt перебирает переменные DHCP одну за другой, выполняет некоторый разбор и выводит строку вида export new_optionname=value для каждой опции
  • инструкции export затем выполняются оболочкой через `eval````bash eval "$( declare | LC_ALL=C grep '^DHCP4_[A-Z_]=' | while read opt; do optname=${opt%%=} optname=${optname,,} optname=new_${optname#dhcp4_} optvalue=${opt#*=} echo "export $optname=$optvalue" done )"
<!-- omit in toc -->
#### Обычная работа
В нормальных ситуациях код будет работать отлично и распарсит новые опции DHCP. Например, следующий код:```bash
DHCP4_OPTION_ONE=42
DHCP4_OPTION_TWO="bla bla"

declare | LC_ALL=C grep '^DHCP4_[A-Z_]*=' | while read opt; do
  optname=${opt%%=*}
  optname=${optname,,}
  optname=new_${optname#dhcp4_}
  optvalue=${opt#*=}
  echo "export $optname=$optvalue"
done

Будут выведены эти два оператора export для оценки с помощью eval:```bash export new_option_one=42 export new_option_two='bla bla'

<!-- omit in toc -->
#### Внедрение кода
Однако из-за небезопасного `eval` существует возможность внедрения команд bash:```bash
DHCP4_OPTION_ONE="x'& echo Hacked! #"
DHCP4_OPTION_TWO='bla bla'

eval "$(                             
  declare | LC_ALL=C grep '^DHCP4_[A-Z_]*=' | while read opt; do
    optname=${opt%%=*}
    optname=${optname,,}
    optname=new_${optname#dhcp4_}
    optvalue=${opt#*=}
    echo "export $optname=$optvalue"
  done
)"

Приведет к выполнению echo Hacked!:```text [1] 1541 Hacked!

### Источники
- [Запись в базе эксплойтов](https://www.exploit-db.com/exploits/44890)
- [Объявление RedHat](https://access.redhat.com/security/vulnerabilities/3442151)
- [Пост в блоге Tenable](https://www.tenable.com/blog/advisory-red-hat-dhcp-client-command-injection-trouble)
- [Репозиторий GitHub](https://github.com/kkirsche/CVE-2018-1111)
- [Объявление в Twitter](https://twitter.com/_fel1x/status/996388421273882626?lang=en)

## Настройка
Минимальная настройка для демонстрации эксплойта состоит всего из двух машин: машины `victim` под управлением Fedora 28 и машины `attacker`. В этой настройке атакующему нужно просто предоставить службу DHCP и дождаться подключения жертвы.

<figure style="text-align:center">
  <img src="https://raw.githubusercontent.com/baldassarrefe/fep3370-advanced-ethical-hacking/HEAD/media/network_simple.svg" style="max-width:400px;" width="90%"/>
  <figcaption>Минимальная настройка эксплойта.</figcaption>
</figure>

Более реалистичная настройка разместит машины в частной сети, где третья машина, `gateway`, настроена как доброкачественный DHCP-сервер и как шлюз к внешнему интернету. В этой настройке атакующему необходимо предотвратить подключение жертвы к легитимному DHCP-серверу, прежде чем надеяться выполнить атаку.

<figure style="text-align:center">
  <img src="https://raw.githubusercontent.com/baldassarrefe/fep3370-advanced-ethical-hacking/HEAD/media/network.svg" style="max-width:800px;" width="90%"/>
  <figcaption>Настройка частной сети с одной машиной-шлюзом, действующей как DHCP, маршрутизатор и межсетевой экран.</figcaption>
</figure>
Скачать инструмент