LogonUser возвращает true для отключенной учетной записи - PullRequest
4 голосов
/ 19 марта 2012

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

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

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

enter image description here


Я также попытался использовать SSPI напрямую для проверки учетных данных , что включает в себя вызов:

  • 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);

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

Попытка SSPI с неверным паролем также (правильно) завершается неудачно:

  • AcquireCredentialsHandle(..., "Negotiate", SECPKG_CRED_OUTBOUND, ..., ["forest", "adf342sdf3", "avatopia.com"], ...)
  • InitializeSecurityContext(...)
  • AcquireCredentialsHandle(..., "Negotiate", SECPKG_CRED_INBOUND, ...)
  • AcceptSecurityContext(...) не удается с 8009030C ( Ошибка входа в систему )

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

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

  • присоединенный к домену компьютер, на котором LogonUser (неверно) завершается успешно: Windows XP SP2
  • присоединенный к домену компьютер, на котором LogonUser (правильно) завершается ошибкой: Windows XP SP2

Обновление:

Нет локального пользователя с именем Forest:

enter image description here

и нет локального пользователя с именем Forest:

enter image description here

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

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

Ответы [ 2 ]

1 голос
/ 22 марта 2012

Я согласен с Люком, что, скорее всего, он использует кэшированные учетные данные.Возможность проверки связи с контроллерами домена не означает, что он может правильно с ним общаться.

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

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

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

0 голосов
/ 19 марта 2012

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

...