Получаем пароль локального Администратора из GPO (Groups.xml)

Все-таки архитектурные решения Windows довольно странные.
Даже в групповых политиках есть критические уязвимости, которые никто не закрывает годами.
Например в AD, основанной на Windows 2008 и выше (в том числе и Windows 2012R2) есть параметр политики, которым можно задать пароль для локального администратора на компьютерах, которые входят в домен. Но данный параметр хранится практически в открытом виде. Точнее он зашифрован, причем с помощью AES256, только вот ключ шифрования хранится в открытых источниках, да и сам файл доступен почти всем.

А теперь попробуем проэксплуатировать эту уязвимость.

Для начала создадим политику, в которой будет задаваться пароль локального администратора для членов домена.
Далее в политике перейдем по адресу:
Конфигурация компьютераНастройкаПараметры панели управленияЛокальные пользователи.
И создадим нового пользователя.
Как это сделать — видно на скриншоте.
После нажатия ок, нас предупредят, что это все не безопасно (но кто на это смотрит…).

win_local_admin_1

Политика создана. Теперь попробуем получить пароль. Для этого нам потребуется любой ПК, который имеет авторизацию в домене.
Войдем на сервер AD (10.XX.XX.2) в расшаренные папки и увидим там общую папку sysvol.
Увидим там папку нашего домена: xxxxx.ru
А в ней папку: Policies
Теперь остается просмотреть все папки политик на файлик Groups.xml по адресу \Machine\Preferences\Groups\.

У меня этот файл лежал в папке:
\\10.xx.xx.2\sysvol\xxxxx.ru\Policies\{B10C9C84-078D-445D-A321-C67ADBDF444C}\Machine\Preferences\Groups\Groups.xml

win_local_admin_2

Теперь открываем этот файл:

И находим в нем строчку:

где qXwoEIcqMbQNUxJrQnGUp1jh90pNEYWFIv60CCLtPqs и есть хэш нашего пароля.

Остается его только расшифровать. Теоритически AES256 тажело расшифровать, но только не в нашем случае.
Для расшифровки качаем CrypTool — очень полезную утилиту для работы с хэшами.
https://www.cryptool.org/en/

Запускаем его и добавлем в него наш хэш.
особенности Base64 в том, что его длина должна быть кратна 4. Поэтому считаем блоки по 4, и если в последнем блоке не хватает символов, то недостающие дописываем символами =.
В моем случае это был один символ =.

Теперь декодируем его из Base64

win_local_admin_3

Indiv. ProceduresToolsCodesBase64 Encode/DecodeBase64 Decode

Полученный код зашифрован AES256 и ситуация кажется безисходной, только вот ключ расшифровки Microsoft сама выложила в открытые источники (MSDN 2.2.1.1.4 Password Encryption).
И этот код (hex):
4e9906e8fcb66cc9faf49310620ffee8f496e806cc057990209b09a433b66c1b

Теперь можно запустить расшифровку:

win_local_admin_4

Для этого выбираем AnalysisSymmetric Encryption (modern)AES (CBC)…

win_local_admin_5

В длине ключа (Key length:) выбираем 256 bits, вводим ключ, официально полученный от Microsoft и нажимаем Start.

Через секунду получаем наш код:

win_local_admin_6

win_local_admin_7

Итого нам остается только удалить из ключа лишние точки, которыми разделены символы, и у нас есть пароль локально администратора всех компьютеров, к которым применяется эта политика безопасности (сам пароль 123QAZwsx).

Добро пожаловать в систему.

P.S. На заметку администраторам: если данным методом все-таки необходимо воспользоваться, то отключите политику сразу после того как она была выполнена.

Заказать Аудит Безопасности или Пентест Вашей IT-инфраструктуры

Быть уверенным в своей IT-инфраструктуре — это быть уверенным в завтрашнем дне.

Для того, чтобы сделать заказ:

Заполните форму обратной связи и мы обязательно с вам свяжемся:
Форма обратной связи
Позвоните нам по телефону:
+7(909)952-44-33
Напишите нам на электронную почту:
order@blackdiver.net
Напишите нам в Telegram:
Telegram
Другие способы связи Вы сможете найти в разделе Контакты.

3 мысли о “Получаем пароль локального Администратора из GPO (Groups.xml)”