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

Ch3*_*33f 2 c# windows stdin runas

我正在尝试编写一个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();
Run Code Online (Sandbox Code Playgroud)


发生了什么:
我得到以下输出.

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.
Run Code Online (Sandbox Code Playgroud)

(由我在德语窗口翻译)

是的,我在quadrupel检查了密码和用户名.在命令行中手动输入所有内容都可以正常工作.

我尝试过的内容:
我尝试重定向输出并从中读取,但没有成功.
我尝试了不同的写入流的变体:

stream.Write("our super secret password");
stream.Write("our super secret password\n");
stream.Write("our super secret password\r\n");
Run Code Online (Sandbox Code Playgroud)

所有结果都是相同的行为.


我注意到:
runas进程似乎不等我写入流.
我在写作之前添加了睡眠,我立即得到了上面的输出.

我担心runas使用一些非输入.....

研究结果:
在试图找出runas使用什么样的输入时我没有成功.
我在这里找到了一个替代windows内置的runas 但是我宁愿不使用它,尽管如果不可能的话我会回到它.
编辑:
好的我发现消息说微软故意阻止人们这样做.....
我讨厌有人这样做的时候!如果我想使用不安全的东西那么谁是微软让我远离那个!
对不起,我下了话题.

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

Lua*_*aan 9

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

无需使用runas.

ProcessStartInfo让你直接指定UserNamePassword.

例如:

var psi = new ProcessStartInfo();

psi.Domain = "YourDomain";
psi.UserName = "YourUserName";
psi.Password = securePassword;
psi.FileName = "cmd.exe";

Process.Start(psi);
Run Code Online (Sandbox Code Playgroud)