清除网络共享的缓存身份验证

清除网络共享的缓存身份验证

上下文:我使用 NTLMv2 身份验证在 Windows 中映射 cifs 共享,因为旧服务器不支持 kerberos。系统未提示我登录:

net use S: \\server.domain.com\share /persistent:yes
The command completed successfully.

在我更改密码之前,这都没问题。即使在多次注销并重新登录或重新启动后,Windows 似乎仍会继续尝试使用旧凭据进行连接。我发现唯一有效的方法是使用不同的主机名进行连接:

:: After changing password, restarting, and logging in with updated password
net use S: \\server.domain.com\share /persistent:yes
Enter the user name for 'server.domain.com'
:: running credentials failed, 'access denied' message logged on server

:: Manually entering credentials works:
net use S: \\server.domain.com\share /persistent:yes
Enter the user name for 'server.domain.com': DomainUser
Enter the password for 'DomainUser' to connect to 'server.domain.com':
The command completed successfully.

:: Using a different host name works
net use S: \\192.168.100.100\share /persistent:yes
The command completed successfully.

问题最终“消失”,但我认为该设备的 NTLM 令牌/会话/密钥在某个时候会过期,Windows 被迫创建一个新的。或者也许还有其他解释?我已经看过以下内容:

  • 我发现有关 NTLMv2 的所有内容都表明重启后不会保留任何内容
  • SMB 允许缓存文件,但我还没有找到一种方法来清除它,除非在注册表中禁用它
  • 我仔细检查了Kerberos 令牌klist以及Credential Manager 中的任何内容
  • net仅当您指定时才保存凭据/SaveCred,并且无论如何都会被删除/delete

我想了解哪个函数可能导致此行为,或者将其缩小到某种错误。有什么想法吗?

编辑:经过对 wireshark 的一番摆弄后,我发现它是由字符串连接在一起的:

  • 该服务器宣称它支持 Kerberos(尽管正常情况下不会创建 Kerberos 票证)。
  • 客户端实际上尝试获取 kerberos 票证,但由于不支持加密类型而失败。它退回到 ntlm 并且成功了...
  • 由于某些我还没有弄清楚的原因,尝试使用过期的凭据进行连接会导致客户端开始成功获取 kerberos 令牌,这是不正确的。
  • 服务器无法使用令牌验证用户身份,因此拒绝访问。

答案1

凭证可能存储在凭证管理器,删除旧的凭据,Windows 将再次询问密码(或者直接在凭据管理器中编辑凭据并提供新密码)。

答案2

在 Powershell 中运行 net use * /delete 拯救了我,让我摆脱了类似的困境。我之前尝试过其他命令,但都无济于事。

答案3

我遇到了类似的问题,并使用不存在的用户名强制 Windows 10 忘记缓存的密码。以下是名为 server.local 的服务器的一些伪代码。根据您的情况,许多步骤可能不需要:

  1. 清除显式缓存的凭据:
    cmdkey /delete:server.local
  2. 删除所有网络连接:
    net use /d \server.local
  3. 检查是否没有其他连接:
    net use
  4. 强制 Windows 使用无效用户名和 CTRL-C 连接,当它卡住时:
    net use \server.local\share /user:garbageuser
  5. 再次使用正确的用户连接。cmdkey
    /add:server.local /pass /user:correctuser
    net use \server.local\share
  6. 现在 Windows 文件资源管理器将能够再次连接。

相关内容