1

我正在寻找一种方式来捕捉当前会话到一个变量,我以后可以通过网络凭据...PowerShell的:从运行方式启动时/ netonly

关键是要执行发现默认网络凭据在我有帐户访问权限/特权的外部域上执行命令,但源域和目标域之间没有信任关系。

首先,我们认为使用runas命令(运行方式/ netonly /用户催生了一个PowerShell中运行:DOMIAN \帐户PowerShell的

在这里,我可以做几乎所有我想除了建立在一个事件任务调度程序没有硬编码的用户名/密码,进入命令行

调用命令-computer $目的地-ScriptBlock {schtasks的-ru域\帐户密码-rp}

我所希望做的是一样的东西

$ username =获取当前会话网络用户名($(whoami)调出实际的本地longon帐户,而不是产生powershell窗口的runas帐户)

$ password =获取RunAs命令时输入的密码被执行

+3

这听起来像另一个[当人们要求安全漏洞作为功能](http://blogs.msdn.com/b/oldnewthing/archive/2005/05/04/414602.aspx)。 –

回答

3

一旦从输入的证书创建安全令牌并根据活动目录进行验证,密码就不再存在。它不可用于其他地方的检索和重用。只有令牌保留。这是设计。

UPDATE

我挖了一个远一点,以加强我的情况,这不是如上相当,但最终的结果是一样的。与runas.exe一起使用的密码似乎不可用。网络凭据是而不是针对AD进行了验证,因为您经常使用/netonly来处理远程,不受信任的域,所以回想起来有意义:根据定义,您无法验证本地系统的远程凭据。来自MSDN:

以下是标志LOGON_NETCREDENTIALS_ONLY的信息,用于CreateProcessWithLogonW

登录,但仅在网络上使用指定的凭据。新的 进程使用与调用方相同的令牌,但系统会在LSA内创建一个新的登录会话,并且该进程将使用指定的 凭据作为默认凭据。

此值可用于创建一个进程,该进程在本地使用不同的凭证集 而不是远程执行。这在 没有信任关系的域间方案中很有用。

系统不验证指定的凭证。因此, 进程可以启动,但可能无法访问网络资源。

好的,因为它不能验证凭证并获得令牌,所以它必须将密码存储在内存中的某个地方,因为它必须通过SSPI之后的线路传递它们。那么,我们可以从runas.exe发起的流程中获得他们吗?让我们来看看:

PS> runas /netonly /user:foo\bar powershell.exe 
Enter the password for foo\bar: ****** 

我字面上foo\bar域和用户以上。如已经提到的那样,它没有被验证。我输入了密码12345。上述行将启动一个新的PowerShell实例。因此,从这个新实例中,我们来看看默认的网络凭据:

PS> [System.Net.CredentialCache]::DefaultNetworkCredentials 

UserName           Domain 
--------           ------ 

噢,好运气:没有什么。我的猜测是证书在内核的某些加密部分内存中保护着,可能是从撬过程中无法获得的LSA(本地安全机构)。

+0

如果您捕获变量中的凭据,则密码*仍*。试试这个:'$ cred = get-credential; $ cred.GetNetworkCredential()。password;'[另见](http://blogs.technet.com/b/heyscriptingguy/archive/2013/03/26/decrypt- powershell-secure-string-password.aspx) – alroc

+0

xOn - 那么cmdlet从哪里获取信息?通过执行powershell runas,通常需要我输入一组新凭据的cmdlet才能使用包装到powershell会话中的凭证。 –

+0

cmdlet *不*获取信息。这发生在堆栈上方;使用/ netonly意味着Windows将自动使用备用令牌进行网络访问,但它将使用进程级令牌进行本地工作。这都是关于令牌 - 密码早已消失。 – x0n

相关问题