evil-winrm 和 evil-winrm-py 是当今渗透测试(特别是 Windows 内网/Active Directory 环境)中最受欢迎的 WinRM 交互式 Shell 工具之一。它们主要用于在获取有效凭证(明文密码、NTLM hash、Kerberos ticket 等)后,快速建立到目标 Windows 主机的 PowerShell Remoting 会话,实现命令执行、文件传输、提权探索等操作。
本文将详细介绍这两个工具的背景、功能、安装、使用方式、认证机制(特别聚焦 Kerberos 支持)、优缺点对比以及实际渗透测试场景中的应用。
一、WinRM 协议基础知识
WinRM(Windows Remote Management)是微软实现的 WS-Management 协议(基于 SOAP 的 Web 服务标准),默认监听端口:
- HTTP → 5985
- HTTPS → 5986
从 Windows Vista / Server 2008 开始默认集成,后来演变为 PowerShell Remoting(PSRP - PowerShell Remoting Protocol)的底层传输通道。
WinRM 的常见认证方式包括:
- Basic / Negotiate(NTLM/Kerberos)
- Kerberos(域环境首选)
- NTLM / Pass-the-Hash
- Certificate
- CredSSP(较少用)
在渗透测试中,WinRM 是继 RDP、SMB、WMI 之后最常用的横向移动/后渗透通道之一,尤其在域环境中,凭据获取后几乎必用 WinRM Shell。
二、evil-winrm(原版 Ruby 实现)
项目地址 :https://github.com/Hackplayers/evil-winrm
当前主流版本 (2025-2026):v3.7 ~ v3.9
语言 :Ruby
星数:约 5.3k+(长期霸榜 WinRM 工具)
主要功能亮点
- 高度定制化的交互式 PowerShell 会话
- 支持多种认证方式:
- 明文密码
-p - NTLM hash(Pass-the-Hash)
-H - Kerberos(需配置 realm + ccache)
- 证书认证(公钥/私钥)
- SSL 支持
-S
- 明文密码
- 文件上传/下载(upload / download 命令)
- 本地脚本自动加载(
-s指定目录,自动 source *.ps1) - 可执行文件自动加载(
-e指定 exes 目录) - 日志记录
-l logfile - 无文件内存加载 PowerShell 脚本(menu → powershell 模块)
- 支持自定义 User-Agent
-a - 支持代理
-x - Docker 一键使用(官方提供镜像)
典型使用示例
bash
# 最常用 - 明文登录
evil-winrm -i 10.10.110.45 -u administrator -p 'P@ssw0rd!'
# PTH(Pass-the-Hash)
evil-winrm -i 192.168.10.10 -u administrator -H 'aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0'
# Kerberos(需先获取 TGT 并设置 KRB5CCNAME)
export KRB5CCNAME=./admin.ccache
evil-winrm -i dc01.lab.local -r lab.local --spn WSMAN/dc01.lab.local
# HTTPS + 自签证书跳过验证
evil-winrm -i 10.0.0.5 -u admin -p pass -S --insecure
# 加载本地脚本目录
evil-winrm -i 10.10.10.10 -u user -p pass -s /home/kali/payloads/
Kerberos 支持情况
evil-winrm 的 Kerberos 支持相对传统,需要手动配置 /etc/krb5.conf,并使用 export KRB5CCNAME=xxx.ccache。常用流程:
- 获取 TGT(impacket-getTGT、Rubeus、netexec 等)
- 配置 krb5.conf(添加 domain realm)
- 指定
-r REALM和可选--spn WSMAN/hostname - 连接
缺点:配置繁琐,容易出错(尤其是 realm、SPN 前缀不匹配时),部分旧版本对非标准 SPN 支持不好。
三、evil-winrm-py(Python 重写版)
项目地址 :https://github.com/adityatelange/evil-winrm-py
当前主流版本 (2025-2026):v1.4 ~ v1.5
语言 :Python
定位:evil-winrm 的现代替代品,尤其针对 Kerberos 和环境兼容性优化
为什么出现 evil-winrm-py?
原版 evil-winrm(Ruby)存在以下痛点:
- Ruby 环境依赖复杂(bundler、gem 版本冲突常见)
- Kali/Parrot 等发行版经常出现 gem lock 版本过旧问题
- Kerberos 配置麻烦,稳定性一般
- 响应速度稍慢(部分用户实测慢 15-30%)
- 对新版 Windows / PSRemoting 策略兼容性偶有 bug
evil-winrm-py 因此诞生,目标是:
- 用纯 Python 重写,pip 安装更友好
- 响应更快(用户反馈约快 20%)
- 更好的 Kerberos 支持(原生支持密码直接请求票据、ccache、自定义 SPN/realm)
- 彩色输出、命令历史记录更友好
- 活跃维护(2025-2026 仍在快速迭代)
安装方式
bash
# 普通安装(无 Kerberos)
pip install evil-winrm-py
# 推荐 - 带 Kerberos 支持(会编译 python-kerberos,可能需要几分钟)
pip install evil-winrm-py[kerberos]
# 更推荐 - 使用 pipx 隔离环境
pipx install evil-winrm-py[kerberos]
Arch Linux、Kali 2025+ 已将 evil-winrm-py 纳入官方仓库。
主要功能与 evil-winrm 对比
| 功能 | evil-winrm (Ruby) | evil-winrm-py (Python) | 备注 |
|---|---|---|---|
| 语言 | Ruby | Python | Python 环境更普遍 |
| 响应速度 | 一般 | 更快(实测 15-25%) | pywinrm 底层优化 |
| Kerberos 支持 | 需要手动配置 krb5.conf | 原生支持密码直取票、ccache、SPN | py 版明显更友好 |
| PTH / PtH | 支持 | 支持 | 两者一致 |
| 证书认证 | 支持 | 支持 | 两者一致 |
| 文件上传/下载 | upload / download | 同名命令 | 功能一致 |
| 脚本自动加载 | -s / -e | 暂无完全等价(计划中) | 原版更强 |
| 日志记录 | -l | 支持 --log | 类似 |
| 彩色输出 & 历史 | 基本 | 更好(prompt_toolkit) | py 版体验更好 |
| Docker 支持 | 官方镜像 | 暂无官方镜像 | 原版胜出 |
| 社区活跃度(2026) | 仍活跃但更新变慢 | 快速迭代 | py 版更推荐新手 |
典型使用示例(evil-winrm-py)
bash
# 普通 NTLM
evil-winrm-py -i 10.80.80.2 -u john.doe -p 'P@ssw0rd123!'
# PTH
evil-winrm-py -i 192.168.88.10 -u administrator -H 'aad3b...31d6cfe0d16ae931b73c59d7e0c089c0'
# Kerberos - 密码直接请求票据(最方便!)
evil-winrm-py -i dc01.lab.local -u administrator -p 'Password123!' --kerberos
# 使用已有 ccache
KRB5CCNAME=./admin.ccache evil-winrm-py -i dc01.lab.local --kerberos
# 指定 realm / SPN 前缀(非标准环境)
evil-winrm-py -i dc01 -u user -p pass --kerberos --realm LAB.LOCAL --spn-prefix WSMAN
可以看到,evil-winrm-py 的 Kerberos 使用体验远超原版,很多场景下无需手动配置 krb5.conf,也无需 export ccache 环境变量。
四、实际渗透测试场景对比
场景1:普通工作组/本地管理员凭证
两者几乎无差别,原版 evil-winrm 因内置脚本加载功能略胜一筹。
场景2:域环境 PTH
两者均支持,evil-winrm-py 响应更快,推荐使用。
场景3:Kerberos 环境(无明文、无 hash,只有 TGT/TGS)
evil-winrm-py 完胜。原版需要复杂配置,py 版可直接使用 ccache 或密码请求票据。
场景4:Red Team 长驻/稳定性要求高
目前(2026)多数团队已转向 evil-winrm-py 或其他替代品(如 Devious-WinRM、netexec winrm 模块等)。
场景5:CTF / HackTheBox / TryHackMe
evil-winrm-py 因安装简单、Kerberos 友好,已成为 2025-2026 年主流选择。