域渗透之用户会话收集分析
字数 3304 2025-08-20 18:18:16
域渗透之用户会话收集分析技术文档
1. 查询远程计算机当前登录的用户
1.1 RegistryKey方法
1.1.1 技术原理
- Windows注册表HKU记录了计算机当前登录的用户SID
- HKU SID下Volatile Environment的USERNAME属性包含实际用户名
- 通过远程注册表服务(Remote Registry Service)可远程读取注册表
1.1.2 服务配置
- 客户端:默认关闭(Disabled)
- 服务器:默认开启(Automatic)
- 空闲停止配置:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\RemoteRegistry中的DisableIdleStop值- 0:空闲10分钟后停止
- 1:空闲时不停止
1.1.3 权限要求
- HKEY_USERS:Everyone可读
- HKEY_USERS<SID>\Volatile Environment:普通用户无访问权限
1.1.4 实现方式
-
注册表编辑器(regedit.exe)
- File => Connect Network Registry
- 输入远程计算机地址
- 查看HKU中的SID
-
PowerShell
# 查看HKU [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]::Users,'192.168.1.9').OpenSubKey('').GetSubKeyNames() # 查看HKLM [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]::Users,'192.168.1.9').OpenSubKey('\System\CurrentControlSet').GetSubKeyNames() -
Python脚本
- 核心功能:通过WINREG协议远程读取注册表
1.1.5 流量分析
- 协议栈:TCP=>NetBIOS=>SMB=>DCERPC=>WINREG
- 主要阶段:
- 建立SMB会话
- 连接IPC$共享
- 打开winreg命名管道
- 绑定winreg接口
- RPC方法调用
- 关闭连接
1.2 NetWkstaUserEnum方法
1.2.1 技术原理
- 查询当前登录到工作站的所有用户信息
- 包括:交互式登录、服务和批处理登录
1.2.2 函数结构
NET_API_STATUS NET_API_FUNCTION NetWkstaUserEnum(
[in] LMSTR servername,
[in] DWORD level,
[out] LPBYTE *bufptr,
[in] DWORD prefmaxlen,
[out] LPDWORD entriesread,
[out] LPDWORD totalentries,
[in, out] LPDWORD resumehandle
);
1.2.3 权限要求
- 需要目标计算机管理员权限
- 允许的组:Administrators、Server、System和Print Operator本地组
1.2.4 实现方式
- Python脚本:调用NetWkstaUserEnum API
- 示例输出:
Found logged on user at 192.168.1.15: lihua@QFTM Found logged on user at 192.168.1.15: dadmin@QFTM
1.2.5 流量分析
- 协议栈:TCP=>NetBIOS=>SMB=>DCERPC=>WKSSVC
- 主要阶段:
- 建立SMB会话
- 连接IPC$共享
- 打开wkssvc命名管道
- 绑定wkssvc接口
- RPC方法调用(NetrWkstaUserEnum)
- 关闭连接
2. 查询远程计算机当前用户网络会话
2.1 NetSessionEnum方法
2.1.1 技术原理
- 查询访问远程主机网络资源(如文件共享)时创建的网络会话
- 可获取域用户及IP等信息
2.1.2 函数结构
NET_API_STATUS NET_API_FUNCTION NetSessionEnum(
[in] LMSTR servername,
[in] LMSTR UncClientName,
[in] LMSTR username,
[in] DWORD level,
[out] LPBYTE *bufptr,
[in] DWORD prefmaxlen,
[out] LPDWORD entriesread,
[out] LPDWORD totalentries,
[in, out] LPDWORD resume_handle
);
2.1.3 权限要求
- 早期系统:Authenticated Users可访问
- 后期系统(Windows 10 1709+/Windows Server 2019 1809+):需要管理员权限
- Level权限:
- 0或10:不需要管理员权限
- 1或2:需要Administrators或Server Operators权限
- 502:需要更高权限
2.1.4 实现方式
- NetSess工具:
NetSess.exe 192.168.1.15 NetSess.exe 192.168.1.15 -u lihua - Python脚本:调用NetSessionEnum API
2.1.5 流量分析
- 协议栈:TCP=>NetBIOS=>SMB=>DCERPC=>SRVSVC
- 主要阶段:
- 建立SMB会话
- 连接IPC$共享
- 打开srvsvc命名管道
- 绑定srvsvc接口
- RPC方法调用(NetrSessionEnum)
- 关闭连接
3. 常见用户会话收集工具
3.1 SharpHound
3.1.1 收集方法
- Session收集:使用NetSessionEnum
- LoggedOn收集:使用NetWkstaUserEnum和RegistryKey
- 组合收集:
SharpHound.exe -c session,loggedon
3.1.2 方法对比
| 方法 | OS版本 | 需要管理员 | 收集方式 | BloodHound边 | 本地用户 |
|---|---|---|---|---|---|
| NetWkstaUserEnum | 所有 | 是 | LoggedOn | HasSession | 否 |
| NetSessionEnum | Win10 1709+/WinSrv2019 1809+ | 是 | Session | HasSession | 否 |
| RegistryKey | Windows Server | 否 | LoggedOn | HasSession | 是 |
3.2 PsLoggedOn
3.2.1 收集方法
- RegistryKey:查询HKU
- NetSessionEnum:查询网络会话
3.2.2 使用方式
PsLoggedon.exe /accepteula \\dc
PsLoggedon.exe /accepteula administrator
3.3 PVEFindADUser
3.3.1 收集方法
- RegistryKey:查询HKU
3.3.2 使用方式
PVEFindADUser.exe -current
PVEFindADUser.exe -current -target dc -noping
PVEFindADUser.exe -current qftm\dadmin -noping
3.4 NetSess
3.4.1 收集方法
- NetSessionEnum:查询网络会话
3.4.2 使用方式
NetSess.exe 192.168.1.15
NetSess.exe 192.168.1.15 -u lihua
4. 总结对比表
4.1 API方法对比
| API Call | OS version | Admin needed | User status | SMB share | Port | Protocol | Name pipe | RPC Interface UUID | RPC Method Call |
|---|---|---|---|---|---|---|---|---|---|
| RegistryKey | Windows Server | No | LoggedOn | IPC$ | 445 | SMB/DCERPC/WINREG | \pipe\winreg | 338cd001-2244-31f1-aaaa-900038001003 | OpenRemoteBaseKey/OpenSubKey/GetSubKeyNames |
| NetWkstaUserEnum | All | Yes | LoggedOn | IPC$ | 445 | SMB/DCERPC/WKSSVC | \pipe\wkssvc | 6BFFD098-A112-3610-9833-46C3F87E345A | NetrWkstaUserEnum |
| NetSessionEnum | Win10 1709+/WinSrv2019 1809+ | Yes | Net Session | IPC$ | 445 | SMB/DCERPC/SRVSVC | \pipe\srvsvc | 4B324FC8-1670-01D3-1278-5A47BF6EE188 | NetrSessionEnum |
4.2 工具方法对比
| 工具 | 使用的方法 | 优点 | 缺点 |
|---|---|---|---|
| SharpHound | NetWkstaUserEnum/NetSessionEnum/RegistryKey | 功能全面,与BloodHound集成 | 体积较大,可能被AV检测 |
| PsLoggedOn | RegistryKey/NetSessionEnum | 轻量,Sysinternals工具 | 功能相对简单 |
| PVEFindADUser | RegistryKey | 可查询域内用户登录位置 | 仅支持.NET 2.0 |
| NetSess | NetSessionEnum | 轻量,快速查询网络会话 | 功能单一 |