В предыдущей статье мы описали процедуру сброса пароля стандартной учётной записи администратора домена Active Directory (учетка administrator). Данный сценарий отлично работает в «стандартной» среде Active Directory, однако в некоторых доменах подобный трюк может не сработать, т.к. при их разворачивании были использованы best practice Microsoft по обеспечению безопасности инфраструктуры AD. В реальных доменах AD для защиты учетной записи администратора домена могут применяться следующие стратегии:
- Переименование стандартной учетной записи администратора Active Directory
- Создание учетной записи-приманки. Учетная запись хоть и имеет имя Administrator, но никакими правами повышенными не обладает. Кроме того, с помощью политик аудита можно настроить оповещение служб безопасности о попытке авторизации с помощью этой учётной записи
- Отключение учетной записи Administrator и предоставление полномочий администратора домена другой учетке.
В этой статье мы попробуем разобрать методики обхода этих стратегий, позволяющих обнаружить в AD все учетные записи с правами администратора домена.
Итак, в предыдущей статье мы показывали, каким образом с помощью создания системного сервиса на контроллере домена можно сбросить пароль домен-админа. Данная команда при загрузке DC сбросит пароль доменной учетной записи administrator (администратора домена) на P@ssw0rd.
sc create ResetADPass binPath= "%ComSpec% /k net user administrator P@ssw0rd" start= auto
Что же делать, если под этой учетной записью авторизоваться не получается? Скорее всего, при разворачивании домена она была защищена по одной из перечисленных выше методик.
Монтируем отключенную базу Active Directory
Попробуем извлечь из базы AD информацию о реальных администраторах домена. Для этого нужно загрузиться в DSRM режиме, в котором база Active Directory (ntds.dit) находится в отключенном состоянии. Нам необходимо локально смонтировать эту базу, чтобы в дальнейшем получить возможность доступа к хранимой в ней информации.
Запустите две командные строки: в первой мы запустим процесс dsamain.exe , во второй будем вводить интерактивные команды.
Совет. При работе на Server Core вторую командную строку можно открыть, выполнив в исходной cmd команду:
start cmd
Перед запуском утилиты dsamain.exe, удостоверимся, что другие сервисы и процессы в настоящий момент не используют порт 389. Сделать это можно командой:
netstat -ano | findstr :389
В том случае, если команда ничего не вернула – все ОК, идем дальше (если вернула нужно найти и отключить найденный процесс).
Утилита dsamain.exe позволяет смонтировать базу AD и выполнять к ней различные запросы LDAP(по сути позволяет организовать автономный LDAP сервер). Утилита запускается со следующими параметрами:
- dbpath – задает путь к файлу ntds.dit.
- allowNonAdminAccess – разрешает осуществлять LDAP запросы к базе AD под локальной учетной записью (по умолчанию доступ разрешен только членам групп Domain Admins и Enterprise Admins).
- ldapPort – позволяет указать порт LDAP. Мы будем использовать стандартный LDAP порт — 389.
Смонтируем базу AD командой:
dsamain -dbpath C:\Windows\NTDS\ntds.dit -allowNonAdminAccess -ldapPort 389
Удостоверимся, что процесс dsamain.exe запущен и слушает 389 порт. Для этого во второй командной строке выполните команду:
netstat -ano | findstr :389
TCP [::]:389 [::]:0 LISTENING 614
TCP 0.0.0.0:389 *:* 614
TCP [::]:389 *:* 614
Получаем, что процесс с Process ID 614 слушает на порту TCP 389.
Проверим, что процесс с PID 604 и есть наш процесс dsamain.exe:
tasklist /fi "pid eq 614" /fo list
PID: 614
Session Name: Console
Session#: 2
Mem Usage: 11,316 K
Теперь, когда база AD смонтирована, мы можем обращаться к ней с помощью утилит ds* (dsget, dsquery и т.д.). Разберем все три варианта скрытия учетной записи администратора домена.
Переименованная учетная запись администратора домена
Как можно определить, что стандартная учетная запись администратора Active Directory переименована?
Стандартный administrator AD имеет известный идентификатор SID, формат которого S-1-5-21-[ид домена]-500, соответственно, нам просто нужно найти в домене объект с таким SID. Во второй командной строке выполните команду:
dsquery user -s localhost | dsget user -s localhost -samid -sid | findstr /c:"-500"
В данном случае, видно, что учетная запись administrator была переименована в itpro.
Сбросить пароль этой учетной записи можно также с помощью специальной службы:
sc create ResetPW binPath= "%ComSpec% /k net user itpro P@ssw0rd" start= auto
Теперь можно размонтировать базу AD (остановить процесс dsamain.exe комбинацией Ctrl+C). Убедитесь, что команда вернула строку
Поддельная учетная запись администратора AD
Как определить, что стандартный Administrator Active Directory не обладает необходимыми правами? Это очень просто. Зная DN (distinguished name) учетной записи administrator, мы можем получить список групп, в которых он состоит:
dsget user "CN=Administrator,CN=Users,DC=winitpro,DC=ru" -s localhost -memberof -expand
«CN=Users,CN=Builtin,DC=winitpro,DC=ru»
Как вы видите, данная учетная запись не состоит в группе администраторов домена (Domain Admins) и не подойдет для наших целей. Следующая методика поможет найти «реальных» администраторов.
Альтернативный администратор домена
Попробуем разобраться как можно получить список учетных записей, обладающих правами администратора домена? Для начала попробуем рекурсивно вывести всех членов группы Administrators (в том числе членов групп Domain Admins и Enterprise Admins).
dsquery group -s localhost -samid "administrators" | dsget group -s localhost -members -expand
«CN=Enterprise Admins,CN=Users,DC=winitpro,DC=ru»
«CN=Administrator,CN=Users,DC=winitpro,DC=ru»
«CN=itpro,CN=Users,DC=winitpro,DC=ru»
Как вы видите, администраторскими правами обладают учетные записи Administrator и itpro. Проверим статус учётной записи Administrator:
dsget user "CN=Administrator,CN=Users,DC=winitpro,DC=ru" -s localhost -samid -sid -disabled
Administrator S-1-5-21-2092397264-2003686862-3249677370-500 yes
Как вы видите, она отключена.
Проверим теперь статус учетки itpro:
dsget user "CN=itpro,CN=Users,DC=winitpro,DC=ru" -s localhost -samid -sid -disabled
itpro S-1-5-21-2092397264-2003686862-3249677370-1107 no
dsget succeeded
Эта учетная запись активна. Проверим в каких группах она состоит:
dsget user "CN=itpro,CN=Users,DC=winitpro,DC=ru" -s localhost -memberof -expand
«CN=Domain Admins,CN=Users,DC=winitpro,DC=ru»
«CN=Enterprise Admins,CN=Users,DC=winitpro,DC=ru»
«CN=Schema Admins,CN=Users,DC=winitpro,DC=ru»
«CN=Domain Users,CN=Users,DC=winitpro,DC=ru»
«CN=Denied RODC Password Replication Group,CN=Users,DC=winitpro,DC=ru»
«CN=Administrators,CN=Builtin,DC=winitpro,DC=ru»
«CN=Users,CN=Builtin,DC=winitpro,DC=ru»
Отлично, у нее есть права администратора домена! Осталось cбросить пароль учетной записи с samid — itpro. Опять таки, сделать это можно с помощью службы:
sc create ResetPW binPath= "%ComSpec% /k net user itpro PA$w0rd94" start= auto
Не забудьте отмонтировать базу AD и перезагрузите сервер.
Здравствуйте! Подскажите пожалуйста, можно-ли при помощи методики описанной в данной статье (sc create ResetPW binPath= «%ComSpec% /k net user itpro PA$w0rd94» start= auto) аналогичным образом вернуть к жизни учетную запись администратора контроллера домена с истекшим сроком? К примеру можно это сделать подобным образом: (sc create ResetPW binPath= «%ComSpec% /k net user itpro /expires:never» start= auto) ?
Добрый день!
Да при наличии физического доступа к DC, вы сможете таким образом сбросить пароль домен админа и установить флаг, что пароль не истекает. Полноценнай инструкция здесь: https://winitpro.ru/index.php/2013/07/22/sbros-parolya-administratora-active-directory/
Спасибо! Ту статью я тоже почитал. Можете подсказать, как в таком случае должна выглядить команда? Вот так будет корректно? sc create ResetPW binPath= «%ComSpec% /k net user itpro PA$w0rd94 /expires:never» start= auto
Именно в таком виде у меня не получилось.
Если вам нужно сбросить пароль администратора (в этом примере он называется itpro), используйте команду:
sc create ResetPW binPath= "%ComSpec% /k net user itpro P@ssw0rd" start= auto
Если нужно установить, что пароль не истекает:
sc create SetPwNotExp binPath= «%ComSpec% /k wmic useraccount WHERE Name='itpro' set PasswordExpires=false» start= auto
Большое спасибо за ответ! Сейчас попробую!
Большое спасибо за ответ! Не получилось. У меня истек срок учётной записи, не пароля. Существует-ли способ установить срок действия учётной записи администратора домена в «никогда» или на более позднюю дату (см. картинку)? Я уже подумываю перевести часы в BIOS-е ))
И нужно-ли останавливать второй контроллер домена?
Нет, не нужно.
2Red
Запустите на контроллере домена интерактивную командную строку с правами системы, как описано здесь: https://winitpro.ru/index.php/2022/12/07/sbros-parolya-v-windows/
Потом в командной строке сбросьте пароль и измените срок действия
net user administrator /expires:never
net user administrator NewPa$$dr0w
Не забудьте потом вернуть cmd.exe на место
Тоже не получилось — на ввод команд выдается ответ: «системная ошибка 1359» (пробовал выполнять эту команду в обычном режиме и режиме DSRM). Я решил пойти другим путем: перевел часы в биос сервера DC (работает под основной ОС на отдельном сервере Windows Server 2008) и биос хостового сервера GC (работает на одном из Hiper-V Windows Server 2012 R2) на 4 месяца назад, зашел под искомой учеткой и отключил ограничение срока действия. Затем вернул значения времени биос серверов на актуальные. Вроде работает, и по учетке пускает почти на все машины, кроме GC сервера. При попытке на него зайти под учеткой админа контроллера домена выдаётся сообщение: «Отсутствуют серверы, которые могли бы обработать запрос на вход в сеть». Подскажите пожалуйста, в какую сторону копать дальше? ))
Собственно такое сообщение появляется при попытке зайти на сервер GC под любой учетной записью. Можно зайти только под локальным админом, но под ним в AD не порулить.
get-ADUser Username -property MemberOf | foreach {$_.MemberOf -like «*Admin*»}