尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

PowerSploit Recon 模块 Find-DomainUserEvent 实战:跨域控制器批量追踪域用户登录事件

PowerSploit Recon 模块 Find-DomainUserEvent 实战:跨域控制器批量追踪域用户登录事件 渗透测试网络安全【免费下载链接】PowerSploitPowerSploit - A PowerShell Post-Exploitation Framework项目地址https://gitcode.com/gh_mirrors/po/PowerSploit点击查看免费下载导读本文围绕 PowerSploit 的 Recon侦察模块中用于定位用户登录活动的核心函数Find-DomainUserEvent展开讲解如何在一台或整个域的域控制器上按用户身份、组成员、特权标记、IP 地址、LogonGuid 等多种条件批量检索 Windows 安全日志中的登录事件Event ID 4624与显式凭据登录事件Event ID 4648。读完本文你将掌握该函数的完整参数体系、四种典型调用方式以及它与底层Get-DomainUserEvent、Get-DomainController的协作原理可直接用于红队侦察、横向移动目标筛选与域内安全审计场景。函数定位与适用场景Find-DomainUserEvent定义于 Recon/PowerView.ps1由 Lee Christensentifkin_、Justin Warnersixdub与 Will Schroederharmj0y编写采用 BSD 3-Clause 许可是 PowerViewPowerSploit Recon 模块中面向人的侦察工具。它的职责一句话概括在当前域或指定远程域中为指定用户找到登录事件。它的典型应用场景包括红队/渗透测试中确认目标域用户如域管理员最近在哪些主机上登录过为横向移动选择目标主机追踪某个特定会话 GUIDLogonGuid或登录 IDTargetLogonId对应的完整登录记录按来源 IP 段筛选登录事件定位来自特定工作站/攻击源的认证活动蓝队场景下快速核对高权限账户adminCount1在过去一段时间内的登录行为。官方文档 docs/Recon/Find-DomainUserEvent.md 给出了它的完整语法与说明Recon 模块的模块清单 Recon/Recon.psd1 将其作为导出函数提供给使用者因此在导入 Recon 模块后即可直接调用。核心工作流程从域控制器到登录事件的三段式管线Find-DomainUserEvent的实现逻辑非常清晰源码中可分为三个相互衔接的阶段确定目标用户集合BEGIN 阶段前半部分根据用户指定的筛选条件调用Get-DomainUser或Get-DomainGroupMember得到目标用户名的列表确定目标主机集合BEGIN 阶段后半部分如果未显式给出-ComputerName则通过Get-DomainController枚举指定域默认当前域的全部域控制器逐主机采集并过滤事件PROCESS 阶段对每台目标主机调用Get-DomainUserEvent拉取安全日志事件再按用户名列表或-Filter哈希表进行匹配最后按并发或串行策略输出。其中第 3 步的采集动作封装在$HostEnumBlock脚本块中Recon/PowerView.ps1该脚本块会先用Test-Connection -Count 1 -Quiet做一次 ICMP 连通性探测主机在线才继续采集避免对不可达主机产生无谓的远程调用开销。底层真正读日志的函数是Get-DomainUserEventRecon/PowerView.ps1它不依赖其他函数直接通过Get-WinEvent以 XML XPath 过滤器读取 Security 日志Event ID 4624账户登录事件Account Logon同时用TimeCreated限定在-StartTime与-EndTime之间并排除TargetUserName ANONYMOUS LOGONEvent ID 4648使用显式凭据登录事件Logon with explicit credential通过Suppress子句排除噪音LogonType 为 0/5系统账户/服务账户、匿名登录以及TargetUserSID S-1-5-18LocalSystem的事件解析 4624 事件时还会跳过以$结尾的计算机账户登录$Properties[5].Value.EndsWith($)并在 4648 事件上要求进程名为taskhost\.exe才输出用于聚焦真正由用户发起的显式凭据使用。Get-DomainUserEvent的完整参数见 Recon/PowerView.ps1-ComputerName默认本机、-StartTime默认[DateTime]::Now.AddDays(-1)、-EndTime默认[DateTime]::Now、-MaxEvents默认 5000允许范围 1–1000000、-Credential默认空凭据。完整参数说明Find-DomainUserEvent支持两套参数集Domain默认与ComputerName。Domain 参数集在未指定主机时自动枚举域控制器ComputerName 参数集则显式指定要查询的主机并支持通过管道传入主机名。下表汇总了全部参数及其默认值与含义默认值均来自源码 Recon/PowerView.ps1 中的参数声明参数类型默认值作用-ComputerNameString[]None显式指定要检索事件的主机别名dnshostname、HostName、name支持管道输入-DomainString当前域指定要查询域控制器的域-FilterHashtableNonePowerView.LogonEvent 属性的过滤哈希表支持op/operator/operation子句-StartTimeDateTime[DateTime]::Now.AddDays(-1)事件采集起始时间-EndTimeDateTime[DateTime]::Now事件采集结束时间-MaxEventsInt325000每台主机最多返回的事件数1–1000000-UserIdentityString[]None要搜索的一个或多个用户身份-UserDomainString当前域查询目标用户时使用的域-UserLDAPFilterStringNone用于搜索目标用户的 LDAP 查询字符串-UserSearchBaseStringNone搜索目标用户的 LDAP 源如LDAP://OUsecret,DCtestlab,DClocal适合 OU 查询-UserGroupIdentityString[]Domain Admins查询目标用户的组身份别名GroupName、Group设置了其他用户条件时被忽略-UserAdminCountSwitchFalse搜索(adminCount1)的用户即曾经/当前拥有特权的账户别名AdminCount-CheckAccessSwitchFalse源码中为占位参数文档标注{{Fill CheckAccess Description}}未参与过滤逻辑-ServerStringNone要绑定的 AD 服务器域控制器别名DomainController-SearchScopeStringSubtree计算机搜索范围Base/OneLevel/Subtree-ResultPageSizeInt32200LDAP 搜索器 PageSize1–10000-ServerTimeLimitInt32无不传则使用 LDAP 默认文档描述为 120 秒LDAP 服务器端搜索时间上限1–10000 秒-TombstoneSwitchFalse搜索器同时返回已删除/墓碑对象-CredentialPSCredential[PSCredential]::Empty连接目标计算机的备用凭据-StopOnSuccessSwitchFalse找到目标用户后立即停止搜索-DelayInt320主机枚举之间的延迟秒数1–10000传入后强制串行枚举-JitterDouble0.3应用于-Delay的抖动系数0.0–1.0实际休眠时间为随机区间(1-Jitter)*Delay到(1Jitter)*Delay-ThreadsInt3220用户搜索使用的线程数1–100需要特别说明-Filter的语义Recon/PowerView.ps1过滤键是PowerView.LogonEvent输出对象的属性名如IpAddress、LogonGuid、TargetLogonId值是用于-match的正则表达式字符串特殊键op或operator/operation决定多条件组合逻辑值为或and时表示所有条件都必须匹配否则包括默认情况按or处理即至少一个条件匹配即输出注意源码中or分支会对每个匹配的键各输出一次事件对象因此同一事件在命中多个条件时可能重复出现实际使用时若需去重可结合Sort-Object -Unique。实战示例详解官方文档提供了四个示例下面逐一展开并补充说明。示例 1默认扫描域内所有 DC 上的域管理员登录Find-DomainUserEvent未指定任何参数时函数默认目标用户 Domain Admins组的全部成员通过Get-DomainGroupMember -Identity Domain Admins -Recurse递归展开见 Recon/PowerView.ps1目标主机 当前域全部域控制器的 DNS 主机名通过Get-DomainController -LDAP获取见 Recon/PowerView.ps1时间范围 过去 24 小时。由于未传-Delay与-StopOnSuccess会以 20 线程并发枚举所有 DCRecon/PowerView.ps1并输出PowerView.LogonEvent对象。示例 2指定 DC 指定用户 备用凭据$cred Get-Credential dev\administrator Find-DomainUserEvent -ComputerName secondary.dev.testlab.local -UserIdentity john这里通过-ComputerName明确只查secondary.dev.testlab.local这一台主机-UserIdentity john让函数改用Get-DomainUser搜索名为john的用户因为显式传了-UserIdentity-UserGroupIdentity的默认值Domain Admins会被忽略见 Recon/PowerView.ps1 的分支逻辑-Credential则携带dev\administrator的凭据访问目标主机。-UserIdentity支持字符串数组可一次传入多个用户。示例 3按来源 IP 过滤管道输入primary.testlab.local | Find-DomainUserEvent -Filter {IpAddress192.168.52.200|192.168.52.201}-ComputerName支持管道按值/按属性名输入别名dnshostname、HostName、name因此可以把主机名直接通过管道传入。-Filter中的IpAddress值是正则表达式192.168.52.200|192.168.52.201即匹配来源 IP 为这两个地址之一的登录事件。由于未提供op键多条件默认按or处理。注意正则中的|表示或若要字面匹配含点的 IP 建议转义点号如192\.168\.52\.(200|201)。示例 4多条件 AND 组合 串行枚举$cred Get-Credential testlab\administrator Find-DomainUserEvent -Delay 1 -Filter {LogonGuidb8458aa9-b36e-eaa1-96e0-4551000fdb19; TargetLogonId 10238128; op}该示例同时演示了-Filter的 AND 语义与-Delay的副作用过滤器同时要求LogonGuid匹配指定 GUID且TargetLogonId匹配10238128op为对应源码中$Operator and的分支Recon/PowerView.ps1传入-Delay 1后PROCESS 阶段会放弃多线程改为逐台 DC 串行枚举并在每次枚举前Start-Sleep随机间隔Recon/PowerView.ps1用于降低探测行为的特征与网络噪音。-Delay与-StopOnSuccess任一被指定都会进入串行分支。输出对象结构函数的输出类型声明为PowerView.LogonEvent与PowerView.ExplicitCredentialLogonEventRecon/PowerView.ps1分别对应 4624 与 4648 事件的解析结果。4624 事件PowerView.LogonEvent包含字段ComputerName、TimeCreated、EventId、SubjectUserSid/Name/DomainName/LogonId、TargetUserSid/Name/DomainName/LogonId、LogonType、LogonProcessName、AuthenticationPackageName、WorkstationName、LogonGuid、TransmittedServices、LmPackageName、KeyLength、ProcessId、ProcessName、IpAddress、IpPort、ImpersonationLevel、RestrictedAdminMode、TargetOutboundUserName/DomainName、VirtualAccount、TargetLinkedLogonId、ElevatedTokenRecon/PowerView.ps1。4648 事件PowerView.ExplicitCredentialLogonEvent包含字段ComputerName、TimeCreated、EventId、SubjectUserSid/Name/DomainName/LogonId、LogonGuid、TargetUserName/DomainName、TargetLogonGuid、TargetServerName、TargetInfo、ProcessId、ProcessName、IpAddress、IpPortRecon/PowerView.ps1。从源码结构可以推断LogonType、IpAddress、LogonGuid、TargetLogonId、TargetUserName、ProcessName等字段都是-Filter的合法键其中LogonGuid与TargetLogonId的组合可把 4624 与后续 4648 事件关联起来还原一次完整的显式凭据使用链条——这也正是示例 4 的意图所在。使用前提与注意事项运行环境函数基于Get-WinEvent读取远程/本地 Security 日志需要目标主机开启安全审计且当前或-Credential提供的账户具备读取安全日志的权限Find-DomainUserEvent默认枚举域控制器因此调用者通常需要域内具备相应权限的账户。连通性依赖$HostEnumBlock使用 ICMPTest-Connection判断主机在线若防火墙屏蔽 ICMP 可能导致在线主机被跳过。性能权衡默认 20 线程并发枚举适合大规模域-Delay/-StopOnSuccess会退化为串行速度慢但更隐蔽-MaxEvents限制每台主机返回的事件上限避免日志量过大拖垮管道。事件噪音抑制4624/4648 解析时会跳过计算机账户$结尾、匿名登录、LocalSystemS-1-5-18以及 LogonType 0/5 的事件4648 还要求进程为taskhost.exe解读结果时需留意这些内置过滤。时间窗口默认仅回溯 24 小时-StartTime Now.AddDays(-1)如需更长窗口请显式传入-StartTime例如-StartTime ([DateTime]::Now.AddDays(-7))。延伸阅读模块内配套文档Find-DomainUserEvent.md底层事件采集实现Recon/PowerView.ps1高层编排实现Recon/PowerView.ps1Recon 模块功能总览Recon/README.md同一 Recon 模块中Get-DomainUser用户枚举、Get-DomainGroupMember组展开、Get-DomainControllerDC 枚举与New-ThreadedFunction并发执行是Find-DomainUserEvent声明的必需依赖可结合阅读以理解完整的调用链。赞分享渗透测试网络安全【免费下载链接】PowerSploitPowerSploit - A PowerShell Post-Exploitation Framework项目地址https://gitcode.com/gh_mirrors/po/PowerSploit点击查看免费下载相关推荐RuView BFLD 深度解析基于 802.11ac/ax 波束成形反馈的隐私门控 WiFi 感知层RuView BFLD 深度解析基于 802.11ac/ax 波束成形反馈的隐私门控 WiFi 感知层 BFLDBeamforming Feedback L渗透测试网络安全PowerSploit Recon 模块 Find-DomainProcess 实战指南基于 WMI 的域内用户进程与特权进程定位PowerSploit Recon 模块 Find DomainProcess 实战指南基于 WMI 的域内用户进程与特权进程定位 本篇技术指南围绕 Powe渗透测试网络安全PowerSploit Recon 模块 New-DomainUser 实战指南用 PowerShell 创建域用户并接管域内身份PowerSploit Recon 模块 New DomainUser 实战指南用 PowerShell 创建域用户并接管域内身份 PowerSploit 是渗透测试网络安全创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表