Принудительный вход Kerberos или NTLM в домен Active Directory - PullRequest
0 голосов
/ 07 марта 2019

Может кто-нибудь помочь со следующим вопросом

Я хочу иметь возможность принудительного входа NTLM или Kerberos на контроллер домена Active Directory в качестве отдельного пользовательского принципа

Первоначально,Я просто попробовал команду Windows NET следующим образом:

net use \ DCName \ Sharename / user: DomainName \ Имя пользователя password01 и net use \ 10.10.10.10 \ Sharename / user: DomainName \ Username password01

первый для Kerberos в качестве SPN (имя участника службы) может быть получен и, следовательно, хэш для использования с шифрованием билетов Kerbberos

Второй для NTLM, поскольку SPN не может быть получен на основе IP-адреса и, следовательно, падаетвернуться к NTLM

У меня были очень смешанные результаты с приведенным выше, поэтому я хочу найти альтернативный метод (так как мне нужно ввести лоты или имя пользователя и пароль для создания большого количества входов в систему, например, Kerberosили NTLM по желанию)

Итак, в следующем я попробовал

[system.reflection.assembly]::LoadWithPartialName('System.DirectoryServices.AccountManagement')
$D = [system.DirectoryServices.AccountManagement.ContextType]::Domain
$PC = [system.DirectoryServices.AccountManagement.PrincipalContext]$D
$M = [system.DirectoryServices.AccountManagement.ContextOptions]::Negotiate

$PC.ValidateCredentials('User01','Password01',$m)

Однако, как можно себе представитьон только подтвердил комбинацию имени пользователя и пароля, например, он не создал Kerberos TGT для пользователя (что я и хочу сделать при форсировании входа в Kerberos)

Поэтому мой вопрос, пожалуйста, если есть .NETПространство имён, когда вам известны имя пользователя и пароль, вы можете принудительно выдать TGT (для аутентификации Kerberos) или NTLM, войти в систему?

Заранее большое спасибо EB

1 Ответ

0 голосов
/ 07 марта 2019

Почему именно вы хотите это сделать?

Windows действительно не хочет, чтобы вы указывали, какой протокол использовать, а вместо этого просто хочет, чтобы вы использовали Negotiate, чтобы она смело могла перейти на более качественные и более безопасные протоколы.без влияния на приложения.

Эта философия в основном проявилась в основных инфраструктурах, поэтому вы не собираетесь получать специальные API для каждого протокола.

При этом вы можете напрямую обращаться кSSPI определенно передает "Kerberos" или "NTLM".

Суть этого:

Клиент:

AcquireCredentialsHandle(..."Kerberos"...) -> 
InitiateSecurityContext(..."spn/kerb.host"...) => server

Сервер:

AcquireCredentialsHandle(..."Kerberos"...) -> 
AcceptSecurityContext(...iscTicket...)
...