1. 域渗透基础概念解析
在网络安全领域,域渗透测试是评估企业Active Directory环境安全性的重要手段。作为渗透测试人员,我经常遇到刚入行的同事直接上手工具而忽略基础概念理解的情况。这就像不熟悉建筑结构就直接开始拆墙,不仅效率低下还容易触发警报。让我们先系统梳理域环境的核心组件。
Active Directory(AD)是微软开发的目录服务,它像一本企业网络的大型通讯录,存储着所有用户、计算机、策略和权限信息。根据微软官方文档,AD采用多主复制模型,这意味着域控制器(DC)之间会相互同步数据。理解这一点对后续的横向移动至关重要——当你攻陷一台DC,理论上可以影响整个域。
1.1 域控制器核心机制
域控制器是AD域的大脑,主要运行以下关键服务:
- Kerberos认证:采用票据(TGT、ST)进行身份验证
- NTLM认证:旧式挑战-响应协议
- LDAP服务:389端口提供目录查询
- DNS服务:通常集成在DC上
- SYSVOL共享:存储组策略和登录脚本
我曾在一个企业内网测试中发现,管理员将SYSVOL共享权限配置为Everyone可读,导致所有组策略首选项中的密码被轻易获取。这印证了微软早在2014年就警告过的GPP漏洞,但至今仍有许多企业未修复。
1.2 常见域对象类型
| 对象类型 | 作用描述 | 渗透测试中的价值 |
|---|---|---|
| 用户账户 | 域内人员身份凭证 | 密码爆破、AS-REP Roasting目标 |
| 计算机账户 | 加入域的机器标识 | RBCD攻击、资源委派利用 |
| 组 | 权限集合单元 | 特权组识别(如Domain Admins) |
| 组织单元(OU) | 管理分区容器 | 组策略继承分析 |
| 组策略对象(GPO) | 集中配置管理系统设置 | 查找密码策略、登录脚本漏洞 |
2. 域认证协议深度剖析
2.1 Kerberos认证流程
标准Kerberos认证包含三个关键阶段:
- AS-REQ/AS-REP:客户端向KDC请求TGT(票证授予票证)
- TGS-REQ/TGS-REP:使用TGT获取服务票据(ST)
- AP-REQ/AP-REP:向目标服务出示ST进行验证
这个过程中可能存在的攻击点包括:
- 黄金票据攻击:获取krbtgt账户哈希后伪造TGT
- 白银票据攻击:获取服务账户哈希后伪造ST
- Kerberoasting:暴力破解服务账户密码
# Kerberoasting攻击示例(需PowerShell) Get-ADServiceAccount -Filter * | Select-Object SamAccountName Request-SPNTicket -SPN "MSSQLSvc/sql01.domain.com" -Format Hashcat2.2 NTLM认证与哈希传递
尽管微软推荐使用Kerberos,但NTLM仍在许多旧系统中使用。其核心缺陷在于:
- 采用静态哈希比较(NT哈希)
- 不依赖KDC,允许本地验证
- 容易受到中间人攻击
哈希传递(Pass-the-Hash)之所以有效,正是因为NTLM协议只验证哈希值而非原始密码。在测试中,我常用以下工具进行利用:
# 使用Mimikatz进行PtH sekurlsa::pth /user:Administrator /domain:corp.com /ntlm:e2b475c11da2a0748290d87aa966c327 /run:cmd.exe # CrackMapExec批量测试 cme smb 192.168.1.0/24 -u Administrator -H e2b475c11da2a0748290d87aa966c327 -x whoami重要提示:在授权测试中,哈希传递可能触发SIEM告警。建议先通过低权限账户测试防御检测能力。
3. 域内信息收集方法论
3.1 基础信息枚举
初始立足点获取后,应当系统性地收集以下信息:
- 域拓扑结构:使用
nltest /domain_trusts - 用户列表:
net user /domain - 计算机列表:
Get-ADComputer -Filter * - 组关系:
Get-ADGroupMember "Domain Admins"
我曾开发过一个自动化收集脚本,通过LDAP查询获取关键信息:
$searcher = [ADSISearcher]"(objectClass=user)" $searcher.PageSize = 200 $searcher.FindAll() | ForEach-Object { $_.Properties | Select-Object samaccountname, userprincipalname }3.2 特权路径分析
通过BloodHound工具可视化攻击路径是当前最高效的方法。其核心原理是:
- 使用SharpHound收集域关系数据
- 将数据导入Neo4j图数据库
- 通过图形化界面分析特权继承链
常见危险路径包括:
- 到域管理员的ACL路径:比如GenericAll权限
- 非约束委派配置:可导致权限提升
- 敏感组的直接成员:如Account Operators
4. 横向移动技术详解
4.1 基于服务的横向移动
当获取某台域内主机的权限后,可检查以下服务进行扩展:
- SMB服务:检查共享文件夹(如NETLOGON)
- RDP服务:检查是否允许其他域用户登录
- WinRM服务:5985/5986端口是否开放
# 检查可用WinRM端点 Test-WSMan -ComputerName DC01 -Authentication Default4.2 票据中继攻击
Kerberos约束委派配置不当可能导致中继攻击。攻击者可以将票据中继到特定服务,例如:
- 诱使用户访问恶意HTTP服务
- 捕获NTLM认证请求
- 中继到目标Exchange服务器
防御措施包括:
- 启用EPA(Extended Protection for Authentication)
- 禁用NTLM认证
- 配置服务使用强制加密
5. 权限维持技术
5.1 黄金票据与白银票据
| 票据类型 | 所需哈希 | 有效期控制 | 检测难度 |
|---|---|---|---|
| 黄金票据 | krbtgt账户哈希 | 可自定义 | 高(需审计TGT) |
| 白银票据 | 服务账户哈希 | 依赖服务账户密码 | 中(需监控ST) |
生成黄金票据的命令示例:
mimikatz # kerberos::golden /admin:Administrator /domain:corp.com /sid:S-1-5-21-123456789-1234567890-123456789 /krbtgt:aa3bf9e2718e8d1b5e22 /ptt5.2 隐蔽后门技术
更隐蔽的权限维持方法包括:
- SID History注入:添加特权组SID到普通用户
- ACL后门:在关键对象上添加隐藏权限
- DCShadow攻击:直接修改目录数据库
# 添加隐藏ACL后门 $acl = Get-Acl "AD:\CN=AdminSDHolder,CN=System,DC=corp,DC=com" $ace = New-Object System.DirectoryServices.ActiveDirectoryAccessRule ("CORP\TestUser","GenericAll","Allow") $acl.AddAccessRule($ace) Set-Acl -Path "AD:\CN=AdminSDHolder,CN=System,DC=corp,DC=com" -AclObject $acl6. 防御规避与检测对抗
6.1 日志清除技术
常见的日志清除方法包括:
- 单条日志删除:通过ETW接口操作
- 日志服务停止:
Stop-Service EventLog - 内存Patch:修改日志记录函数指针
但现代EDR通常会检测这些行为,更隐蔽的做法是:
- 通过合法管理操作掩盖痕迹
- 使用白名单进程进行恶意操作
- 利用时间差进行攻击
6.2 对抗AV检测
针对杀毒软件的规避技巧:
- 模块反射加载:不落地执行恶意代码
- API间接调用:通过合法DLL转发调用
- 内存加密:运行时解密关键代码段
// 示例:间接调用WinAPI typedef BOOL (WINAPI* pMessageBox)(HWND, LPCSTR, LPCSTR, UINT); HMODULE hUser32 = LoadLibraryA("user32.dll"); pMessageBox msgBox = (pMessageBox)GetProcAddress(hUser32, "MessageBoxA"); msgBox(NULL, "Legitimate Message", "Title", MB_OK);7. 实战案例与经验总结
在一次红队评估中,我们通过以下路径完成域控接管:
- 初始立足:钓鱼获取普通域用户凭证
- 信息收集:发现某服务器配置了非约束委派
- 权限提升:利用SpoolService漏洞获取SYSTEM权限
- 票据捕获:等待域管理员登录该服务器
- 横向移动:使用捕获的TGT访问域控制器
- 权限维持:创建隐藏的GPO后门
关键教训:
- 非约束委派服务器应视为关键资产保护
- 特权账户不应登录非管理工作站
- 应启用Kerberos AES加密减少票据被盗风险
对于防御方,我建议重点关注:
- 定期审计域内委派配置
- 监控异常Kerberos票据请求
- 实施网络分段限制横向移动