/NetOnly 从非域 PC 模拟域用户
Posted
技术标签:
【中文标题】/NetOnly 从非域 PC 模拟域用户【英文标题】:/NetOnly Impersonation of a domain user from a non-domain PC 【发布时间】:2013-11-04 12:32:30 【问题描述】:我相信我已经阅读了所有相关的Process.Start
模拟问题 - 至少我可以通过 Google 找到所有问题,但我还没有找到与这种情况相匹配的问题(90% 是关于:ASP 这是一个整体不同的球赛)
场景:我们有一个小工具,它使用当前用户凭据来查询 AD,获取匹配搜索的服务器列表,通过 SMB 连接到它们并获取共享列表。
有人要求我使用域用户的凭据在不在域上的机器上运行此过程。
我添加了一个开关,它会在启动时提示输入凭据,然后使用适当的凭据 Process.Start() 相同的可执行文件(以节省学习runas /netonly ...
的人)。
这给了我几个问题。我正在测试的代码如下...
Dim ProcInfo As New ProcessStartInfo With
.Domain = dlgImpersonate.Domain,
.UserName = dlgImpersonate.Username,
.Password = dlgImpersonate.Password,
.FileName = Reflection.Assembly.GetEntryAssembly.Location,
.UseShellExecute = False
Try
Process.Start(ProcInfo)
ShouldEnd = True
Catch ex As Exception
'HandleException(ex)
MessageBox.Show(ex.Message, "Impersonation failed", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
所以...如果我在我的机器上(在域上)运行代码,我可以冒充任何人。查询 AD 有一些怪癖,但这是一个不同的问题。
如果我在全新的机器(而不是域)上运行代码,我会得到:
Win32Exception: Logon failure: unknown user name or bad password
Stack:
at Process.StartWithCreateProcess(ProcessStartInfo startInfo)
at Process.Start(ProcessStartInfo startInfo)
...My code
我想知道机器是否只是不知道域或如何对其进行身份验证,所以我然后从命令提示符尝试...
runas /netonly /user:MyDomain\MyUser Test.exe
这很好用。
那么...我怎样才能找到为什么 Process.Start
没有按照我的预期进行身份验证?
注意:凭据是正确的 - 我什至求助于从记事本复制/粘贴到完整性检查
【问题讨论】:
【参考方案1】:查看此链接:http://codebetter.com/jameskovacs/2009/10/12/tip-how-to-run-programs-as-a-domain-user-from-a-non-domain-computer/
基本上,您将 runas 与 /netonly 一起使用。但是您仍然需要手动输入密码。您可以执行 /savecred 来缓存凭据。
【讨论】:
非常感谢,这非常接近我想要的。显然,我宁愿不必展示控制台,但我也许可以解决这个问题……让我再读一读。 那个链接是很棒的信息。我不敢相信这篇文章没有得到更多的支持。它应该被标记为答案,因为我从来没有找到任何接近这个功能级别的东西。 这比其他任何事情都更接近,所以我要接受。对于未来的猎人,有人设法通过 Win32 API 从 C# 调用它:***.com/a/11672293/156755(您可能希望将其包含在您的答案中)。感谢@DarrenMB 把我的注意力拉回来以上是关于/NetOnly 从非域 PC 模拟域用户的主要内容,如果未能解决你的问题,请参考以下文章
如何从非域注册的 Linux 机器使用 SQuirreL SQL 连接到 SQL Server?