
ネイティブNim WinRMシェル(NTLM、Kerberos、ファイル転送、インメモリヘルパー、AD/OPSECレポート対応)
Nimで書かれたネイティブWinRMシェルクライアント
バージョン 1.2.0 · 作者 Chokri Hammedi (blue0x1) · ライセンス MIT
nimrm は、自身が所有する、または明示的にアクセス許可を得たシステムに対する合法的な管理、セキュリティテスト、および研究を目的としています。作者は、本ツールの誤用またはそれによって引き起こされた損害について責任を負いません。
nimrm は、実用的な認証、コマンド実行、転送、およびレポート作成のヘルパーを備えた、コンパクトで高速なWinRMシェルを提供します。Nimパッケージへの依存がないネイティブNimバイナリとしてビルドされています。
| 領域 | サポート |
|---|---|
| 認証 | NTLMパスワード、NTLMハッシュ、KRB5CCNAME 経由のKerberos |
| WinRMトランスポート | HTTP、HTTPS/TLS、カスタムポート |
| シェル | 対話型PowerShell、CMDプレフィックス、ワンショットコマンドモード、コマンドおよびローカルパスのオートコンプリート |
| 転送 | ファイルのアップロード/ダウンロード、再帰的なディレクトリ転送、リモートセッション間のファイルおよびディレクトリリレー |
| インメモリ | PowerShellスクリプトのインポート、マネージド.NETアセンブリの実行 |
| レポート | AD/ドメインコンテキスト、ログおよび監査の状況 |
| 信頼性 | Kerberosメッセージラッピング、トランスポートのリセット/リトライ処理 |
| コンポーネント | 要件 |
|---|---|
| ビルド | Nim >= 1.6.0 |
| Kerberos | Linuxでは libgssapi_krb5.so.2、macOSでは libgssapi_krb5.dylib |
| TLSビルド | OpenSSL および -d:ssl |
| ターゲット | 選択したポートでWinRMに到達可能であること |
Nimble:
nimble install nimrm
最新リリースのダウンロード:
curl -L -o nimrm https://github.com/blue0x1/nimrm/releases/latest/download/nimrm
chmod +x nimrm
Windowsリリースバイナリ:
Invoke-WebRequest -Uri https://github.com/blue0x1/nimrm/releases/latest/download/nimrm.exe -OutFile nimrm.exe
Debianパッケージ:
curl -L -o nimrm_1.2.0_amd64.deb https://github.com/blue0x1/nimrm/releases/latest/download/nimrm_1.2.0_amd64.deb
sudo dpkg -i nimrm_1.2.0_amd64.deb
BlackArch:
sudo pacman -S nimrm
BlackArchのPKGBUILDは最新のアップストリームgitコミットを追跡しているため、新しいリリースは次回のシステムアップデート時にBlackArchユーザーに届きます。nimrm がすでにインストールされている場合は、次のコマンドでアップグレードしてください:
sudo pacman -Syu nimrm
ソースからのビルド:
git clone https://github.com/blue0x1/nimrm.git
cd nimrm
make linux
make linux
make ssl
make windows
Windowsターゲットは、dist/windows/nimrm.exe に自己完結型のSSL対応実行ファイルを1つビルドします。ランチャーはNimで書かれており、生成されたWinRMコアと vendor/windows-runtime/ からの必要なランタイムDLLを埋め込み、実行時に一時ランタイムディレクトリに展開してから、同じ引数でコアを実行します。これは --tls / --ssl が渡されない限りプレーンHTTP WinRMをサポートし、TLSが有効な場合はHTTPS WinRMをサポートします。埋め込まれたOpenSSLランタイムは次を使用します:
libssl-3-x64.dll
libcrypto-3-x64.dll
Kerberosモード(-k / --kerb)はWindows上で遅延ロードされるため、Kerberosが使用されていない場合でも実行ファイルを起動できます。Windowsビルドには、Kerberosモードで使用されるMIT Kerberos/GSSAPIランタイムが埋め込まれています。
手動ビルド:
nim c -d:release --opt:speed -o:nimrm nimrm.nim
nimrm は、ネイティブNimバイナリ、永続的なWinRM runspace、チャンク転送ロジック、およびコンパクトな進捗レンダリングを使用することで、高速性を維持するように設計されています。
| 操作 | 実装 |
|---|---|
| アップロード | 大きなエンベロープに対する適応的リトライを伴うチャンク化Base64書き込み |
| ダウンロード | 進捗追跡を伴うストリーミングBase64チャンクと、小さなファイル向けの高速パス |
| リモートセッションリレー | あるWinRMセッションから読み取り、ファイルをローカルディスクに書き込むことなくコントローラのメモリを介して別のセッションに書き込み |
| ディレクトリ転送 | 同じチャンク転送パスを使用した再帰的なファイル列挙 |
| コマンド実行 | コマンドごとに再接続する代わりに、アクティブなWinRMシェル/runspaceを再利用 |
NTLMパスワード:
./nimrm -T 192.168.1.10 -A 'CORP\administrator' -P 'Password123'
NTLM pass-the-hash:
./nimrm -T 192.168.1.10 -A 'CORP\user' -N aad3b435b51404eeaad3b435b51404ee:0123456789abcdef0123456789abcdef
Kerberos:
KRB5CCNAME=FILE:/tmp/user.ccache ./nimrm -k -T dc01.corp.local -Z CORP.LOCAL
HTTP経由でNTLMメッセージ暗号化を強制:
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' --seal
カスタムポート:
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' -p 5985
ワンショットコマンド:
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' -c 'whoami'
TLS証明書の検証をスキップ(自己署名証明書):
./nimrm -T 192.168.1.10 -A 'CORP\user' -P 'Password123' --tls --insecure
| オプション | 説明 |
|---|---|
-T, --target | ターゲットIPまたはホスト名 |
-A, --account | ユーザー名: user、user@domain、または DOMAIN\user |
-P, --secret | NTLMパスワード |
-p, --port | WinRMポート |
-N, --nt-proof | NTハッシュまたは LM:NT ハッシュ |
-Z, --krb-zone | Kerberosレルムのオーバーライド |
-K, --kerb-spn | Kerberos SPNのオーバーライド |
-k, --kerb | Kerberos認証を使用 |
-c, --command | 1つのコマンドを実行して終了 |
--tls | HTTPS/TLSを使用 |
--insecure | TLS証明書の検証をスキップ |
-h, --help | ヘルプを表示 |
| コマンド | 説明 |
|---|---|
/help | ヘルプを表示 |
exit, quit | シェルを閉じる |
!<cmd> | cmd.exe 経由で実行 |
upload <local> [remote] | 1つのファイルをアップロード |
download <remote> [local] | 1つのファイルをダウンロード |
rupload <remote> <session> [dest] | アクティブセッションから別のセッションへ、メモリ経由でリモートファイルをコピー |
rdownload <session> <remote> [dest] | 別のセッションからアクティブセッションへ、メモリ経由でリモートファイルをコピー |
rupload-dir <remote> <session> [dest] | アクティブセッションから別のセッションへ、メモリ経由でリモートディレクトリをコピー |
rdownload-dir <session> <remote> [dest] | 別のセッションからアクティブセッションへ、メモリ経由でリモートディレクトリをコピー |
upload-dir <local> [remote] | ディレクトリをアップロード |
download-dir <remote> [local] | ディレクトリをダウンロード |
invoke-script <ps1> [args] | ローカルPowerShellをメモリからインポート |
execute-assembly <exe> [args] | マネージド.NETをメモリから実行 |
ad-info | AD/ドメインコンテキストを表示 |
opsec-check | ログおよび監査の状況を表示 |
sessions | すべてのアクティブセッションを一覧表示 |
session <opts> | 新しいセッションを作成 |
use <name|id> | セッションに切り替え |
kill <name|id> | セッションを閉じて削除 |
nimrmは複数の同時WinRMセッションをサポートします。シェルを離れることなく、異なるホストとユーザー間でピボットできます。
既存のセッション内から新しいセッションを作成:
PS C:\Users\Administrator> session -T 10.0.0.5 -A 'CORP\user2' -P 'Pass123'
PS C:\Users\Administrator> session -T dc02.corp.local -A [email protected] -N aad3b435:0123456789abcdef -n dc02
PS C:\Users\Administrator> session -T dc03.corp.local -k -Z CORP.LOCAL -n dc03
アクティブセッションの一覧表示:
PS C:\Users\Administrator> sessions
ID Name Target User Auth
-- ---- ------ ---- ----
* 1 session-1 dc01.corp.local:5985 administrator Kerberos
2 session-2 10.0.0.5:5985 user2 NTLM
3 dc02 dc02.corp.local:5985 user NTLM
セッション間の切り替え: