在渗透测试中,Windows 系统是最常见的目标之一。无论是企业内网中的工作站、文件服务器,还是域控制器,Windows 环境的安全评估都是渗透测试人员的核心技能。本篇文章将从实验环境搭建入手,系统讲解 Windows 环境下的信息收集方法论,包括端口扫描、服务识别、SMB/LDAP/RPC 枚举以及漏洞扫描,帮助你建立完整的 Windows 渗透测试知识体系。
渗透测试实验环境搭建
在开始任何渗透测试练习之前,搭建一个安全、合法的实验环境至关重要。以下是推荐的靶机和实验平台。
Metasploitable3
Metasploitable3 是 Rapid7 官方维护的故意设置了大量漏洞的 Windows 靶机,非常适合渗透测试练习。
# 安装依赖
# 需要预先安装 Vagrant 和 VirtualBox/VMware
# 克隆 Metasploitable3 仓库
git clone https://github.com/rapid7/metasploitable3.git
cd metasploitable3
# 使用 Vagrant 构建 Windows 靶机
vagrant up win2k8
# 默认会下载并配置一个带有多种漏洞的 Windows Server 2008 R2 虚拟机
Metasploitable3 Windows 靶机默认包含以下易受攻击的服务:
- IIS Web 服务器(含 WebDAV)
- SMB 文件共享(含 MS17-010 漏洞)
- MSSQL 数据库(弱密码)
- WinRM 远程管理
- FTP 服务(匿名访问)
搭建 Active Directory 域实验环境
对于域渗透练习,建议自行搭建 AD 域环境:
# 在 Windows Server 上安装 AD DS 角色
Install-WindowsFeature AD-Domain-Services -IncludeManagementTools
# 提升为域控制器,创建新林
Install-ADDSForest -DomainName "lab.local" `
-DomainNetBIOSName "LAB" `
-SafeModeAdministratorPassword (ConvertTo-SecureString "P@ssw0rd!" -AsPlainText -Force) `
-InstallDNS
# 创建测试用户
New-ADUser -Name "testuser" -SamAccountName "testuser" `
-UserPrincipalName "testuser@lab.local" `
-AccountPassword (ConvertTo-SecureString "Welcome1!" -AsPlainText -Force) `
-Enabled $true -PasswordNeverExpires $true
# 创建测试组并添加用户
New-ADGroup -Name "IT-Support" -GroupScope Global
Add-ADGroupMember -Identity "IT-Support" -Members "testuser"
建议至少准备以下虚拟机:
| 虚拟机 | 角色 | 操作系统 |
|---|---|---|
| DC01 | 域控制器 | Windows Server 2019 |
| SRV01 | 文件/Web 服务器 | Windows Server 2016 |
| WS01 | 工作站 | Windows 10 |
| Kali | 攻击机 | Kali Linux |
网络配置
# 建议使用 Host-Only 或 NAT 网络隔离实验环境
# VirtualBox 创建 Host-Only 网络
VBoxManage hostonlyif create
VBoxManage hostonlyif ipconfig vboxnet0 --ip 10.10.10.1 --netmask 255.255.255.0
Windows 信息收集方法论
信息收集是渗透测试的第一步,也是最关键的一步。对于 Windows 目标,信息收集通常遵循以下流程:
- 主机发现 — 确定目标网络中存活的 Windows 主机
- 端口扫描 — 识别开放端口和运行的服务
- 服务枚举 — 深入探测每个服务的详细信息
- 漏洞识别 — 根据服务版本和配置发现潜在漏洞
外部信息收集:端口扫描与服务识别
Nmap 针对 Windows 的扫描技巧
Nmap 是渗透测试中最常用的扫描工具,针对 Windows 目标有许多专用技巧。
# 基础全端口扫描 — 发现所有开放端口
nmap -sS -p- -T4 --min-rate 1000 -oN full_scan.txt 10.10.10.100
# Windows 常见端口快速扫描
nmap -sV -sC -p 21,22,53,80,88,135,139,389,443,445,464,593,636,1433,3268,3389,5985,5986,9389 10.10.10.100
# 操作系统和服务版本探测
nmap -O -sV --version-intensity 5 10.10.10.100
# UDP 端口扫描(发现 SNMP、DNS、TFTP 等)
nmap -sU -p 53,67,68,69,123,161,162,500,514,1900 10.10.10.100
Windows 环境中需要重点关注的端口:
| 端口 | 服务 | 渗透测试意义 |
|---|---|---|
| 88 | Kerberos | 域环境标志,可进行 Kerberoasting |
| 135 | RPC | 远程过程调用,信息泄露 |
| 139/445 | SMB | 文件共享,大量攻击面 |
| 389/636 | LDAP | 目录服务枚举 |
| 1433 | MSSQL | 数据库攻击 |
| 3389 | RDP | 远程桌面,暴力破解 |
| 5985/5986 | WinRM | 远程管理 |
NSE 脚本深度扫描
# 使用默认脚本和版本检测进行综合扫描
nmap -sC -sV -O -p 445,135,139,389,88,3389 -oA windows_detail 10.10.10.100
# SMB 协议专用脚本
nmap --script smb-os-discovery,smb-protocols,smb-security-mode -p 445 10.10.10.100
# 枚举 SMB 共享
nmap --script smb-enum-shares,smb-enum-users -p 445 10.10.10.100
# LDAP 枚举
nmap --script ldap-rootdse,ldap-search -p 389 10.10.10.100
# RDP 信息收集
nmap --script rdp-enum-encryption,rdp-ntlm-info -p 3389 10.10.10.100
SMB 枚举
SMB(Server Message Block)是 Windows 网络中最重要的协议之一,也是攻击面最广的服务。
enum4linux
# 全面 SMB 枚举
enum4linux -a 10.10.10.100
# 枚举用户列表
enum4linux -U 10.10.10.100
# 枚举共享
enum4linux -S 10.10.10.100
# 枚举组信息
enum4linux -G 10.10.10.100
# 使用 enum4linux-ng(更新版本,输出更规范)
enum4linux-ng -A 10.10.10.100
smbclient
# 列出可用共享(匿名访问)
smbclient -L //10.10.10.100 -N
# 使用凭据列出共享
smbclient -L //10.10.10.100 -U 'testuser%Welcome1!'
# 连接到特定共享
smbclient //10.10.10.100/SharedDocs -U 'testuser%Welcome1!'
# 在 SMB shell 中操作
# smb: \> dir
# smb: \> get secret.txt
# smb: \> recurse ON
# smb: \> prompt OFF
# smb: \> mget *
CrackMapExec(CME)
CrackMapExec 是 Windows/AD 环境渗透测试的瑞士军刀:
# SMB 主机信息收集
crackmapexec smb 10.10.10.0/24
# 枚举共享
crackmapexec smb 10.10.10.100 -u 'testuser' -p 'Welcome1!' --shares
# 枚举用户
crackmapexec smb 10.10.10.100 -u 'testuser' -p 'Welcome1!' --users
# 枚举已登录用户
crackmapexec smb 10.10.10.100 -u 'testuser' -p 'Welcome1!' --loggedon-users
# 密码喷射
crackmapexec smb 10.10.10.100 -u users.txt -p 'Welcome1!' --continue-on-success
# 空会话枚举
crackmapexec smb 10.10.10.100 -u '' -p '' --shares
LDAP 枚举
当目标是域环境时,LDAP 枚举能获取大量有价值的域信息。
# 查询域基本信息(匿名绑定)
ldapsearch -x -H ldap://10.10.10.100 -b "" -s base namingContexts
# 枚举域用户
ldapsearch -x -H ldap://10.10.10.100 -D "testuser@lab.local" -w 'Welcome1!' \
-b "DC=lab,DC=local" "(objectClass=user)" sAMAccountName description memberOf
# 查找域管理员
ldapsearch -x -H ldap://10.10.10.100 -D "testuser@lab.local" -w 'Welcome1!' \
-b "DC=lab,DC=local" "(memberOf=CN=Domain Admins,CN=Users,DC=lab,DC=local)" sAMAccountName
# 枚举计算机对象
ldapsearch -x -H ldap://10.10.10.100 -D "testuser@lab.local" -w 'Welcome1!' \
-b "DC=lab,DC=local" "(objectClass=computer)" cn operatingSystem
# 查找 SPN(服务主体名称)— 用于 Kerberoasting
ldapsearch -x -H ldap://10.10.10.100 -D "testuser@lab.local" -w 'Welcome1!' \
-b "DC=lab,DC=local" "(&(objectClass=user)(servicePrincipalName=*))" sAMAccountName servicePrincipalName
# 使用 windapsearch 工具(更便捷)
python3 windapsearch.py -d lab.local --dc-ip 10.10.10.100 -u testuser@lab.local -p 'Welcome1!' --users
python3 windapsearch.py -d lab.local --dc-ip 10.10.10.100 -u testuser@lab.local -p 'Welcome1!' --da
RPC 枚举
Windows RPC 服务(端口 135/139/445)同样可以泄露大量系统信息。
# 空会话连接
rpcclient -U "" -N 10.10.10.100
# 在 rpcclient shell 中执行枚举命令
# rpcclient $> srvinfo # 服务器信息
# rpcclient $> enumdomusers # 枚举域用户
# rpcclient $> enumdomgroups # 枚举域组
# rpcclient $> querydominfo # 域信息
# rpcclient $> querydispinfo # 显示用户详细信息
# rpcclient $> queryuser 0x1f4 # 查询特定用户 (RID 500 = Administrator)
# rpcclient $> getdompwinfo # 密码策略
# rpcclient $> enumprinters # 枚举打印机
# 使用 impacket 进行 RPC 枚举
impacket-rpcdump 10.10.10.100
impacket-samrdump 10.10.10.100
# RID 循环枚举用户(绕过用户枚举限制)
impacket-lookupsid lab.local/testuser:Welcome1!@10.10.10.100
漏洞扫描
在完成服务枚举后,需要针对发现的服务进行漏洞扫描。
Nmap NSE Vuln 脚本
# 运行所有 vuln 类别的 NSE 脚本
nmap --script vuln -p 445,135,139,3389 10.10.10.100
# 专项漏洞检测
# 检测 MS17-010(永恒之蓝)
nmap --script smb-vuln-ms17-010 -p 445 10.10.10.100
# 检测 MS08-067
nmap --script smb-vuln-ms08-067 -p 445 10.10.10.100
# 检测 BlueKeep (CVE-2019-0708)
nmap --script rdp-vuln-ms12-020 -p 3389 10.10.10.100
# 检测 SMB 签名状态(中继攻击前提)
nmap --script smb2-security-mode -p 445 10.10.10.0/24
综合漏洞扫描命令集合
# 使用 Nikto 扫描 IIS Web 服务
nikto -h http://10.10.10.100
# 使用 whatweb 识别 Web 技术栈
whatweb http://10.10.10.100
# MSSQL 信息收集
nmap --script ms-sql-info,ms-sql-config,ms-sql-ntlm-info -p 1433 10.10.10.100
# 检查 MSSQL 空密码/弱密码
nmap --script ms-sql-brute -p 1433 10.10.10.100
# SNMP 枚举(如果 161/UDP 开放)
snmpwalk -v2c -c public 10.10.10.100
onesixtyone -c /usr/share/seclists/Discovery/SNMP/common-snmp-community-strings.txt 10.10.10.100
安全建议与防御措施
作为防御方,针对上述信息收集手段,建议采取以下措施:
- 最小化暴露面 — 关闭不必要的端口和服务,使用防火墙限制入站连接
- 禁用空会话 — 配置注册表禁止匿名 SMB/RPC 枚举:
reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v RestrictAnonymous /t REG_DWORD /d 2 /f reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v RestrictAnonymousSAM /t REG_DWORD /d 1 /f - 启用 SMB 签名 — 防止 SMB 中继攻击
- 网络分段 — 将关键服务器与普通工作站隔离到不同 VLAN
- 部署 IDS/IPS — 使用 Snort、Suricata 等检测扫描行为
- 日志审计 — 启用 Windows 安全日志,监控异常登录和枚举行为
- 定期补丁更新 — 及时修复已知漏洞
总结
Windows 渗透测试的信息收集阶段是整个攻击链的基础。通过系统化的端口扫描、服务识别和协议枚举,我们可以全面了解目标环境的攻击面。本文介绍的工具链 —— Nmap、enum4linux、smbclient、CrackMapExec、ldapsearch、rpcclient —— 构成了 Windows 信息收集的核心武器库。
关键要点回顾:
- 搭建安全隔离的实验环境是学习渗透测试的前提
- Nmap 的 NSE 脚本能针对 Windows 服务进行深度探测
- SMB、LDAP、RPC 三大协议是 Windows 环境信息泄露的主要来源
- 枚举获取的用户名、共享、密码策略等信息将直接服务于后续攻击阶段
- 防御方应重点关注匿名枚举的限制和网络暴露面的收缩
在下一篇文章中,我们将利用信息收集阶段获取的数据,对 Windows 服务的具体攻击面进行利用。