【问题标题】:Start runas as subprocess and write password to stdin?启动 runas 作为子进程并将密码写入标准输入?
【发布时间】: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 只是为了测试目的,最后我会执行我们编写的某些程序。我们希望为非特权用户提供某些需要管理员权限的任务。

标签: c# windows stdin runas


【解决方案1】:

您不应该这样做的全部原因是,有一个 API 可以做到这一点

无需使用runas

ProcessStartInfo 让您可以直接指定UserNamePassword

例如:

var psi = new ProcessStartInfo();

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

Process.Start(psi);

【讨论】:

  • 听起来不错,似乎在关闭 UAC 的情况下工作,作为管理员。谢谢! :D 现在将测试它是否可以在 UAC 上以及作为非特权用户使用。编辑:工作! :D 非常感谢!
  • @Ch33f 很高兴听到这个消息 :) 您可能希望将答案设置为正确。
  • 如果上下文中的用户配置文件不存在,这将不会创建配置文件。因此,当需要 runas 时,这并不总是一种解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 1970-01-01
  • 1970-01-01
  • 2012-01-18
  • 2018-08-19
  • 2013-06-24
相关资源
最近更新 更多