
Beacon Object File (BOF) реализация функциональности dnscmd.exe, используемой для получения удалённого выполнения кода на сервере ADIDNS путём эксплуатации уязвимости ServerLevelPluginDll с помощью MS-DNSP.
Реализация Beacon Object File (BOF) функциональности dnscmd.exe, используемой для получения удалённого выполнения кода на ADIDNS-сервере путём эксплуатации уязвимости ServerLevelPluginDll1 2 3 через MS-DNSP. 4 Для эксплуатации требуется доступ к учётной записи пользователя, являющегося членом группы DnsAdmins.
[!NOTE] Поскольку BOF не поддерживают исключения C нативно, это расширение перехватывает метод
RtlRaiseExceptionи возвращает поток управления обратно в BOF во время RPC-вызовов. Хотя этот метод и является хакерским, он необходим из-за того, что реализация RPC от Microsoft активно использует RpcTryExcept для управления потоком. Это отлично работало в тестовой среде, но имейте в виду, что данная техника может привести к нестабильности beacon.
Для компиляции проекта вы можете использовать make в системе с установленным MinGW:
make
Либо используйте .\build.bat, если вы работаете в командной строке x64 Native Tools Command Prompt for Visual Studio в Windows:
.\build.bat
Оба шага компиляции создадут как файлы .o, так и файлы .exe для экспериментов с функциональностью BOF в лабораторной среде.
Были созданы следующие BOF для взаимодействия с ADIDNS-сервером:
dnsrpc_probe — проверка, жив ли ADIDNS-серверdnsrpc_info — получение текущих настроек ADIDNS-сервераdnsrpc_coerce_write — утилита для принудительной записи файла на сетевой ресурс ADIDNS-сервером, чтобы проверить, может ли ваш контроллер домена получить доступ к указанному сетевому ресурсу, прежде чем вы его «убьёте» с помощью плагина dnsrpc_set_plugin_dll.dnsrpc_set_plugin_dll — настраивает DLL, которая будет загружена при перезапуске сервераdnsrpc_restart_server — отправляет команду на перезапуск ADIDNS-сервераdnsrpc_cleanup — очищает артефакты реестра, оставленные командами dnsrpc_coerce_write и dnsrpc_set_plugin_dll. Должна выполняться непосредственно на контроллере домена.Кроме того, в dnssrv_plugin.c предоставлен пример полезной нагрузки.
[!WARNING] Если контроллер домена по какой-либо причине не сможет получить доступ к указанной вами DLL-нагрузке через
dnsrpc_set_pugin_dll, он откажется запускаться заново, и вы, скорее всего, выведете из строя весь домен. Рекомендуется использоватьdnsrpc_coerce_write, чтобы проверить, может ли контроллер домена действительно подключиться к вашему ресурсу, прежде чем случайно уничтожить цель. Люди, как правило, злятся, когда их DNS выходит из строя.Кроме того,
dnsrpc_restart_serverприведёт к двухминутному простою DNS. Многократный вызов BOF будет увеличивать время ожидания каждый раз, поэтому используйте его с осторожностью.
Для тестирования BOF в среде разработки вы можете использовать такой инструмент, как COFFLoader от TrustedSec, который можно скомпилировать в Windows следующим образом:
cl.exe /W4 /DCOFF_STANDALONE /DDEBUG beacon_compatibility.c COFFLoader.c /Fe:COFFLoader.exe /link advapi32.lib
Затем для выполнения BOF (например, BOF dnsrpc_info) сгенерируйте аргументы и передайте их в COFFLoader:
> python beacon_generate.py
Beacon Argument Generator
Beacon>addWString DC01
Beacon>generate
b'0e0000000a00000044004300300031000000'
Beacon> exit
> cl.exe /c /GS- dnsrpc_info.c /Fo:dist\dnsrpc_info.o
> COFFLoader.exe go dist\dnsrpc_info.o 0e0000000a00000044004300300031000000
...
$SG77912
: Section: 3, Value: 0xA08
$SG77914H
: Section: 3, Value: 0xA48
$SG77915X
: Section: 3, Value: 0xA58
.chks64: Section: 11, Value: 0x0
X: Section: 0, Value: 0x0
Back
Returning
Ran/parsed the coff
Outdata Below:
server name: DC01.research.lan
server version: 4F7C000A (10.0 build 20348)
rpc structure version: 2 (longhorn)
directory services available: yes
admin configured: yes
allow update: yes
is read-only domain controller: no
boot method: 3 (registry)
no recursion: no
round robin: yes
secure responses: yes
forward timeout: 3
recursion retry: 3
recursion timeout: 8
max cache ttl: 86400
directory services polling interval: 180
scavenging interval: 0
log level: 0x00000000
directory services container: cn=MicrosoftDNS,cn=System,DC=research,DC=lan
domain name: research.lan
forest name: research.lan
log file path: (none)
server addresses: fe80:0000:0000:0000:4cbe:0281:82dd:76ed, 172.16.50.107
listen addresses: (none)
forwarders: 8.8.8.8, 1.1.1.1
Для перекомпиляции определений IDL вы можете использовать следующую команду:
midl /W1 /char signed /env x64 /target NT100 /Oicf dnsrpc.idl
Во время разработки флаг _DEBUG приведёт к добавлению wmain в итоговый бинарный файл, а флаг _VERBOSE используется для включения дополнительного журналирования отладки. Для получения дополнительной информации обратитесь к build.bat и Makefile.
Этот проект лицензирован в соответствии с MIT License — подробности см. в файле LICENSE. Я не несу ответственности за любое неправильное использование или ущерб, причинённый в результате использования этого инструмента. Используйте его только в средах, где у вас есть явное разрешение на это.
https://raw.githubusercontent.com/paradoxis/dnsrpc-bof/HEAD/%3Chttps:/medium.com/@esnesenon/feature-not-bug-dnsadmin-to-dc-compromise-in-one-line-a0f779b8dc83%3E ↩
https://raw.githubusercontent.com/paradoxis/dnsrpc-bof/HEAD/%3Chttps:/www.semperis.com/blog/dnsadmins-revisited/%3E ↩
https://raw.githubusercontent.com/paradoxis/dnsrpc-bof/HEAD/%3Chttps:/www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/from-dnsadmins-to-system-to-domain-compromise%3E ↩
https://raw.githubusercontent.com/paradoxis/dnsrpc-bof/HEAD/%3Chttps:/learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dnsp/9500a7e8-165d-4b13-be86-0ddc43100eef%3E ↩