我正在尝试编写一个C#程序,该程序应该从窗口调用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 "kfzdummy"...
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 passwordn");
stream.Write("our super secret passwordrn");
所有的结果都是一样的
我注意到:
runas进程似乎没有等待我写入流
我在写作前添加了一个Sleep,我立即得到了上面的输出
恐怕runas使用了一些非sd输入
研究结果:
在试图找出runas使用的输入类型时,我没有成功
我在这里找到了windows内置runas的替代方案,但我宁愿不使用它,尽管如果不可能的话,我可能会放弃它。
编辑:
好吧,我发现消息来源说微软故意阻止人们这么做
我讨厌别人那样做!如果我想使用不安全的东西,那么谁是微软来阻止我
抱歉我跑题了
还有一个问题。。。我们还能以某种方式绕过它吗?我们能破解runas吗?;)
不应该这样做的全部原因是因为有一个API。。
无需使用runas
。
ProcessStartInfo
允许您直接指定UserName
和Password
。
例如:
var psi = new ProcessStartInfo();
psi.Domain = "YourDomain";
psi.UserName = "YourUserName";
psi.Password = securePassword;
psi.FileName = "cmd.exe";
Process.Start(psi);