打破C#实例化的批处理脚本来获取shell?

时间:2012-07-04 16:28:42

标签: c# batch-file dos

我正在尝试验证应用程序的安全性。场景是这样的:
C#WinForms应用程序由有限的用户通过终端服务运行(没有桌面,只有应用程序)。这个C#app可以做的事情之一是执行一个批处理文件,该文件使用提升的权限运行冗长的进程。我担心有限的用户可能会中断批处理脚本(vua Ctrl + C或其他一些方法)并获得对底层提升shell的访问权。

我已尝试使用Ctrl + C和Ctrl + Break等各种组合来完成此操作。我只能获得“Teminate批处理作业?(Y / N)”提示,如果选择终止,则控件立即返回到C#app(这很好)。我没有找到办法打破这一点但对我来说似乎很危险。

有没有人知道如何在不返回C#应用程序的情况下打破C#实例化批处理脚本并访问底层shell?

3 个答案:

答案 0 :(得分:2)

不,不要以为有一个。但是,如果你真的很担心,为什么不将你可能使用的CreateNoWindow对象上的ProcessStartInfo属性设置为true以阻止用户进行交互?

答案 1 :(得分:0)

对你所描述的场景不是一个完全的答案,而是以不同的方式来看待它。

如果可能的话,我会有一个“工作服务器”,他自己负责运行终端服务运行的应用创建的工作。然后,您将通过WCF将作业(或仅参数)传达给服务器。用户无法访问服务器,几乎无法控制作业(可能只是取消选项和成功/失败状态报告)。

答案 2 :(得分:0)

您可以执行此类操作(在应用上使用文本框)

ProcessStartInfo info = new ProcessStartInfo();
info.Arguments = "/C ping 127.0.0.1";
info.WindowStyle = ProcessWindowStyle.Hidden;
info.CreateNoWindow = true;
info.FileName = "cmd.exe";
info.UseShellExecute = false;
info.RedirectStandardOutput = true;
using (Process process = Process.Start(info))
{
    using (StreamReader reader = process.StandardOutput)
    {
        string result = reader.ReadToEnd();
        textBox1.Text += result;
    }
}

然后您可以看到批处理的结果,而用户根本无法真正看到窗口,这样它只能作为一个进程显示,因此无法中断它。

enter image description here