4

LogonUserを呼び出して、資格情報のセットを検証しようとしています。

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

また、アカウントが無効になっている場合でもtrueを返します。

ここに画像の説明を入力


また、 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(ログオン試行に失敗しました)

悪化しているのは、この動作が1台のマシンでのみ発生していることです。

LogonUserおよび Security Support Provider Interface 全体が、特定のドメインに参加しているマシンで無効になっているアカウントの資格情報が有効であることを示すのはなぜですか?

  • (誤って) 成功するドメイン参加マシンLogonUser: Windows XP SP2
  • LogonUser(正しく) 失敗するドメイン参加マシン: Windows XP SP2

アップデート:

というローカル ユーザーはありませんForest:

ここに画像の説明を入力

という名前のローカル ユーザーもいませんForest

ここに画像の説明を入力

私が求めているのはavatopia.com\Forestではなくであるため、これは無関係ですspeeder\Forest

oi vayアクセスを許可されるべきではないものに、障害のあるユーザーがアクセスを許可されたという理由だけで、人々はパンティを束ねます。

4

2 に答える 2

1

キャッシュされた資格情報を使用している可能性が非常に高いというルークに同意します。ドメイン コントローラに ping を送信できるからといって、ドメイン コントローラと正しく通信できるとは限りません。

試行できるテストの 1 つは、そのフォレスト ガンプ アカウントを使用してそのコンピューターにログオンすることです。はい、これを行うには対話型ログオンの権利を彼に付与する必要があるかもしれませんが、トラブルシューティングの目的のためだけです.

これを証明するためにできるもう 1 つのことは、資格情報のキャッシュの問題によるものであり、ドメイン コントローラーとコンピューターの間のネットワーク トラフィックをキャプチャすることです。NTLM または Kerberos トラフィックがあるかどうかを確認します。デフォルトでは、Kerberos を使用して KDC と通信する必要があります。それが失敗した場合は、NTLM を使用して NetLogon サーバーと通信する必要があります。

資格情報のキャッシュが本当の問題である場合は、AcquireCredentialsHandle の呼び出しで「ネゴシエート」の代わりに「kerberos」を使用することで簡単に修正できると思います。

于 2012-03-22T00:30:08.853 に答える
0

LOGON32_LOGON_INTERACTIVE代わりに使用するとどうなりますか?ドキュメントとNETWORKオプションをざっと読むだけで、別のタイプのトークンが取得されるので、あなたが見ている動作を想像することができます.

于 2012-03-19T16:22:47.353 に答える