Windows渗透测试靶机环境搭建,SMB/LDAP/RPC枚举技术与Nmap NSE脚本实战
在渗透测试中,Windows 系统是最常见的目标之一。无论是企业内网中的工作站、文件服务器,还是域控制器,Windows 环境的安全评估都是渗透测试人员的核心技能。本篇文章将从实验环境搭建入手,系统讲解 Windows 环境下的信息收集方法论,包括端口扫描、服务识别、SMB/LDAP/RPC 枚举以及漏洞扫描,帮助你建立完整的 Windows 渗透测试知识体系。
渗透测试实验环境搭建
在开始任何渗透测试练习之前,搭建一个安全、合法的实验环境至关重要。以下是推荐的靶机和实验平台。
Metasploitable3
Metasploitable3 是 Rapid7 官方维护的故意设置了大量漏洞的 Windows 靶机,非常适合渗透测试练习。
# 安装依赖# 需要预先安装 Vagrant 和 VirtualBox/VMware # 克隆 Metasploitable3 仓库git clone https://github.com/rapid7/metasploitable3.gitcd 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 GlobalAdd-ADGroupMember -Identity "IT-Support" -Members "testuser"建议至少准备以下虚拟机:
网络配置
# 建议使用 Host-Only 或 NAT 网络隔离实验环境# VirtualBox 创建 Host-Only 网络VBoxManage hostonlyif createVBoxManage hostonlyif ipconfig vboxnet0 --ip 10.10.10.1 --netmask 255.255.255.0Windows 信息收集方法论
信息收集是渗透测试的第一步,也是最关键的一步。对于 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.100Windows 环境中需要重点关注的端口:
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.100SMB 枚举
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.100smbclient
# 列出可用共享(匿名访问)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 '' --sharesLDAP 枚举
当目标是域环境时,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(服务主体名称)— 用于 Kerberoastingldapsearch -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!' --userspython3 windapsearch.py -d lab.local --dc-ip 10.10.10.100 -u testuser@lab.local -p 'Welcome1!' --daRPC 枚举
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.100impacket-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-067nmap --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.100onesixtyone -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 /freg 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 服务的具体攻击面进行利用。
