2012-03-19 6 views
4

я звоню LogonUser, чтобы попытаться проверить набор учетных данных:LogonUser возвращает истину для отключенной учетной записи

LogonUser("forest", "avatopia.com" "stapler", 
     LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_WINNT50, out token); 

И это возвращает правда, даже если учетная запись отключена:

enter image description here


Я также пробовал использовать, который включает в себя призвание:

  • AcquireCredentialsHandle(..., "Negotiate", SECPKG_CRED_OUTBOUND, ..., ["forest", "stapler", "avatopia.com"], ...)
  • InitializeSecurityContext(...)
  • AcquireCredentialsHandle(..., "Negotiate", SECPKG_CRED_INBOUND, ...)
  • AcceptSecurityContext(...)
  • InitializeSecurityContext(...)
  • AcceptSecurityContext(...)

На большинстве машин начальный вызов AcquireCredentialsHandle не работает , если учетная запись пользователя отключена. Но на этой конкретной машине я тестирование завершает весь цикл и работает.


Если я попробовать с недействительных пароль, то LogonUser делает (правильно) неудачу:

LogonUser("forest", "avatopia.com" "adf342sdf3", 
     LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_WINNT50, out token); 

возвращает ложные и GetLastError возвращается 1326 (ошибка входа в систему: неизвестное имя пользователя или пароль)

Попытка SSPI с неверным паролем тоже (правильно) не:

  • AcquireCredentialsHandle(..., "Negotiate", SECPKG_CRED_OUTBOUND, ..., ["forest", "adf342sdf3", "avatopia.com"], ...)
  • InitializeSecurityContext(...)
  • AcquireCredentialsHandle(..., "Negotiate", SECPKG_CRED_INBOUND, ...)
  • AcceptSecurityContext(...)терпит неудачу с 8009030C (Попытка входа в систему не удалось)

Что такое агрессия, так это то, что это происходит только на один машина.

Зачем нужен и весь интерфейс поставщика поддержки безопасности, укажите, что credentails отключенной учетной записи на определенном компьютере, подключенном к домену: действительны?

  • домену машины, где LogonUser (неправильно) преуспевает: Windows XP SP2
  • домену машины, где LogonUser (правильно) терпит неудачу: Windows XP SP2

Update:

Нет местного пользователя, который называется Forest:

enter image description here

и не существует какой-либо локальный пользователь называется Forest:

enter image description here

, который не имеет никакого значения, потому что я прошу avatopia.com\Forest, а не speeder\Forest.

oi vay Люди получают свои трусики в связке только потому, что пользователю с ограниченными правами было разрешено получить доступ к чему-то, к которому у них не должно было быть доступа.

+0

Возможно, есть локальный пользователь с тем же именем, который отключен, когда пользователь домена активен? Для меня похоже, что вы просматриваете пользователей в локальной оснастке управления. Это также отключает пользователей домена? –

+0

@ThorstenDittmar я проверил это; Я добавлю скриншот на вопрос. –

+1

Возможно, немой вопрос, но можете ли вы дойти до контроллера домена с этой машины, когда это происходит? Возможно, кэшированные учетные данные используются. – Luke

ответ

0

Что произойдет, если вы используете вместо этого LOGON32_LOGON_INTERACTIVE? Просто просмотр документов и опция NETWORK предоставляют вам другой тип токена, чтобы я мог представить себе поведение, которое вы видите.

1

Я согласен с Люком, что, скорее всего, он использует кешированные учетные данные. Able to ping контроллеры домена не означает, что он способен правильно говорить с ним.

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

Другое, что вы можете сделать, чтобы доказать это, связано с проблемой кэширования учетных данных - это захват сетевого трафика между вашим контроллером домена и вашей машиной. Посмотрите, есть ли какой-либо трафик NTLM или Kerberos. По умолчанию он должен использовать Kerberos для общения с KDC. Если это не удается, он должен поговорить с сервером NetLogon, используя NTLM.

Если проверка подлинности является реальной проблемой, я подозреваю, что вы можете просто исправить ее, используя «kerberos» вместо «договариваться» в вызове AcquireCredentialsHandle.

Смежные вопросы