我想写一个C#程序,应该从Windows调用runas工具并自动输入密码。
我试了一下:启动runas作为子进程并将密码写入stdin?
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();
什么happended:
我得到以下输出。
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.
(从我的德语Windows由我翻译)
是的,我quadrupel检查用户名和密码。手动输入命令行中的所有内容都可以正常工作。
我尝试过:
我试图输出重定向以及和从中读取,没有成功。
我试着写流的不同变种:
stream.Write("our super secret password");
stream.Write("our super secret password\n");
stream.Write("our super secret password\r\n");
在相同的行为所有结果。
我注意到:
的运行方式过程似乎不等待我写信给流。
我在写入之前添加了睡眠状态,然后立即获得上述输出。
恐怕运行方式使用一些nonstd输入.....
研究结果:
在试图找出什么样的输入运行方式的使用,我没有全成。
我发现了一个替代windows内置runas here但是我不想使用它,虽然我可能会回落到它,如果它是不可能做到的。
编辑:
好吧,我发现来源称微软故意阻止人们这样做.....
我讨厌有人做的!如果我想使用一些不安全的东西,那么谁是微软来阻止我呢!
对不起,我下了话题。
还有一个问题......我们还能以某种方式避开它吗?我们可以攻击马亚斯吗? ;)
这听起来不像是个好主意。你为什么想做这个?一旦打开'cmd',用户就可以做任何他想做的事情。你为什么试图绕开这样的安全?另外,你打算如何获得密码?或者这是企图推动用户告诉你他的管理员密码? :D – Luaan 2014-09-04 13:09:00
调用cmd.exe只是为了测试最后的东西,我会执行某些我们编写的程序。我们希望将需要管理员权限的特定任务提供给我们的非特权用户。 – Ch33f 2014-09-04 13:28:44