2012-07-04 45 views
2

我正在嘗試驗證應用程序的安全性。場景是這樣的:
C#WinForms應用程序由有限的用戶通過終端服務(無需桌面,只是應用程序)運行。此C#應用程序可以執行的一件事是執行批處理文件,該文件運行具有提升權限的冗長進程。恐怕有限的用戶可能會中斷批處理腳本(vua Ctrl + C或其他一些方法)並訪問底層的高級shell。打破C#實例化的批處理腳本來獲取shell?

我試圖用Ctrl + C和Ctrl + Break等各種組合方式來做到這一點。我所能得到的只是「Teminate batch job?(Y/N)」提示,如果您選擇terminate,那麼控制立即返回到C#應用程序(這是很好的)。我還沒有找到辦法打破這一點,但對我來說似乎很危險。

有誰知道一種方式來打破C#實例化的批處理腳本,並訪問底層的shell而不返回到C#應用程序?

+3

可以在它運行的用戶做任何事情來覆蓋批處理文件,有可能? –

+0

@Jon - 好點! –

+0

@Jon - 不,他們不能。 – Grasshopper147

回答

2

不,不要認爲有一個。但是,如果您真的擔心,爲什麼不將對象上的CreateNoWindow屬性設置爲true以防止用戶互動?

+0

好的建議。我們希望有限的用戶能夠看到從批處理文件打印並可能與批處理文件交互的消息(受限用戶是第一層支持組)。我們可以封裝外殼,重定向輸入/輸出流,並在那裏添加一些安全性,但是我必須證明當前的方案不安全,然後才能證明這一點。 – Grasshopper147

0

對於您描述的情況不是一個答案,而是一種不同的方式來看待它。

如果可能的話,我會有一個「作業服務器」,唯一的責任是運行終端服務運行的應用程序創建的作業。然後,您將通過WCF將作業(或只是參數)傳達給服務器。用戶將無法訪問服務器,並且對作業的控制很少(可能只是取消選項和成功/失敗狀態報告)。

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