1. 域内信息收集概述
在渗透测试或红队评估中,域内信息收集是最关键的初始阶段。就像外科医生需要先通过CT扫描了解患者体内结构一样,渗透测试人员也需要先摸清目标域环境的完整拓扑。我常把这个过程比作拼图游戏——每收集到一条信息就是获得一块拼图碎片,当碎片足够多时,整个域架构的完整图像就会浮现。
典型的域内信息收集包括但不限于:
- 用户账户枚举(常规账户、服务账户、特权账户)
- 主机发现(域控、成员服务器、工作站)
- 组策略和权限配置
- 信任关系(域内信任、林间信任)
- 共享资源和敏感数据定位
重要提示:所有信息收集操作必须获得合法授权,未经授权的扫描可能违反相关法律法规。本文所述技术仅限用于授权的安全评估。
2. 基础信息收集技术
2.1 基础命令工具链
Windows内置的命令行工具是信息收集的第一把钥匙。这些原生工具不会触发安全告警,是隐蔽侦察的理想选择:
# 查询域基本信息 net view /domain nltest /domain_trusts # 枚举域用户和组 net user /domain net group "Domain Admins" /domain # 获取主机信息 systeminfo | findstr /B /C:"OS Name" /C:"OS Version"我习惯将这些命令输出重定向到文本文件,然后用Python脚本进行结构化解析。例如用正则表达式提取net user输出中的最后登录时间,可以识别长期未使用的休眠账户——这些往往是安全防护最薄弱的环节。
2.2 WMI深度信息采集
Windows Management Instrumentation (WMI) 是更强大的信息源。通过wmic命令可以获取硬件配置、安装的软件、进程列表等详细信息:
# 获取所有安装的软件 wmic product get name,version # 查询补丁安装情况 wmic qfe list brief # 获取网络配置 wmic nicconfig get ipaddress,macaddress在实际操作中,我发现WMI查询有时会因权限问题失败。这时可以尝试改用PowerShell的Get-WmiObject cmdlet,它提供更灵活的错误处理机制。
3. 高级信息收集工具
3.1 PowerView实战技巧
PowerView是PowerShell Empire项目中的信息收集模块,现已成为域渗透的标准工具。它的优势在于能通过LDAP协议直接与域控通信,获取最权威的域信息:
# 获取所有域用户详细信息 Get-DomainUser -Properties samaccountname,lastlogon,memberof # 查找具有SPN的服务账户 Get-DomainUser -SPN | select samaccountname,serviceprincipalname # 定位域管理员登录过的机器 Get-DomainComputer -Properties dnshostname,lastlogon | Where-Object {$_.lastlogon -gt (Get-Date).AddDays(-30)}我在多个项目中验证过,通过Get-DomainGPOUser可以找出组策略中配置的本地管理员账户——这些账户往往在不同机器重复使用,是横向移动的理想跳板。
3.2 Cobalt Strike的集成利用
Cobalt Strike的psloggeson.exe和netview.exe是专为隐蔽侦察设计的工具。与原生命令相比,它们有以下优势:
- 无磁盘操作:直接在内存中执行,不留下日志痕迹
- 结果聚合:自动整理多台主机的扫描结果
- 时间戳混淆:可以设置随机延迟避免检测
典型的使用流程:
# 内存加载psloggeson execute-assembly /path/to/psloggeson.exe -t 60 -d corp.local # 导出结果到CSV netview.exe --csv output.csv在最近的测试中,我发现结合Cobalt Strike的targeted扫描模式可以显著降低告警率。该模式会先通过LDAP获取活跃主机列表,然后只扫描这些目标,避免大范围爆破扫描。
4. 数据关联与分析
4.1 构建域关系图谱
原始数据需要经过处理才能转化为可操作情报。我通常使用Python的networkx库构建关系图谱:
import networkx as nx G = nx.Graph() # 添加用户节点 G.add_node("user1", type="user", department="Finance") # 添加主机节点 G.add_node("workstation12", type="computer", os="Windows 10") # 添加关系边 G.add_edge("user1", "workstation12", relation="logs_in")通过中心性分析可以识别关键节点(如被多个管理员登录的服务器),这些是高价值目标。下图展示了一个简化的域关系模型:
| 节点类型 | 关键属性 | 攻击价值 |
|---|---|---|
| 域管理员 | 组成员关系 | ★★★★★ |
| 服务账户 | SPN配置 | ★★★★☆ |
| 文件服务器 | 共享权限 | ★★★☆☆ |
4.2 时间线分析技巧
将不同来源的数据按时间排序往往能发现意外关联。例如:
- 某用户账户在凌晨3点登录
- 该时段有异常进程创建记录
- 同一IP曾出现在其他异常事件中
我开发了一个简单的Python脚本来自动化这个过程:
from datetime import datetime def parse_time(raw): return datetime.strptime(raw, "%Y-%m-%d %H:%M:%S") events.sort(key=lambda x: parse_time(x['timestamp']))5. 隐蔽性与对抗措施
5.1 日志规避实践
现代EDR系统会监控敏感命令的执行。以下是几种规避技巧:
- 命令混淆:将
net user拆分为ne^t us^er - 使用环境变量:
%COMSPEC% /c whoami - 延迟执行:在PowerShell中添加
Start-Sleep -Seconds $(Get-Random -Minimum 1 -Maximum 10)
实测发现,将扫描流量分散在多个合法管理会话中(如混合使用RDP、WinRM、SMB),可以大幅降低检测概率。
5.2 清理痕迹方法
操作完成后必须清理痕迹,包括:
- 删除创建的临时文件
- 清除PowerShell历史(
Remove-Item (Get-PSReadlineOption).HistorySavePath) - 恢复修改的注册表项
我建议使用Sysinternals的CleanAfter脚本,它能自动追踪并回滚所有变更。
6. 防御视角的检测策略
作为蓝队成员,可以从以下方面检测信息收集行为:
命令监控:
- 短时间内连续执行
net系列命令 - 非常用账户突然使用WMI查询
- 短时间内连续执行
网络流量特征:
- 异常的LDAP查询模式(如大量
(&(objectCategory=person))查询) - SMB枚举请求(
IPC$连接尝试)
- 异常的LDAP查询模式(如大量
内存检测:
- 非托管PowerShell进程加载AMS1
- 未知程序集在内存中执行
以下是典型的Sigma检测规则片段:
detection: selection: CommandLine|contains: - 'net group "Domain Admins"' - 'net localgroup administrators' condition: selection and not filter在真实环境中,建议将这类规则与用户行为基线(UEBA)结合,减少误报。