Атакуем dhcp
Содержание:
DHCP relay example
In this example the interfaces used for the DHCP relay are eth1 and eth2. The router receives DHCP client requests on eth1 and relays them through eth2 to the DHCP server at 10.0.1.4.
Configuration
Enable DHCP relay for eth1 and eth2:
# set service dhcp-relay interface eth1 # set service dhcp-relay interface eth2
Set the IP address of the DHCP server:
# set service dhcp-relay server 10.0.1.4
The router should discard DHCP packages already containing relay agent information to ensure that only requests from DHCP clients are forwarded:
# set service dhcp-relay relay-options relay-agents-packets discard
Commit the changes and show the results:
# commit # show service dhcp-relay interface eth1 interface eth2 server 10.0.1.4 relay-options { relay-agents-packets discard }
The DHCP relay agent can be restarted with:
$ restart dhcp relay-agent
Перейдем к shellshock
Про то, как и почему работает shellshock, писать нет никакого смысла, ведь эта уязвимость — одна из самых популярных, и о ней есть великое множество статей. Лучше остановимся на моменте, как получить shell на клиенте DHCP, в случае, если мы выступим в роли DHCP-сервера.
В какие поля и опции можно инъектировать?
Ответ: практически в любые! Вот список кодов DHCP-опций, в которые возможно инъектировать (проверено на NetworkManager из состава CentOS 6.5): , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , 214, 215, 216, 217, 218, 219, , , , , 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 250, 251, 253.
В нашем PoC мы будем использовать DHCP-опцию с кодом 114 (). Почему? Потому, что ее длина — вариативна (максимальная длина — 256 байт), а также потому, что ее все используют. Ее описание еще есть здесь. Существует даже статья о том, как с помощью этой опции обновить уязвимые к shellshock системы 🙂
Какие у нас ограничения?
Ответ: их много, слишком много!
- Длина — 256 байт
- Возможно использовать только команды интерпретатора
- Большое ограничение на используемые символы: некоторые фильтруются, некоторые экранируются. Это зависит от клиента DHCP. Вот набор символов, которые не везде получится использовать:
- После выполнения команды, IPv4-адрес может не присвоиться, в таком случае возможно использовать IPv6 link-local-адрес, если на интерфейсе не включено игнорирование IPv6
- Необходимо использовать абсолютные пути, иначе команда может не выполниться
И что тогда делать?
Ответ: обходить ограничения!
Для обхода фильтра мы должны выполнить все одной командой. Сделаем это так:
Здесь на вход интерпретатора /bin/sh мы подаем вывод /usr/bin/base64, которая декодирует строку Base64String. Таким образом, мы использовали уже 34 байта, длина Base64String не должна превышать 222 байтов.
А что будет в Base64String? Не забываем про четвертое ограничение, поэтому в первую очередь выставим IP-адрес интерфейсу командой:
Эта команда накладывает на нас еще одно ограничение: мы должны знать имя интерфейса, которому выставляем IP-адрес. По умолчанию, в старых версиях Linux, на которых еще есть shellshock, первый сетевой интерфейс называется eth0, так что ориентируемся на него. Еще в эту строку мы должны поместить reverse shell или bind shell.
Для reverse shell будем использовать стандартный shell с использованием nc:
Для reverse shell также можно использовать команду отсюда:
Для bind shell будем использовать /cmd/unix/bind_awk из состава Metasploit, как один из наиболее коротких:
Видео:
Назначение адресов в DHCP
DHCP сервер может использовать 2 способа назначения адресов компьютерам.
- Первый способ — фиксированный. В этом случае в конфигурационных серверах DHCP сервера для каждого МАК-адреса прописывается соответствующий ему IP-адрес, который DHCP сервер должен выдавать клиенту. Это удобно делать в небольшой сети, где Вы знаете MAC-адреса всех компьютеров. Но в крупной сети или если Вы не знаете мак-адреса всех компьютеров это сделать невозможно. Например, если вы делаете сеть в кафе, куда люди приходят со своими ноутбуками, смартфонами, планшетами, вы не можете знать заранее их мак-адреса.
- Другой подход — динамический. В этом случае у DHCP сервера есть пул адресов, это диапазон адресов из которого DHCP сервер может взять любой IP-адрес и назначить компьютеру. При этом DHCP сервер следит за тем, чтобы один и тот же IP-адрес из пула не был назначен двум компьютерам одновременно.
Сбор данныхData collection
Журнал DHCP-сервераDHCP Server log
Журналы отладки службы DHCP-сервера содержат дополнительные сведения о назначении аренды IP-адресов и динамические обновления DNS, которые выполняются DHCP-сервером.The DHCP Server service debug logs provide more information about the IP address lease assignment and the DNS dynamic updates that are done by the DHCP server. Эти журналы по умолчанию расположены в папке% WINDIR% \ system32 \ DHCP.These logs by default are located in %windir%\System32\Dhcp.
Дополнительные сведения см. в разделе Анализ файлов журнала DHCP-сервера.For more information, see Analyze DHCP Server Log Files.
Трассировка сетиNetwork trace
Корреляция трассировки сети может означать, что DHCP-сервер выполнялся в момент записи события в журнал.A correlating network trace may indicate what the DHCP server was doing at the time that the event was logged. Чтобы создать такую трассировку, выполните следующие действия.To create such a trace, follow these steps:
Описание
Для работы протокола сервер DHCP должен находиться в том же сетевом сегменте, что и пользователи сети. Между ними не должно быть маршрутизаторов. Если сеть состоит из нескольких сегментов, разделенных маршрутизаторами, необходим сервер DHCP в каждом сегменте, поскольку начальный широковещательный запрос клиента через маршрутизаторы не проходит. Возможная альтернатива такому подходу — установка в каждом «бессерверном» сегменте ретранслятора DHCP (Relay Agent) для переадресации запросов от пользователей сегмента на основной сервер DHCP. В такой роли могут выступать и некоторые маршрутизаторы.
Синтаксис:
dhcpr |delete SERVERIP dhcpr (flush|trace|notrace) dhcpr (lock|unlock) INTERFACE dhcpr (info|noinfo) dhcpr (start|stop)
[править] Задача
Протокол динамического конфигурирования DHCP очень удобен — настройка стека TCP/IP клиентских
машин не требует никакого внимания со стороны администратора, всё происходит само собой.
С другой стороны, в общем случае адреса назначаются случайным образом, и заранее неизвестно какой хост
получит какой адрес. Если нужно сохранить удобство использования DHCP, но при этом сделать так, чтобы адреса были
чётко закреплены за каждым компьютером, используется так называемая привязка к MAC-адресу: DHCP-сервер имеет таблицу соответствия MAC-адресов IP-адресам, и назначает IP-адреса в соответствии с этой таблицей.
Минус этого решения — необходимость отслеживания MAC-адресов и сопровождения таблицы соответствия.
В некоторых случаях может помочь компромиссное решение — поставить IP-адреса в соответствие не MAC-адресам,
а портам коммутатора, к которым подключен клиентский компьютер.
Другой вариант — выдавать IP-адреса в зависимости от того, с какого DHCP-ретранслятора пришел запрос.
В этом случае выдаются адреса из одной подсети, но с привязкой конкретных диапазонов адресов к различным коммутаторам,
работающим как DHCP-ретрансляторы. Это может помочь облегчить администрирование сети в том смысле, что по IP-адресу клиентского компьютера, будет понятно к какому коммутатору он подключен.
Решить эти задачи позволяет опция 82 протокола DHCP.
Ниже описывается, каким образом настроить DHCP-сервер, чтобы он выдавал IP-адрес в зависимости от того, к какому порту коммутатора подключен клиент, сделавший запрос. Рассматривается случай, когда коммутатор,
через который поступает запрос, используется в роли DHCP-ретранслятора
(решение задачи для случая, когда это не так, описано на странице DHCP snooping).