
ネイティブNim WinRMシェル(NTLM、Kerberos、ファイル転送、インメモリヘルパー、AD/OPSECレポート対応)
Nim で書かれたネイティブ WinRM シェルクライアント
バージョン 1.2.0 · 作者 Chokri Hammedi (blue0x1) · ライセンス MIT
nimrm は、あなたが所有する、または明示的なアクセス許可を得たシステムにおける、合法的な管理、セキュリティテスト、および研究を目的としています。作者は、このツールの誤用またはそれによって生じた損害について責任を負いません。
nimrm は、実用的な認証、コマンド実行、転送、およびレポートヘルパーを備えた、コンパクトで高速な WinRM シェルを提供します。これは、Nim パッケージに依存しないネイティブな Nim バイナリとして構築されています。
| コンポーネント | 要件 |
|---|
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
手動ビルド:
nim c -d:release --opt:speed -o:nimrm nimrm.nim
nimrm は、ネイティブ Nim バイナリ、永続的な WinRM 実行空間、チャンク転送ロジック、およびコンパクトな進捗表示を使用することで、高速な動作を維持するように設計されています。
| 操作 | 実装 |
|---|---|
| アップロード | 大きなエンベロープに対する適応的リトライを備えたチャンクベースの Base64 書き込み |
| ダウンロード | 進捗追跡と小さなファイル用の高速パスを備えたストリーム Base64 チャンク |
NTLM パスワード:
./nimrm -T 192.168.1.10 -A 'CORP\administrator' -P 'Password123'
NTLM パス・ザ・ハッシュ:
./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
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 名前 ターゲット ユーザー 認証方式
-- ---- ------ ---- ----
* 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
セッションの切り替え:
[session-2] PS C:\Users\user2> use 1
[*] Switched to session: session-1 (dc01.corp.local:5985)
[session-1] PS C:\Users\Administrator> use dc02
[*] Switched to session: dc02 (dc02.corp.local:5985)
セッションを閉じる:
[dc02] PS C:\Users\user> kill 2
[*] Killed session: session-2
アクティブセッション間でファイルをコピー:
[session-1] PS C:\Users\user1> rupload C:\Users\user1\tool.exe session-2 C:\Users\user2\Desktop\tool.exe
[*] Download mode: WinRS binary stream
✔ rupload-read [━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━] 100% 442.0 KB/442.0 KB done in 0.7s
[*] Upload mode: WinRS stream
✔ rupload-write [━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━] 100% 442.0 KB/442.0 KB done in 0.4s
[+] Remote uploaded 452608 bytes from session-1:C:\Users\user1\tool.exe to session-2:C:\Users\user2\Desktop\tool.exe
[session-1] PS C:\Users\user1> rdownload session-2 C:\Users\user2\Desktop\out.txt C:\Users\user1\out.txt
[+] Remote downloaded 1024 bytes from session-2:C:\Users\user2\Desktop\out.txt to session-1:C:\Users\user1\out.txt
rupload と rupload-dir はアクティブセッションをソース、指定されたセッションを宛先として使用します。rdownload と rdownload-dir は指定されたセッションをソース、アクティブセッションを宛先として使用します。これらのコマンドは nimrm のメモリを介してバイトを中継するため、コントローラホストは一時的なコピーをディスクに書き込みません。
セッションオプション:
PowerShell と CMD:
PS> hostname
PS> Get-Process
PS> !ipconfig /all
転送:
PS> upload ./tool.exe C:\Temp\tool.exe
PS> download C:\Temp\out.txt ./out.txt
PS> rupload C:\Temp\tool.exe session-2 C:\Temp\tool.exe
PS> rdownload session-2 C:\Temp\out.txt C:\Temp\out.txt
PS> rupload-dir C:\Temp\logs session-2 C:\Temp\logs
PS> rdownload-dir session-2 C:\Temp\loot C:\Temp\loot
PS> upload-dir ./payloads C:\Temp\payloads
PS> download-dir C:\Temp\logs ./logs
リモートセッション中継の方向:
# アクティブセッション -> 別のセッション
PS> rupload C:\Temp\payload.exe session-2 C:\Users\Public\payload.exe
# 別のセッション -> アクティブセッション
PS> rdownload session-2 C:\Users\Public\loot.zip C:\Temp\loot.zip
オートコンプリート:
PS> upl<Tab>
PS> upload ./pay<Tab>
インタラクティブプロンプトは、コマンド名と、upload、upload-dir、invoke-script、execute-assembly などのローカルソースコマンドのローカルファイルシステムパスを補完します。
メモリ内ヘルパー:
PS> invoke-script ./AdminTools.ps1
PS> execute-assembly ./tool.exe arg1 arg2
レポート:
PS> ad-info
PS> opsec-check
execute-assembly はマネージド .NET アセンブリのみをサポートします。invoke-script は現在のリモート実行空間にインポートします。rupload、rdownload、rupload-dir、rdownload-dir はコントローラホストに一時ファイルを書き込みませんが、バイトはコントローラのメモリを通過し、2つの WinRM 転送区間を使用します。ad-info と opsec-check は読み取り専用のレポートコマンドです。MIT。 LICENSE を参照してください。
| 領域 | サポート |
|---|
| 認証 | 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 に到達可能 |
| リモートセッション中継 | ファイルをローカルディスクに書き込むことなく、コントローラのメモリを介して、ある WinRM セッションから読み取り、別のセッションに書き込み |
| ディレクトリ転送 | 同じチャンク転送パスを使用した再帰的なファイル列挙 |
| コマンド実行 | コマンドごとに再接続する代わりに、アクティブな WinRM シェル/実行空間を再利用 |
| オプション | 説明 |
|---|
-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> | セッションを閉じて削除 |
| オプション | 説明 |
|---|
-T | ターゲットホスト |
-A | ユーザー名 |
-P | パスワード |
-N | NT ハッシュ |
-k | Kerberos 認証 |
-Z | Kerberos レルム |
-K | SPN 上書き |
-p | ポート |
--tls | HTTPS を使用 |
-n | カスタムセッション名 |