使用 WinRM 协议在远程 Windows 机器上交互式执行命令(只是更快)
evil-winrm-py 是一个基于 Python 的工具,用于通过 WinRM(Windows 远程管理)协议在远程 Windows 机器上执行命令。它提供了一个交互式 shell,具有增强功能,如带进度和校验和验证的文件上传/下载、本地/远程路径和 PowerShell cmdlet 的 Tab 补全、加载和运行 PowerShell 脚本、DLL 和 EXE 的内存执行、命令历史记录以及彩色输出。它还可以作为 MCP 服务器运行,将 WinRM 会话作为工具暴露给兼容 MCP 的客户端。它支持多种身份验证方法,包括 NTLM、Pass-the-Hash、证书和 Kerberos。跳转到安装

[!NOTE] 此工具严格设计用于教育、道德用途和授权的渗透测试。在访问任何系统之前,请始终确保您拥有明确授权。未经授权的访问或滥用此工具既违法又不道德。
原始的 evil-winrm 是用 Ruby 编写的,这对某些用户来说可能是一个障碍。用 Python 重写它使其更易于访问和使用,同时也允许我们利用 Python 丰富的生态系统来增加功能和灵活性。
我还想更多地了解 winrm 及其内部原理,因此这个项目也将作为我的学习经历。
Tab 补全自动补全本地和远程文件路径(即使路径中包含空格)。Tab 补全自动补全 PowerShell cmdlet/辅助函数。上/下 箭头键浏览命令历史记录。包括对以下内容的支持:
详细文档可在 docs 目录中找到。
sudo apt install gcc python3-dev libkrb5-dev krb5-pkinit
# Optional: krb5-user
evil-winrm-py您可以使用 uv/pipx 代替 pip 来安装 evil-winrm-py。
uv/pipx是一种在隔离环境中安装和运行 Python 应用程序的工具,通过将工具的依赖项与系统的 Python 包分开,有助于防止依赖冲突。
查看 安装指南 了解更多详情。
pip install evil-winrm-py
# for optional dependencies use any one of the following commands:
pip install evil-winrm-py[kerberos] # for kerberos support on Linux
pip install evil-winrm-py[mcp] # for mcp support
pip install evil-winrm-py[kerberos,mcp] # to install both optional dependencies
# Note: building gssapi and krb5 packages may take some time, so be patient.
或者,如果您想使用主分支的最新提交进行安装,可以通过克隆仓库并使用 pip/uv/pipx 安装:
git clone https://github.com/adityatelange/evil-winrm-py
cd evil-winrm-py
pip install .
# or use: pip install .[kerberos,mcp] to install both optional dependencies
pip install --upgrade evil-winrm-py
pip uninstall evil-winrm-py
对于上述发行版,您可以直接从它们的包管理器安装 evil-winrm-py。感谢包维护者在各自发行版中打包和维护 evil-winrm-py。
有关如何使用 evil-winrm-py 的详细信息,请参阅 使用指南。
usage: evil-winrm-py [-h] [-i IP] [-u USER] [-p PASSWORD] [-H HASH] [-c CONFIGURATION_NAME]
[--priv-key-pem PRIV_KEY_PEM] [--cert-pem CERT_PEM] [--uri URI] [--ua UA]
[--port PORT] [--spn-prefix SPN_PREFIX] [--spn-hostname SPN_HOSTNAME] [-k]
[--no-pass] [--ssl] [--log] [--debug] [--no-colors] [--version] [--mcp]
[--mcp-port MCP_PORT] [--mcp-host MCP_HOST]
options:
-h, --help show this help message and exit
-i IP, --ip IP remote host IP or hostname
-u USER, --user USER username
-p PASSWORD, --password PASSWORD
password
-H HASH, --hash HASH nthash
-c CONFIGURATION_NAME, --configuration-name CONFIGURATION_NAME
session configuration (JEA endpoint) to connect to (default: Microsoft.PowerShell)
--priv-key-pem PRIV_KEY_PEM
local path to private key PEM file
--cert-pem CERT_PEM local path to certificate PEM file
--uri URI wsman URI (default: /wsman)
--ua UA user agent for the WinRM client (default: "Microsoft WinRM Client")
--port PORT remote host port (default 5985)
--spn-prefix SPN_PREFIX
specify spn prefix
--spn-hostname SPN_HOSTNAME
specify spn hostname
-k, --kerberos use kerberos authentication
--no-pass do not prompt for password
--ssl use ssl
--log log session to file
--debug enable debug logging
--no-colors disable colors
--version show version
--mcp start MCP server in streamable HTTP mode
--mcp-port MCP_PORT port for MCP streamable HTTP mode (default 8000)
--mcp-host MCP_HOST host for MCP streamable HTTP mode (default 127.0.0.1)
For more information about this project, visit https://github.com/adityatelange/evil-winrm-py
For user guide, visit https://github.com/adityatelange/evil-winrm-py/blob/main/docs/usage.md
示例:
evil-winrm-py -i 192.168.1.100 -u Administrator -p P@ssw0rd --ssl
Menu:
[+] services - Show the running services (except system services)
[+] upload <local_path> <remote_path> - Upload a file
[+] download <remote_path> <local_path> - Download a file
[+] loadps <local_path>.ps1 - Load PowerShell functions from a local script
[+] runps <local_path>.ps1 - Run a local PowerShell script on the remote host
[+] loaddll <local_path>.dll - Load a local DLL (in-memory) as a module on the remote host
[+] runexe <local_path>.exe [args] - Upload and execute (in-memory) a local EXE on the remote host
[+] menu - Show this menu
[+] clear, cls - Clear the screen
[+] exit - Exit the shell
Note: Use absolute paths for upload/download for reliability.
安装 mcp 附加组件后,您可以将 evil-winrm-py 作为 MCP 服务器运行,通过可流式 HTTP 将 WinRM 登录/执行/注销作为工具暴露给兼容 MCP 的客户端(例如 Claude、其他 AI 代理)。它通过 session_id 支持多个并发 WinRM 会话。
evil-winrm-py --mcp
# or customize the address:
evil-winrm-py --mcp --mcp-host 0.0.0.0 --mcp-port 8000
[!WARNING] 由于 MCP 服务器模式允许通过 MCP 工具在 Windows 主机上远程执行命令,因此请仅在受信任的网络上向受信任的 MCP 客户端公开它。