
WinRMプロトコルを使用してリモートWindowsマシン上でコマンドを対話的に実行します(より高速に)
evil-winrm-py は、WinRM (Windows Remote Management) プロトコルを使用してリモートの Windows マシン上でコマンドを実行するための Python ベースのツールです。進捗表示とチェックサム検証を備えたファイルのアップロード/ダウンロード、ローカル/リモートパスおよび PowerShell コマンドレットのタブ補完、PowerShell スクリプトの読み込みと実行、DLL および EXE のインメモリ実行、コマンド履歴、色付き出力といった拡張機能を備えたインタラクティブシェルを提供します。また、MCP サーバーとして実行し、WinRM セッションを MCP 互換クライアント向けのツールとして公開することもできます。NTLM、Pass-the-Hash、Certificate、Kerberos など、さまざまな認証方式をサポートしています。インストールへスキップ

[!NOTE] このツールは、教育目的、倫理的な使用、および許可されたペネトレーションテストに厳密に限定して設計されています。いかなるシステムにアクセスする前にも、必ず明示的な許可を得ていることを確認してください。このツールへの不正アクセスや悪用は、違法かつ非倫理的です。
オリジナルの evil-winrm は Ruby で書かれており、一部のユーザーにとっては敷居が高い可能性があります。それを Python で書き直すことで、より親しみやすく使いやすくなり、さらに Python の豊富なエコシステムを活用して機能追加や柔軟性を実現できます。
また、winrm とその内部構造についてもっと学びたかったため、このプロジェクトは私にとって学習の場にもなります。
Tab 補完によるローカルおよびリモートのファイルパス (スペースを含むものも) の自動補完。Tab 補完による PowerShell コマンドレット/ヘルパーの自動補完。up/down 矢印キーによるコマンド履歴のナビゲーション。以下をサポートします:
詳細なドキュメントは docs ディレクトリにあります。
sudo apt install gcc python3-dev libkrb5-dev krb5-pkinit
# Optional: krb5-user
evil-winrm-py のインストールevil-winrm-py のインストールには、pip の代わりに uv/pipx を使用できます。
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.
または、main ブランチの最新コミットでインストールしたい場合は、リポジトリをクローンして 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.