一个 PowerShell 脚本,用于在未加入域的计算机上通过 Windows API 执行 PKINIT 身份验证。
此 cmdlet 通过 PKINIT 使用指定证书创建新的登录会话。
其设计用于在未加入域的虚拟机中运行。该 cmdlet 有两种模式:一种用于设置注册表项,另一种用于修补 LSASS 内存,以绕过与域控制器证书相关的客户端检查。当在未加入域的计算机上运行时,这些检查会失败。
在注册表模式(默认)下,需要管理员权限来设置相关注册表项(并在最后恢复它们)。如果这些项已经设置好,则不需要管理员权限。此外,CA 证书必须添加到受信任的证书颁发机构列表中。如果此方法失败(例如,由于某些无法通过注册表项绕过的检查),可以尝试使用修补方法。修补方法不太优雅,但可以绕过与 KDC 证书相关的任何客户端检查。
在修补模式(-PatchLsass)下,LSASS 中的 KerbCheckKdcCertificate 函数将被修补。由于 KerbCheckKdcCertificate 不是由 kerberos.dll 导出的,因此需要检索符号。为了让此 cmdlet 自动检索符号,需要定义环境变量 _NT_SYMBOL_PATH(例如 SRV*c:\symbols*https://msdl.microsoft.com/download/symbols)。如果符号尚未在磁盘上,则需要 Internet 连接来下载它们。还需要 Windows SDK 来下载符号。默认情况下,脚本将在 C:\Program Files (x86)\Windows Kits\10\Debuggers\x64 中查找它所需的 DLL(dbghelp.dll 和 symsrv.dll)。
有关更详细的说明,请参阅相关的博客文章。
PS > Invoke-RunAsWithCert user.pfx -Domain CORP.LOCAL