我相信我已经阅读了所有相关的Process.Start
假冒问题 - 至少我可以通过谷歌找到这些问题,但我找不到符合这种情况的问题(并且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
未按照我的预期进行身份验证的原因?
注意:凭证是正确的 - 我甚至使用从记事本复制/粘贴到理智检查
答案 0 :(得分:1)
基本上,你使用runas和/ netonly。但您仍需要手动输入密码。您可以执行/ savecred来缓存信用。