【发布时间】:2014-10-29 03:04:03
【问题描述】:
我正在尝试编写一个 C# 程序,该程序应该从 Windows 调用 runas 工具并自动输入密码。
我尝试了什么:
Process runas = new Process();
runas.StartInfo.FileName = "runas";
runas.StartInfo.UseShellExecute = false;
runas.StartInfo.RedirectStandardInput = true;
runas.StartInfo.Arguments = "\"/user:domain\\username\" \"cmd.exe\"";
runas.Start();
StreamWriter stream = runas.StandardInput;
stream.WriteLine("our super secret password");
stream.Flush();
stream.Close();
runas.WaitForExit();
runas.Close();
发生了什么:
我得到以下输出。
Please enter the password for "...":
Trying to execute cmd.exe as user "kfz\dummy"...
RUNAS-ERROR: cmd.exe could not be executed
1326: Authentication failed: unknown username or password.
(由我从我的德语窗口翻译)
是的,我四倍检查了密码和用户名。在命令行中手动输入所有内容都可以正常工作。
我的实验:
我也尝试重定向输出并从中读取,但没有成功。
我尝试了写入流的不同变体:
stream.Write("our super secret password");
stream.Write("our super secret password\n");
stream.Write("our super secret password\r\n");
所有结果都相同。
我注意到的:
runas 进程似乎没有等待我写入流。
我在写之前添加了一个睡眠,我立即得到了上面的输出。
恐怕 runas 使用了一些非标准输入.....
研究结果:
在尝试找出 runas 使用哪种输入时,我没有成功。
我找到了 Windows 内置 runas here 的替代方案,但我宁愿不使用它,但如果不可能,我可能会退回到它。
编辑:
好的,我发现消息来源说微软故意阻止人们这样做.....
我讨厌有人这样做!如果我想使用不安全的东西,那么谁是微软来阻止我呢!
抱歉,我跑题了。
一个问题仍然存在……我们还能以某种方式解决它吗?我们可以破解 runas 吗? ;)
【问题讨论】:
-
这听起来不是个好主意。你为什么想做这个?一旦打开
cmd,用户就可以对它做任何他想做的事情。你为什么要试图绕过这样的安全性?另外,您打算在哪里获取密码?或者这是试图促使用户告诉你他的管理员密码? :D -
调用 cmd.exe 只是为了测试目的,最后我会执行我们编写的某些程序。我们希望为非特权用户提供某些需要管理员权限的任务。