启动runas作为子进程,并将密码写入stdin

本文关键字:密码 stdin runas 子进程 启动 | 更新日期: 2023-09-27 18:20:34

我正在尝试编写一个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 "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进程似乎没有等待我写入流
我在写作前添加了一个Sleep,我立即得到了上面的输出

恐怕runas使用了一些非sd输入

研究结果:
在试图找出runas使用的输入类型时,我没有成功
我在这里找到了windows内置runas的替代方案,但我宁愿不使用它,尽管如果不可能的话,我可能会放弃它。
编辑:
好吧,我发现消息来源说微软故意阻止人们这么做
我讨厌别人那样做!如果我想使用不安全的东西,那么谁是微软来阻止我
抱歉我跑题了

还有一个问题。。。我们还能以某种方式绕过它吗?我们能破解runas吗?;)

启动runas作为子进程,并将密码写入stdin

不应该这样做的全部原因是因为有一个API。

无需使用runas

ProcessStartInfo允许您直接指定UserNamePassword

例如:

var psi = new ProcessStartInfo();
psi.Domain = "YourDomain";
psi.UserName = "YourUserName";
psi.Password = securePassword;
psi.FileName = "cmd.exe";
Process.Start(psi);