Skip to content

Windows 渗透测试环境搭建与信息收集

Published:
12 min read

在渗透测试中,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 靶机默认包含以下易受攻击的服务:

搭建 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 目标,信息收集通常遵循以下流程:

  1. 主机发现 — 确定目标网络中存活的 Windows 主机
  2. 端口扫描 — 识别开放端口和运行的服务
  3. 服务枚举 — 深入探测每个服务的详细信息
  4. 漏洞识别 — 根据服务版本和配置发现潜在漏洞

外部信息收集:端口扫描与服务识别

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 环境中需要重点关注的端口:

端口服务渗透测试意义
88Kerberos域环境标志,可进行 Kerberoasting
135RPC远程过程调用,信息泄露
139/445SMB文件共享,大量攻击面
389/636LDAP目录服务枚举
1433MSSQL数据库攻击
3389RDP远程桌面,暴力破解
5985/5986WinRM远程管理

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

安全建议与防御措施

作为防御方,针对上述信息收集手段,建议采取以下措施:

  1. 最小化暴露面 — 关闭不必要的端口和服务,使用防火墙限制入站连接
  2. 禁用空会话 — 配置注册表禁止匿名 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
  3. 启用 SMB 签名 — 防止 SMB 中继攻击
  4. 网络分段 — 将关键服务器与普通工作站隔离到不同 VLAN
  5. 部署 IDS/IPS — 使用 Snort、Suricata 等检测扫描行为
  6. 日志审计 — 启用 Windows 安全日志,监控异常登录和枚举行为
  7. 定期补丁更新 — 及时修复已知漏洞

总结

Windows 渗透测试的信息收集阶段是整个攻击链的基础。通过系统化的端口扫描、服务识别和协议枚举,我们可以全面了解目标环境的攻击面。本文介绍的工具链 —— Nmap、enum4linux、smbclient、CrackMapExec、ldapsearch、rpcclient —— 构成了 Windows 信息收集的核心武器库。

关键要点回顾:

在下一篇文章中,我们将利用信息收集阶段获取的数据,对 Windows 服务的具体攻击面进行利用。