gpt4 book ai didi

powershell - 是否可以以某种方式将 WindowsIdentity 类型转换或转换为 PSCredential 类型?

转载 作者:行者123 更新时间:2023-12-02 22:39:31 25 4
gpt4 key购买 nike

上下文:在 PowerShell 中工作,需要 PSCredential 对象,有一个 WindowsIdentity 类型的对象。

假设您使用以下方法获取 WindowsIdentity 类型:

[安全.Principal.WindowsIdentity]::GetCurrent()"

您需要 PSCredential 对象才能进行网络调用,例如 Invoke-RestMethod。

除了调用通常的 Get-Credential 并提示用户输入用户名和密码之外,我们真的可以使用当前的安全上下文来创建凭证对象吗?例如,我们能否将 WindowsIdentity 对象转换为 PSCredential(如果不是直接转换,则通过一系列步骤?)。

如果没有,那么关于从当前安全上下文创建 PSCredential 对象的任何其他想法(不指定用户名或密码 - 或者存储加密的用户名和密码,因为这也需要在密码更改时更新)?

以前可能有人问过类似的问题,但我找不到尝试将 WindowsIdentity 转换为 PSCredential 类型的方法 - 或者关于为什么这可能会被设计阻止的任何明确答案。如果这根本不可能 - 不支持它的原因可能是什么?您是否看到任何可行的解决方法?(我尝试添加一个标签:PSCredential,但该标签尚不存在,而且我没有足够的声誉来创建它:我想添加该标签:也许社区中的某个人可以添加它。谢谢)

最佳答案

我相信其他人会对此有自己的看法,但据我了解,这里有一些事情会使这成为一个真正的挑战,并且作为一项运营交易并不谨慎。

[Security.Principal.WindowsIdentity]::GetCurrent(), 为您提供有关您在网络上经过身份验证的身份的信息。 它不包含任何关于用户密码的信息

( https://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity(v=vs.110).aspx ),

System.Management.Automation.PSCredential 需要它

(https://learn.microsoft.com/en-us/dotnet/api/system.management.automation.pscredential?view=powershellsdk-1.1.0)。

记住,GetNetworkCredential 的目标

(https://learn.microsoft.com/en-us/dotnet/api/system.management.automation.pscredential.getnetworkcredential?view=powershellsdk-1.1.0#System_Management_Automation_PSCredential_GetNetworkCredential)

(这当然是一种方法 System.Management.Automation.PSCredential),用于将您的用户名分解为单独的域和用户名字符串,并以明文形式向您提供凭据密码。

对于网络、客户端访问,如果没有提供有效密码,PSCredential 将无法工作。当然,如果您亲自输入了信息,则只有您可以撤销它,而远程人员或服务无法撤销。

想一想。您能想象能够做到这一点的风险后果有增无减吗?

能够动态地提取当前登录用户的所有身份验证熵。这将是一个即时的 ESP(模拟/特权升级)问题。密码混淆、长度、复杂性,用这样的方法是没有意义的。思考 Pth(传递类似哈希的攻击)情况,而无需捕获哈希。

想象一下,启动与任何远程主机的远程 session (无论谁登录),利用您在此处声明的内容,从而冒充(拥有他们所有的权利和特权)用户做非常邪恶的事情甚至只是意味着事情(更改他们的密码、桌面设置、ADDS 属性,比如是否允许他们更改那里的图片、电话号码、娘家姓等,所有这些都记录在审计日志中,就好像该用户所做的一样)。您可以登录到他们的个人人力资源文件,将 cred 对象传递到 HR 网站等。我确信这不是您的意图(至少我希望不是),但仍然如此。

综上所述,如果您想要模拟用户,那么有一些资源可以提供有关如何执行此操作的方法。然而,当您查看执行此操作的代码时,它比您在 MS PowerShell Gallery 中要求的内容更复杂,但即使它希望您向它传递一个真正的 cred 对象而不是 WI 对象。

通过网络进行访问需要完整的身份、用户和密码。每次尝试触及您尚未触及或很久没有触及的资源时,您的 KDC(域 Controller )都将参与进来,如果没有完整的信用,KDC Curb TGT 将失败。

更新

希维什苏曼

至于---

Thanks. Regarding: "Yet, as you look at the code to do it, it's more involved than just what you are asking for ..." - Would it be possible for you to point me to some of the code that you are referring to in your comment?

这是我指的代码。

Impersonate a User

New-ImpersonateUser uses the LogonUser method from the advapi32.dll to get a token that can then be used to call the WindowsIdentity.Impersonate method in order to impersonate another user without logging off from the current session. You can pass it either a PSCredential or each field separately. Once impersonation is done, it is highly recommended that Remove-ImpersonateUser (a function added to the global scope at runtime) be called to revert back to the original user.

https://gallery.technet.microsoft.com/scriptcenter/Impersonate-a-User-9bfeff82

关于powershell - 是否可以以某种方式将 WindowsIdentity 类型转换或转换为 PSCredential 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49185431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com