Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
提出
ツールエクスプロイトブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
rcekit — RCEの検出と確認を行うツールキット。URLまたはキャプチャしたHTTPリクエストに対してコマンドインジェクション、SSTI、ブラインドおよびOOBの経路をテストし、証拠付きの段階的な判定を返します。 | Kitploit
ツール/GitHubGitHub/kabiri-labs/rcekit
脆弱性スキャナーウェブ脆弱性スキャナーペイロード生成脆弱性分析エクスプロイトウェブアプリケーション悪用ファジングペネトレーションテストコマンド&コントロールユーティリティとフレームワークレッドチーミング
142461日前未レビュー
GitHub
kabiri-labs/rcekit

rcekit

RCEの検出と確認を行うツールキット。URLまたはキャプチャしたHTTPリクエストに対してコマンドインジェクション、SSTI、ブラインドおよびOOBの経路をテストし、証拠付きの段階的な判定を返します。

リポジトリを見る

人気

すべて見る →

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

すべてのツールを探索

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

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

RCEKit

confirmed はターゲットが入力を実行したことを意味する。negative はプローブが到達したことを意味する。

バージョン 2.40.0 · MIT · Python 3.8+ · サードパーティ依存ゼロ

RCEKit は、許可されたペネトレーションテスト、レッドチーミング、セキュリティリサーチ向けの RCE 検出・確認ツールキットである。テストを許可されているターゲット — URL またはキャプチャした HTTP リクエスト — を指定すると、すべての検出結果はそれが獲得したティアとともに返ってくる。

すべての confirmed は、RCEKit がそのプローブ用にランダムに生成し、そのリフレクションでは生成し得ない値に基づいている。レスポンスに存在し、ペイロードなしのコントロールには存在しない計算結果か、ターゲットだけが保持したトークンを運ぶアウトオブバンドコールバックのいずれかである。より弱いシグナルはそれぞれのティアに留まり、決してそこへ昇格されることはない。そして、何かをテストできなかった実行が、それをクリーンとして報告することは決してない。


「たぶん」ではなく、証明

RCEKit は単一の CLI の下で 複数の手法 を通じて RCE を確認する。以下では、本番ソフトウェアにおける 実際の、公開文書化された CVE に対して実行している — 各判定はペイロードなしのコントロールと差分比較されている:

RCE クラス--methods実世界のターゲット判定
OS コマンドインジェクション (結果ベース)reflectedWebmin 1.910 — CVE-2019-15107confirmed
式インジェクション (OGNL)evalApache Struts2 — S2-001confirmed
式ルックアップ (Log4Shell/JNDI)lookupApache Solr 8.11.0 (Log4j 2.14.1) — CVE-2021-44228lookup-sink
ブラインドコマンドインジェクション (出力なし)timeWebmin 1.910 — CVE-2019-15107needs-review

すべての行は tests/bench/ によって再現される。これは Docker 上でこれらのビルドに対して RCEKit を実行し、判定 および そのネガティブコントロールを検証する。最後の実行は 2.36.0 (2026-09-20) でグリーン: 3/3 ケース。これはある時点での主張であり、継続的なものではない -- ベンチマークはすべての変更ではなく、定期的な間隔で実行される。

各コントロールは、その行の真のテストである。reflected でプローブされた Struts2 は negative を返す。なぜなら S2-001 は OGNL を再評価し、その背後にシェルが存在しないからである。Webmin の time シグナルは、たまたま正しいターゲット上で needs-review に留められている。そして Solr を oob でプローブすると、エクスプロイト可能であるにもかかわらず negative を返す -- oob はシェルコマンドを構築し、${jndi:...} シンクはそれらのいずれも実行しない。これが lookup が埋めるために存在するギャップであり、主張ではなく測定されたものである。

Log4Shell の行は confirmed ではなく lookup-sink と表示する。コールバックが証明するのは、シンクが RCEKit の選んだ URI を解決したということである。RCE に到達するには、ルックアップにロード可能なクラスで応答するサーバーが必要であり、デフォルトのリスクティアでは jndi:dns:// のみが出ていく -- 名前解決であり、その先にそのようなサーバーが応答するための接続はない。

reflected — OS コマンドインジェクション、Webmin CVE-2019-15107 → confirmed

RCEKit confirming OS command injection on Webmin 1.910 (CVE-2019-15107): the shell computes arithmetic on random operands, the result is reflected in the response and absent from a payload-free control

eval — OGNL 式インジェクション、Apache Struts2 S2-001 → confirmed

RCEKit confirming OGNL expression injection on Apache Struts2 (S2-001): the payload %{ab} evaluates to the product in the response while the literal ab does not

アウトオブバンド — DNS コールバック経由のブラインド Log4Shell (CVE-2021-44228) → lookup-sink

RCEKit correlating a blind Log4Shell (CVE-2021-44228) DNS callback back to the exact payload that produced it: the token in the queried name is one only the target could have learned by resolving the URI it was handed

time — ブラインドコマンドインジェクション、Webmin CVE-2019-15107 → needs-review

RCEKit measuring a linear timing response on Webmin 1.910 (CVE-2019-15107): response time tracks a controlled 0/N/2N delay series — a needs-review timing candidate, never confirmed on its own


クイックスタート

RCEKit には 2 つのサポートされた形態 があり、どちらも他方のフォールバックではない。

インストール — pipx は CLI を独自の環境に保つ。これはライブラリではなくツールに求めるものだ:```bash pipx install rcekit # or: pip install rcekit rcekit --doctor # confirms the corpus it will run with

root@kitploit:~
**または1つのファイルだけを取得する。** ペイロードコーパスはモジュールに組み込まれているため、
`rcekit.py` は他に何もなくても単独で動作する — インストール手順も、site-packagesも、後に残すものもない。クライアントのジャンプボックス、エアギャップされたホスト、または `pip install` が選択肢にならないあらゆる場所で:```bash
curl -O https://raw.githubusercontent.com/kabiri-labs/rcekit/main/rcekit.py
python rcekit.py --doctor    # same corpus, same check, zero installation

どちらも同じコードを実行し、同じ判定を報告する。チェックアウトから作業するのが第三の方法で、これもインストール不要である:```bash git clone https://github.com/kabiri-labs/rcekit.git cd rcekit # Python 3.8+, standard library only

root@kitploit:~
入力を配置する場所に `FUZZ` マーカーを置き(またはキャプチャしたリクエストを使用する際に `-p` でパラメータを選択し)、RCEKit に RCE を証明するよう依頼します:```bash
rcekit --acknowledge-consent \
  --verify-url "https://target.example/lookup?host=FUZZ" \
  --methods reflected,eval

主な機能

  • 自動スキャン: 指定されたディレクトリを再帰的にスキャンし、すべてのファイルを分析します。
  • パターン検出: 正規表現パターンを使用して、一般的なシークレットの種類(APIキー、トークン、パスワードなど)を識別します。
  • エントロピー分析: 高エントロピー文字列を検出し、ランダムに生成されたシークレットを特定します。
  • カスタムルール: ユーザー定義のパターンとエントロピーしきい値をサポートします。
  • レポート: 検出結果をコンソール出力またはJSON形式で出力します。
  • 除外: 特定のファイル、ディレクトリ、またはパターンをスキャンから除外します。

インストール

root@kitploit:~
git clone https://github.com/yourusername/secret-scanner.git
cd secret-scanner
pip install -r requirements.txt

使用方法

root@kitploit:~
python secret_scanner.py /path/to/scan

オプション

オプション説明
-h, --helpヘルプメッセージを表示して終了します
-e, --entropyエントロピー分析を有効にします
-t, --thresholdエントロピーしきい値(デフォルト: 4.5)
-r, --rulesカスタムルールを含むJSONファイルへのパス
-x, --exclude除外するファイルまたはディレクトリのカンマ区切りリスト
-j, --json結果をJSON形式で出力します

例

root@kitploit:~
# 基本的なスキャン
python secret_scanner.py ./myproject

# エントロピー分析を有効にする
python secret_scanner.py ./myproject --entropy

# カスタムルールを使用する
python secret_scanner.py ./myproject --rules custom_rules.json

# ファイルを除外する
python secret_scanner.py ./myproject --exclude "*.log,node_modules,*.min.js"

# JSON出力
python secret_scanner.py ./myproject --json > results.json

設定

カスタムルール

カスタムルールはJSONファイルで定義できます。

root@kitploit:~
{
  "patterns": [
    {
      "name": "Custom API Key",
      "regex": "custom_api_key_[a-zA-Z0-9]{32}",
      "severity": "high"
    },
    {
      "name": "Internal Token",
      "regex": "internal_token_[a-f0-9]{40}",
      "severity": "medium"
    }
  ],
  "entropy_threshold": 4.5,
  "exclude_patterns": [
    "*.test.js",
    "*.spec.js",
    "test/fixtures/*"
  ]
}

重大度レベル

  • critical: 即座の対応が必要
  • high: 早急な対応が必要
  • medium: 対応を推奨
  • low: 情報提供

出力形式

コンソール出力

root@kitploit:~
[CRITICAL] AWS Access Key found in config/aws.yml:15
[HIGH] GitHub Token found in src/api.js:42
[MEDIUM] High entropy string found in data/keys.txt:8

JSON出力

root@kitploit:~
{
  "scan_path": "/path/to/scan",
  "timestamp": "2024-01-15T10:30:00Z",
  "findings": [
    {
      "file": "config/aws.yml",
      "line": 15,
      "type": "AWS Access Key",
      "severity": "critical",
      "match": "AKIAIOSFODNN7EXAMPLE"
    }
  ],
  "summary": {
    "total_files_scanned": 150,
    "total_findings": 3,
    "critical": 1,
    "high": 1,
    "medium": 1,
    "low": 0
  }
}

検出されるシークレットの種類

  • AWS Access Key ID
  • AWS Secret Access Key
  • GitHub Token
  • GitLab Token
  • Slack Token
  • Google API Key
  • Stripe API Key
  • Twilio API Key
  • SendGrid API Key
  • Private Keys (RSA, DSA, EC, OpenSSH)
  • JWT Tokens
  • Basic Auth Credentials
  • Database Connection Strings
  • Generic API Keys
  • Generic Passwords

仕組み

  1. ファイルの列挙: スキャナは指定されたディレクトリを再帰的に走査し、すべてのファイルを収集します。
  2. コンテンツの読み取り: 各ファイルが読み取られ、テキストコンテンツが抽出されます。
  3. パターンマッチング: 正規表現パターンがファイルコンテンツに適用され、既知のシークレット形式を識別します。
  4. エントロピー分析: 有効にすると、スキャナは文字列のエントロピーを計算し、高エントロピー文字列をフラグ付けします。
  5. 結果の集約: 検出結果が収集され、重大度別に分類されます。
  6. レポート: 結果がコンソールまたはJSON形式で出力されます。

制限事項

  • スキャナは既知のパターンとエントロピーに依存しているため、難読化されたシークレットやエンコードされたシークレットを見逃す可能性があります。
  • 大きなファイルはスキャンに時間がかかる場合があります。
  • 誤検出が発生する可能性があり、特に高エントロピー分析では顕著です。
  • バイナリファイルはデフォルトではスキャンされません。

コントリビューション

コントリビューションを歓迎します!お気軽にPull Requestを送信してください。

  1. リポジトリをフォークします
  2. フィーチャーブランチを作成します (git checkout -b feature/amazing-feature)
  3. 変更をコミットします (git commit -m 'Add some amazing feature')
  4. ブランチにプッシュします (git push origin feature/amazing-feature)
  5. Pull Requestを開きます

ライセンス

このプロジェクトはMITライセンスの下でライセンスされています - 詳細についてはLICENSEファイルを参照してください。

謝辞

  • TruffleHogにインスパイアされました
  • シークレット検出パターンにdetect-secretsを使用しています
  • エントロピー分析の概念に基づいています

免責事項

このツールは、教育および認可されたセキュリティテストの目的のみを意図しています。所有していない、またはスキャンする明示的な許可を得ていないシステムでは使用しないでください。著者は、このソフトウェアの誤用によって引き起こされるいかなる損害についても責任を負いません。``` [detect] methods: reflected, eval [detect] sent 13 probes: confirmed=4, negative=9

[detect] CONFIRMED execution (4): [reflected/unix/raw] ; echo RKYZRIP$((540141+314681))RKFWVFS$(echo RKBWOOC)RKYZRIP (target computed 'RKYZRIP854822RKFWVFSRKBWOOCRKYZRIP' — random operands, absent from control)

root@kitploit:~
### キャプチャしたリクエストから — 実際のターゲットのほとんどが持つ形

`--verify-url` が運ぶのは URL だけで、それ以外は何もありません。テストする価値のあるシンクのほとんどは、セッション Cookie、Content-Type、ボディを伴う POST の背後にあり、RCEKit はそのリクエストを丸ごと受け取ります。プロキシまたはブラウザの devtools から保存し、インジェクトするフィールドに名前を付けてください。```bash
rcekit --acknowledge-consent \
  -r search.req -p q \
  --methods reflected,eval

クイックスタート

インストール

root@kitploit:~
# リポジトリをクローン
git clone https://github.com/yourusername/kitploit-tool.git
cd kitploit-tool

# 依存関係をインストール
pip install -r requirements.txt

# ツールをインストール
python setup.py install

基本的な使用方法

root@kitploit:~
# 単一のターゲットをスキャン
python kitploit.py -t example.com

# 複数のターゲットをスキャン
python kitploit.py -f targets.txt

# 詳細出力を有効化
python kitploit.py -t example.com -v

設定

ツールは設定に config.yaml ファイルを使用します:

root@kitploit:~
scan:
  timeout: 30
  threads: 10
  retries: 3

output:
  format: json
  directory: ./results

api:
  key: YOUR_API_KEY
  endpoint: https://api.example.com

環境変数

以下の環境変数を設定できます:

  • KITPLOIT_API_KEY - APIキー
  • KITPLOIT_TIMEOUT - リクエストのタイムアウト(秒)
  • KITPLOIT_THREADS - 同時スレッド数
  • KITPLOIT_OUTPUT_DIR - 出力ディレクトリ

使用例

例1: 基本的なスキャン

root@kitploit:~
python kitploit.py -t 192.168.1.1

例2: カスタム設定でのスキャン

root@kitploit:~
python kitploit.py -t example.com -c custom_config.yaml

例3: 結果のエクスポート

root@kitploit:~
python kitploit.py -t example.com -o results.json

出力形式

ツールは複数の出力形式をサポートしています:

形式説明フラグ
JSON構造化データ-o json
CSV表形式データ-o csv
XMLマークアップ形式-o xml
HTMLレポート形式-o html

モジュール

スキャンモジュール

スキャンモジュールは以下を担当します:

  • ターゲットの検出
  • ポートスキャン
  • サービスの識別
  • 脆弱性の検出

レポートモジュール

レポートモジュールは以下を提供します:

  • 結果の集約
  • フォーマット変換
  • レポートの生成
  • 通知の送信``` [detect] sent 4 probes: confirmed=3, negative=1

[detect] CONFIRMED execution (3): [reflected/unix/raw] ; echo RKHWNHK$((114157+752773))RKXGFIH$(echo RKHSEIF)RKHWNHK (target computed 'RKHWNHK866930RKXGFIHRKHSEIFRKHWNHK' — random operands, absent from control)

root@kitploit:~
メソッド、パス、ヘッダー、ボディ、クッキーはキャプチャされたまま再利用され、各値はそれが到達するコンテキストに応じてエンコードされる — JSONのリーフ、フォームフィールド、クッキーではエスケープの方法が異なる。代わりに `-p` を外して `FUZZ` または `*` でその箇所をマークしてもよい。

### ツールが持つすべて

キャプチャされたリクエストからのみ到達できるものが2つある: **インジェクションポイントの列挙**(`--auto-params`)と、セッションを必要とするシンクである。したがって、RCEKitが実行できる最も完全な実行はURLからではなく `-r` から始まる — これはターゲットがクリーンであると結論付ける前に知っておく価値がある。```bash
rcekit --acknowledge-consent \
  -r search.req --auto-params all --point-order thorough \
  --methods reflected,eval,time,lookup,deser \
  --oob-host oob.yourdomain.example --listen-dns-port 53 \
  --verify-active-risk stateful --probe-depth full \
  --detect-json findings.json

主な機能

  • 自動スキャン: 指定されたディレクトリを再帰的にスキャンし、すべてのファイルを分析します
  • マルチスレッド処理: 並列処理による高速スキャン
  • 包括的な検出: 既知のマルウェアシグネチャ、疑わしいパターン、難読化されたコードを検出します
  • 詳細なレポート: 検出結果の詳細な分析を含む包括的なレポートを生成します
  • カスタマイズ可能なルール: 独自の検出ルールを追加してスキャン機能を拡張できます
  • YARA統合: 高度なパターンマッチングのためのYARAルールをサポートします
  • ハッシュベースの検出: 既知のマルウェアハッシュと照合します
  • エントロピー分析: ファイルのエントロピーを計算して、暗号化または圧縮されたマルウェアを検出します
  • 文字列抽出: ファイルから疑わしい文字列を抽出して分析します
  • PE分析: ポータブル実行可能ファイル(PE)を分析して、疑わしい特性を検出します

インストール

前提条件

  • Python 3.8以上
  • pip(Pythonパッケージマネージャー)

ソースからのインストール

root@kitploit:~
# リポジトリをクローン
git clone https://github.com/example/malware-scanner.git
cd malware-scanner

# 仮想環境を作成
python -m venv venv
source venv/bin/activate  # Windowsの場合: venv\Scripts\activate

# 依存関係をインストール
pip install -r requirements.txt

# パッケージをインストール
pip install -e .

pipを使用したインストール

root@kitploit:~
pip install malware-scanner

使用方法

基本的な使用方法

root@kitploit:~
# ディレクトリをスキャン
malware-scanner scan /path/to/directory

# 単一のファイルをスキャン
malware-scanner scan /path/to/file

# 詳細出力でスキャン
malware-scanner scan /path/to/directory --verbose

# 特定の出力形式でスキャン
malware-scanner scan /path/to/directory --output report.json --format json

コマンドラインオプション

root@kitploit:~
使用方法: malware-scanner [オプション] コマンド [引数]...

オプション:
  --version             バージョン情報を表示して終了
  --help                このヘルプメッセージを表示して終了

コマンド:
  scan                  ファイルまたはディレクトリをスキャン
  update                マルウェアシグネチャデータベースを更新
  config                設定を管理
  report                スキャンレポートを生成

スキャンコマンド

root@kitploit:~
malware-scanner scan [オプション] ターゲット

オプション:
  -r, --recursive       ディレクトリを再帰的にスキャン
  -t, --threads N       スレッド数(デフォルト: 4)
  -o, --output FILE     出力ファイル
  -f, --format FORMAT   出力形式(text、json、html、csv)
  -v, --verbose         詳細出力
  -q, --quiet           最小限の出力
  --no-yara             YARAスキャンを無効化
  --no-hash             ハッシュスキャンを無効化
  --no-entropy          エントロピー分析を無効化
  --no-strings          文字列抽出を無効化
  --no-pe               PE分析を無効化
  --max-size SIZE       最大ファイルサイズ(バイト単位)
  --exclude PATTERN     除外するパターン
  --include PATTERN     含めるパターン

設定

設定ファイルは ~/.malware-scanner/config.yaml にあります:

root@kitploit:~
# スキャン設定
scan:
  threads: 4
  max_file_size: 104857600  # 100 MB
  recursive: true
  follow_symlinks: false

# 検出設定
detection:
  yara_enabled: true
  hash_enabled: true
  entropy_enabled: true
  entropy_threshold: 7.0
  strings_enabled: true
  pe_enabled: true

# 出力設定
output:
  format: text
  verbose: false
  color: true

# データベース設定
database:
  update_url: https://example.com/signatures/
  auto_update: true
  update_interval: 86400  # 24時間(秒単位)

検出機能

マルウェアシグネチャ

スキャナーは既知のマルウェアシグネチャのデータベースを使用して、既知の脅威を検出します。データベースは定期的に更新されます。

YARAルール

YARAルールは、マルウェアのパターンを検出するための強力なパターンマッチング機能を提供します。カスタムルールを ~/.malware-scanner/rules/ ディレクトリに追加できます。

ハッシュベースの検出

スキャナーはファイルのMD5、SHA1、SHA256ハッシュを計算し、既知のマルウェアハッシュのデータベースと照合します。

エントロピー分析

高いエントロピー値は、暗号化または圧縮されたデータを示している可能性があり、マルウェアの兆候である場合があります。

文字列抽出

スキャナーはファイルから疑わしい文字列を抽出し、既知のマルウェア関連の文字列と照合します。

PE分析

ポータブル実行可能ファイル(PE)は、疑わしい特性(異常なセクション、疑わしいインポート、パッカーなど)について分析されます。

出力形式

テキスト形式

root@kitploit:~
スキャン結果
=============

スキャン対象: /path/to/directory
スキャン日時: 2024-01-15 10:30:00
スキャン時間: 5.23秒
スキャンしたファイル数: 1234
検出数: 3

検出された脅威:
1. /path/to/malware1.exe
   タイプ: Trojan
   名前: Trojan.Generic.12345
   重大度: 高
   ハッシュ: abc123...

2. /path/to/malware2.dll
   タイプ: Worm
   名前: Worm.Generic.67890
   重大度: 中
   ハッシュ: def456...

3. /path/to/suspicious.js
   タイプ: Suspicious
   名前: Suspicious.Script.11111
   重大度: 低
   ハッシュ: ghi789...

JSON形式

root@kitploit:~
{
  "scan_info": {
    "target": "/path/to/directory",
    "timestamp": "2024-01-15T10:30:00Z",
    "duration": 5.23,
    "files_scanned": 1234,
    "detections": 3
  },
  "threats": [
    {
      "path": "/path/to/malware1.exe",
      "type": "Trojan",
      "name": "Trojan.Generic.12345",
      "severity": "high",
      "hash": "abc123..."
    }
  ]
}

HTML形式

HTML形式は、ブラウザで表示できる視覚的に魅力的なレポートを生成します。

CSV形式

CSV形式は、スプレッドシートアプリケーションでの分析に適した表形式の出力を提供します。

高度な使用方法

カスタムルール

~/.malware-scanner/rules/ ディレクトリにYARAルールを追加できます:

root@kitploit:~
rule CustomMalware {
    meta:
        description = "カスタムマルウェア検出"
        author = "Your Name"
        date = "2024-01-15"
    
    strings:
        $s1 = "malicious_string" nocase
        $s2 = { 4D 5A 90 00 }
    
    condition:
        $s1 or $s2
}

スクリプトからの使用

root@kitploit:~
from malware_scanner import Scanner

# スキャナーを初期化
scanner = Scanner()

# ディレクトリをスキャン
results = scanner.scan_directory("/path/to/directory")

# 結果を処理
for threat in results.threats:
    print(f"検出: {threat.path}")
    print(f"タイプ: {threat.type}")
    print(f"名前: {threat.name}")
    print(f"重大度: {threat.severity}")

APIの使用

root@kitploit:~
from malware_scanner.api import scan_file, scan_directory

# 単一のファイルをスキャン
result = scan_file("/path/to/file")

# ディレクトリをスキャン
results = scan_directory("/path/to/directory")

設定リファレンス

スキャン設定

オプション説明デフォルト
threadsスレッド数4
max_file_size最大ファイルサイズ(バイト単位)104857600
recursive再帰的にスキャンtrue
follow_symlinksシンボリックリンクを追跡false

検出設定

オプション説明デフォルト
yara_enabledYARAスキャンを有効化true
hash_enabledハッシュスキャンを有効化true
entropy_enabledエントロピー分析を有効化true
entropy_thresholdエントロピーしきい値7.0
strings_enabled文字列抽出を有効化true
pe_enabledPE分析を有効化true

出力設定

オプション説明デフォルト
format出力形式text
verbose詳細出力false
colorカラー出力true

トラブルシューティング

よくある問題

スキャンが遅い

  • スレッド数を増やす: --threads 8
  • 不要な検出機能を無効にする: --no-yara --no-entropy

誤検出

  • 除外パターンを使用する: --exclude "*/node_modules/*"
  • 検出しきい値を調整する

メモリ不足

  • 最大ファイルサイズを減らす: --max-size 10485760
  • スレッド数を減らす: --threads 2

ログ

ログは ~/.malware-scanner/logs/ に保存されます。ログレベルは設定ファイルで調整できます。

貢献

貢献を歓迎します!詳細については CONTRIBUTING.md を参照してください。

ライセンス

このプロジェクトはMITライセンスの下でライセンスされています。詳細については LICENSE ファイルを参照してください。

謝辞

  • YARA - パターンマッチングエンジン
  • pefile - PEファイル解析
  • python-magic - ファイルタイプ検出

免責事項

このツールは、教育および研究目的のみを目的としています。マルウェアの分析と検出に責任を持って使用してください。このツールの使用によって生じたいかなる損害についても、作者は責任を負いません。``` [verify] loaded request from search.req: enumerating 4 injection point(s) [detect] enumerating 4 injection point(s) x 3 method(s) [detect] cost: 4 points x ~1739 probes = at least 6964 requests [detect] body param 'q': confirmed (1544 probes) <-- CONFIRMED [detect] sent 6371 probes: confirmed=446, negative=5925

root@kitploit:~
各フラグが有効にするもの:

| | |
|---|---|
| `--auto-params all` | 名前付きフィールド1つではなく、すべてのクエリ値、JSONリーフ、フォームフィールド、マルチパートパート、Cookie、ヘッダー |
| `--point-order thorough` | 高収率のものだけでなく、hop-by-hop以外のすべてのヘッダー |
| `--methods ...,lookup,deser` | 式ルックアップとデシリアライゼーションのシンク。シェル型のメソッドでは到達できない |
| `--oob-host` | ブラインドメソッド用のコールバックホスト。委任されたドメインが必要。ポート53にはroot権限が必要 |
| `--verify-active-risk stateful` | 最上位 — RCEKitが選択していないアドレスからターゲットにフェッチさせるプローブ形状を追加する |
| `--probe-depth full` | 安価なものだけでなく、シンクごとにすべてのブレイクアウト形状 |
| `--detect-json` | 同じ判定を機械可読なJSONで出力 |

**これは大量のリクエストになります。** コスト行は何かが発火する前に表示され、
`--max-points` / `--max-payloads` がそれを制限します。壊してもよいインスタンスに対して実行してください:
`--verify-active-risk stateful` は使い捨てのターゲット向けの階層であり、本番環境向けではありません。

外部インフラストラクチャ不要、設定ファイル不要。

**GIFを鵜呑みにしないでください** — docker化されたWebminとStruts2のターゲットに対して
[自分で再現してください](https://github.com/kabiri-labs/rcekit/blob/main/docs/verify-it-yourself.md)。約5分でできます。

**次:** [**フィールドガイド**](https://github.com/kabiri-labs/rcekit/blob/main/docs/guide.md)では、実際の状況 — キャプチャされた
リクエスト、WAF、フィルタリングされたセパレーター、クォートされたシンク、ブラインドおよび
egressなしのターゲット — を、それぞれ1つの実例で解説します。

---

## 判定の意味

RCEの*候補*を見つけるのは簡単です。他人の再テストに耐えるものを報告するのが難しい部分であり、
それは2つの方向で失敗します: 反射であることが判明する「脆弱性の可能性あり」と、
実際には何もテストしていない実行からの「脆弱ではない」です。

RCEKitは**互いに決して混同されない8つの判定**で答えます:

| 判定 | 何を主張するか |
|---|---|
| **`confirmed`** | ターゲットが入力を実行した。それ以外では生成できない値を返した — そのプローブに固有のランダムなオペランドから計算された値であり、その値はペイロードなしのコントロールには存在しない。 |
| **`deserialization-sink`** | ターゲットが攻撃者提供のオブジェクトグラフを再構築した。証明済みだが、*別の特性*についてである: そこからRCEに到達するかはクラスパスガジェットに依存するため、RCEとは決して呼ばれない。 |
| **`lookup-sink`** | ターゲットがRCEKitから渡されたURIを解決した — `${jndi:…}`式がルックアップに到達し、そのプローブだけが保持していたトークンを含むコールバックで証明された。これはシンクであり実行ではない: そこからRCEに到達するには、ロード可能なクラスを返すサーバーが必要。 |
| **`needs-review`** | それ自体では証明にならない本物のシグナル — 線形のタイミング回帰、パーサーフィンガープリント。時間をかける価値はあるが、「confirmed」という言葉に値することは決してない。 |
| **`inconclusive`** | 証拠は現れたが、実行に帰属できなかった — ペイロードなしのコントロールにもそれが含まれていた。 |
| **`negative`** | プローブが構築され、ターゲットに到達し、何も見つからなかった。 |
| **`error`** | 何もターゲットに到達しなかった。 |
| **`nothing-tested`** | プローブがまったく構築されなかった。 |

`confirmed`と`maybe`が曖昧になった瞬間、`confirmed`は何の意味も持たなくなる — だから
何かが上方に昇格されることは決してない。タイミング回帰はどれほどきれいな傾きでも`needs-review`のまま。
デシリアライゼーションコールバックは、クラスパスが悪用可能だとどれほど確信していても`deserialization-sink`のまま。

### もう半分: 何もテストしなかった実行は決してクリーンではない

最後の2行は他のツールにはないもので、見た目以上に重要です。ターゲットに到達できなかった、
またはフラグがすべてのプローブを除外したためにプローブを構築しなかったスキャナは、
ターゲットについて**何も**学んでいない — そしてそこで`negative`を出力するのは、
安全であるかのように読める嘘です。

そのため`error`と`nothing-tested`は第一級の判定であり、実行は非ゼロで終了し、
RCEKitはどちらが起きたのか、そしてその理由を告げます:```
[!] No probes were built, so NOTHING WAS TESTED — this is not a negative result.
[!] None of the selected methods (reflected, file) apply to environment(s): sql.

実行が静かに空になり得るあらゆる場所で発火します。選択した環境に適用されないメソッド、選択したシェルに構文がない --sink-shape の段、安全性の上限によって完全に抑え込まれた --bridges の選択、届く前に配信が壊れたリクエストボディなどです。

部分的にしか目隠しされなかった実行は、一段下で同じ扱いを受けます。二次オラクルを要求したのに、観測されたエンドポイントが一度も応答しなかった場合、プローブの判定は依然として有効です — ただし、その実行は、二次のネガティブとして通してしまうのではなく、指定したチャネルを一度も読むことなく判定されたことを伝えます。


何を確認するか

1つの CLI、1つの --methods フラグで、RCE への主要な経路をカバーします:

RCE クラス--methodsRCEKit がそれを証明する方法
OS コマンドインジェクションreflectedランダムなオペランドに対してシェルに $((a+b)) を計算させ、$(echo TAG) を畳み込ませる。確認するのは結果であり、リテラル式では決してない。シンク自身の方言 — POSIX、cmd.exe、PowerShell — で記述される。
コード / 式インジェクション — SSTI、SpEL、OGNL、Groovy、eval() (CWE-94)evalあらゆる一般的なテンプレート構文 (${…} {{…} #{…} %{…} <%=…%> @(…)、ベア) で a*b を注入する。リテラルの a*b が現れない一方で積が現れることを確認する。
ブラインドコマンドインジェクション (出力なし)time制御された 0/N/2N の遅延系列を発火させ、応答時間が遅延に線形に追従することを確認する。needs-review として報告される — ジッターでは偽装できないが、タイミングは計算された値ではない。
内部 / エグレスなし のターゲットfileランダムなトークンを書き込み、あらゆる読み戻し経路 — Web ルート、LFI パラメータ、ダウンロードまたはエクスポートハンドラ、/tmp に裏打ちされたプレビュー — を通じてそれを取得する。外部リスナーなしで、実行および書き込みプリミティブを証明する。
アップロード / 書き込みプリミティブ — PUT-a-JSP、未チェックのアップロード (CWE-434)write自身のアップロードリクエストを通じて積を計算するワンライナーを書き込み、そのファイルを取得する。積が返れば confirmed な RCE、ソースがそのまま返ってくれば needs-review — 任意ファイル書き込みであり、配信されるが解釈はされない。
デシリアライゼーションシンク — fastjson、shiro、weblogic (CWE-502)deser非実行の DNS ガジェットまたはエラー形状の差分を通じて、エンドポイントが攻撃者データをデシリアライズすることを証明する。deserialization-sink として報告され、決して RCE としては報告されない。
ブラインド / アウトオブバンド — 持ち出し、非同期oob組み込みの HTTP/DNS リスナーがコールバックを受信し、それぞれを正確なペイロードに相関させる。すべてのプローブは自身のトークンを運ぶ。
式ルックアップシンク — Log4Shell/JNDIlookupシンクはコマンドを実行する代わりに ${jndi:…} URI を解決するため、oob のシェルプローブは何にも到達しない。コールバックのみでそれを証明し、 として報告し、 とはしない。送信されるのは のみ — 名前解決であり、それ以外ではない — したがって証明されるのはルックアップであり、ガジェットチェーンではない。

これらのメソッドが到達できる範囲を広げる3つの要素がありますが、いずれも confirmed と呼ぶ対象を変えるものではありません:

  • 二次実行 (--observe-url) — ペイロードが一方のリクエストで着地し、別の場所で実行される場合: プロフィールページでレンダリングされる保存型 SSTI、テンプレートエンジンが後でレンダリングするログに書き込まれたペイロード、キューに入れられたジョブ。観測されたエンドポイントは、プローブが送信される前に取得されたスナップショットと差分比較されます。
  • クエリ言語ブリッジ (--bridges) — COPY … FROM PROGRAM、xp_cmdshell、expect://。ブリッジはキャリアであり、オラクルではありません: メソッドがすでに構築したコマンドをラップするため、同じ段階がそれを介して適用されます。
  • インジェクションポイントの列挙 (-p all) — クエリ、JSON リーフ、フォームフィールド、マルチパートパート、Cookie、ヘッダー、パスセグメント。それぞれが着地する場所に合わせてエンコードされ、プローブコストが発火前に表示されます。GraphQL ボディは、実際に確認できるものによって順序付けられます: リゾルバが操作ドキュメント自体より先に読む variables です。

メソッドは自由に組み合わせられます: --methods reflected,eval,time は3つすべてを実行し、それぞれの段階を個別に報告します。

正直な範囲。 RCEKit は、リクエストへの注入によって到達可能で、シェルまたは評価器によって解釈される RCE を確認します。メモリ破壊のバグ (バッファオーバーフロー、UAF) や、シェルを介さない argv 配列への引数インジェクションは対象外です — これらは別の問題です。デシリアライゼーションガジェットチェーンも対象外です: --methods deser はエンドポイントが攻撃者データをデシリアライズすることを証明し、それを独自の段階で報告しますが、どのガジェット (もしあれば) がそれを実行に変えるかはターゲットのクラスパスに依存し、RCEKit はそれを知っているとは主張しません。あらゆるものに対して凡庸であるよりも、上記のインジェクション駆動型 RCE クラスにおいて卓越することを目指しています。


RCEKit の比較

この分野の他のツールは、あなたを侵入させるために作られています。RCEKit は、その発見が他者の精査に耐えるように作られています — クライアントの再テスト、トリアージキュー、レポートレビュー。その違いは3つの場面で現れます。

1. 1つのインジェクションポイント、あらゆるクラス、1回の実行

テストする前にクラスを知っていることはほとんどありません。単一クラスのツールで未知のシンクをカバーするには、それぞれを順番に実行し、そのたびにリクエストを再構築する必要があります:

確認できるものRCEKitcommixSSTImapNuclei
OS コマンドインジェクション✅✅ (その全範囲)—テンプレートごと
式インジェクション / SSTI✅eval ベースの手法による✅ (その全範囲)テンプレートごと
ブラインド — タイミング✅ 別個の段階として✅✅—
ブラインド — アウトオブバンド✅ 組み込みリスナー——interactsh 経由
エグレスなし — 書き込み & 読み戻し✅ あらゆる読み戻し経路✅ (Web ルート)——
cmd.exe および PowerShell シンク✅ 方言ごとのプローブ✅ (cmd)—テンプレートごと
アップロード → 書き込み後実行✅ 書き込みと実行を別個の段階で——テンプレートごと
二次 — ここで着地し、あちらで実行✅———
OS へのクエリ言語ブリッジ✅——テンプレートごと
デシリアライゼーションシンク✅ 独自の段階、RCE とは決して呼ばない——テンプレートごと
上記すべて、1つの CLI、1回の実行✅———

カバレッジは各プロジェクト自身が文書化した手法リストに基づきます。SSTImap は tplmap のメンテナンスされた後継であり、その作者は tplmap をメンテナンス終了としています。```bash

Command injection, expression injection and blind timing against the same

parameter, in one pass, with zero infrastructure

python rcekit.py --acknowledge-consent -r request.txt -p host --methods reflected,eval,time

root@kitploit:~
### 2. 自身の結果と矛盾する

ツールは発見した内容を報告する。RCEKit はさらに、**信じることを拒否した内容**も報告する —
`inconclusive` はそれ自体が一つの判定であり、証拠は現れたものの実行に帰属できなかった場合に用いられる:```
[detect] methods: reflected, eval
[detect] sent 13 probes: confirmed=0, inconclusive=2, negative=11

それら二つは、他人の発見であったはずだ。その判定を生み出す五つのメカニズムがあり、それらはすべての確認で実行される:

  • ペイロードなしの対照リクエスト。 証拠はペイロードと共に存在し、それなしでは存在しない必要がある。両方に存在するものは inconclusive であり、発見ではない。
  • 同一トークンの不活性対照。 二番目のリクエストは、実行されない形式で同一のランダムトークンを運ぶ。単に入力をエコーするだけのターゲットはここで失敗する — これにより、リフレクションと実行が区別される。
  • 固定文字列ではなくランダムなオペランド。 オラクルは、毎回新しく計算されるタグで包まれた和、または境界で囲まれた積である。ペイロードをエコーするとリテラルの $((a+b)) が返り、実行だけが値を返す。
  • エンコーディングを考慮した証拠検索。 出力を base64、hex、URL、HTML、または unicode エスケープするシンクでも依然として確認できる — 生のボディが最初にチェックされるため、デコードは見逃したヒットをヒットに変えるだけで、その逆は決してない。
  • レスポンス全体の証拠検索。 計算された値は、レスポンスのあらゆるチャネル — ボディ、アプリケーションヘッダー、Cookie 値、リダイレクト先、HTTP 理由句、および JSON エラーエンベロープの各リーフ — で探され、発見はそれを運んだチャネルを名指しする。対照差分はあらゆるチャネルにも適用されるため、RCEKit が探す範囲を広げても、confirmed と呼ぶ範囲は広がらない。

同じ本能は逆方向にも働く。タイミングは決して自己確認しない、デシリアライゼーションコールバックは決して RCE と呼ばれない、そしてプローブを一つも構築しなかった実行は決してネガティブとは呼ばれない。

3. それはラボではなく、許可されたエンゲージメントのために作られている

クライアントのエンゲージメント規則が実際に問い合わせる統制は、あなたのノートではなくツールの中にある:

同意ゲート--acknowledge-consent なしでは、悪用目的のものは何も生成または発火しない。
実行計画最初のリクエストが出る前に、正確なプローブ数、シンク形状、安全ティア、および任意のアウトバウンドコールバック先を出力する。
デフォルトで安全リバースシェル、資格情報アクセス、クラウドメタデータ、ラテラルムーブメント、コンテナエスケープは、--verify-active-risk を引き上げるまで保留される。永続化とバックドアにはさらに二つ目のフラグが必要。ターゲット上にオブジェクトを作成するブリッジも同じ上限に従う。
クリーンアップコマンドfile、write、およびステートフルブリッジはターゲットの状態を変更するため、すべての発見 — needs-review を含む — はそれを元に戻すために実行すべき内容を出力する。
資格情報はそのままfile の読み戻しフェッチは、実行の Authorization/Cookie ヘッダーを同一オリジンにのみ運び、それらを差し控えるときはその旨を明示する。観測チャネルのフェッチは、--observe-request でリクエストを渡さない限り、一切送信しない。
秘匿化された監査証跡すべての実行は exploit_audit.log に記録され、資格情報ヘッダーが送信された事実を記録するが、その値は決して記録しない。
ウォーターマーキング--watermark は各ペイロードに追跡可能なトークンを刻印するため、数か月後にクライアントのログで見つかったペイロードはあなたの実行に帰属できる。
サードパーティのコールバックなしOOB リスナーはあなたのものである。公開インタラクションサーバーを経由するものは何もなく、それを完全に禁じるエンゲージメントもある。
単一の stdlib ファイルrcekit.py は単独で動作する — ジャンプボックス、エアギャップされたホスト、pip install が選択肢にならないあらゆる場所で。

別のものを手に取るべきとき

判定ではなくシェルが欲しい? commix と SSTImap はポストエクスプロイテーションへと続くが、RCEKit は設計上、証明で止まる。既知の CVE のために何千ものホストをスイープする? それは Nuclei の仕事だ — そして RCEKit は Nuclei テンプレートを書き出す(--output-format nuclei)ので、競合するのではなくあなたのスキャナに供給する。インジェクションが SQL であることは既に分かっていて、データベースそのものが欲しい? sqlmap がその領域を担う — RCEKit のブリッジは、テキストパラメータから OS に到達可能であることを証明するために存在し、データベースを悪用するためではない。


あなたの状況を見つける

各行はフィールドガイドの実例である — コマンド、それが送信するもの、そして返ってきたものをどう読むか。

状況参照先
URL とパラメータがあるURL を指定する
Burp から保存したリクエストがあるキャプチャしたリクエストを指定する
アプリが JSON / ペイロードが何度も壊されるペイロードを無傷で着地させる
どのクラスか分からないメソッドの選択
シンクが ; を除去するシンクがセパレータをフィルタするとき
入力が 'quotes' の内側に着地するクォート内へのインジェクション
シンクが入力をコマンド全体として実行するコマンド全体のシンク
ターゲットが Windows、またはシンクが PowerShellWindows と PowerShell のシンク
WAF があるWAF を回避する
出力が全く返ってこないブラインドターゲット
出力も外向き通信もない外向き通信なしのターゲット
リクエストが何かを実行する代わりにファイルを保存するアップロードおよび書き込みプリミティブのターゲット
ペイロードが後で、別のリクエストで実行される実行が別のリクエストで起こるとき
インジェクションポイントが SQL で、シンクがデータベースホスト

ドキュメント

自分で検証する上記の確認を、docker 化された脆弱なターゲットに対して自分のマシンで再現する。5分。
フィールドガイド最初のプローブからマルチステップチェーンまで、あらゆる実際の状況を例でたどるウォークスルー。ここから始める。
ペイロード生成 & エクスポートペイロードジェネレータとしての RCEKit:ターゲットプロファイル、および Burp / ffuf / Nuclei エクスポート。
リファレンスすべてのフラグ、環境、カテゴリ、コンテキスト、エンコーディング、およびコード実行シンク。
CHANGELOG.md各リリースでの変更点、およびアップグレード時に再確認すべきこと。
CONTRIBUTING.mdシンク、カテゴリ、エンコーディング、検出メソッドを追加する方法。
SECURITY.mdRCEKit 自体の脆弱性を報告する方法。

安全性 & 倫理

RCEKit は悪用する、そしてそれが要点だ。 脆弱性は、ターゲットにそのことを実行させることで確認される。なぜならそれが、シグネチャが偽造できず、パッチを当てたビルドが偶然に生成できない唯一の証拠だからである。実行を制限するのは、悪用へのためらいではない。それは二つの構造的事実と一つのスイッチである。

それはあなたから任意のペイロードを受け取らない。 プローブはオラクルに仕えるためにエンジンによって構築される — そのプローブにとってランダムなオペランドに対する算術、この実行だけが選び得た名前。検出を別の何かに変える入力は存在しない。なぜなら、与えるべきそのような入力が存在しないからである。

値を計算することを超えるものはすべて、必要とするティアを宣言するため、一つのフラグが実行がどこまで進むかを決める:--verify-active-risk safe | intrusive | stateful。そのティアを超えるメソッドまたは単一のプローブ形状は、それを送信するであろうフラグと共に、名前で保留される — 静かに縮小するラダーは、何も見つけるものがないターゲットと区別がつかない。使い捨てのインスタンスに対しては、ティアを引き上げてツールの持つすべてを得る。

  • 同意ゲート — 悪用の生成と検証には --acknowledge-consent が必要;--detection-only は無害であり不要。
  • デフォルトで安全 — 検証は低影響の証明のみを発火する;リバースシェル、ダウンロード実行、資格情報アクセス、ラテラルムーブメント、コンテナエスケープ、クラウドメタデータ、OOB ペイロードは、--verify-active-risk を引き上げるまで保留される。破壊的ペイロード(永続化、バックドア)は --verify-allow-destructive なしでは決して発火しない。実行計画は、何かが発火する前に正確に何が送信されるかを出力する。
  • 安全ティア — safe / intrusive / stateful。コーパスペイロードは --max-safety でフィルタされる;検出メソッドとそのプローブ形状は同じ段を宣言し、--verify-active-risk でフィルタされるため、ターゲットに外部へ到達させたり何かを残したりするメソッドは、すべてのコーパスペイロードと同じ順序に従う。プリフライトは、保留された各項目が実際に必要とするティアを名指しする。file と write は代わりに独自の設定でゲートされる:どちらも、書き込むディレクトリと読み戻す URL を指定するまで何もしない。
  • 監査 & ログ — すべての悪用/検証実行は exploit_audit.log に記録される;--watermark は追跡可能なトークンを埋め込む;実行ログは rcekit.log に送られる。
  • コーパス整合性 — 破損したコーパス、または明示的な --template-file が見つからない場合、RCEKit は実行を拒否して非ゼロで終了する。黙って何も生成しないのではなく(--doctor がそれをチェックする)。不在のデフォルトコーパスファイルのみが組み込みコピーにフォールバックし、そうするときはその旨を告げる。

このツールキットは、許可されたペネトレーションテスト、セキュリティ研究、教育、および防御的トレーニングのみを目的としている。明示的な許可なくシステムに対して決して使用しないこと — 許可なきテストは違法である。

開発```bash

python -m unittest discover -s tests # dependency-free test suite

root@kitploit:~
コントリビューションを歓迎します — 新しいシンク/カテゴリ、エンコーディング、環境、検出方法、バグ修正、ドキュメントなどです。ペイロードのベースは編集可能な JSON テンプレート(`templates/payloads.json`)にあるため、ほとんどのカバレッジは Python ソースに触れることなく拡張できます。コーパスを変更した後は、`rcekit.py` 内に同梱されている組み込みコピーを更新してください:```bash
python tools/embed_corpus.py    # --check verifies it is current

テストスイートは、両者が乖離した場合に失敗します。CONTRIBUTING.md を参照してください。

ライセンス

MIT — LICENSE を参照してください。

ツールをダウンロード
lookup-sink
決して
confirmed
jndi:dns://
クエリ言語ブリッジ
エンドポイントがシリアライズされたオブジェクトを受け取るデシリアライゼーションシンク
シンクがログインまたはファイルアップロードの背後にあるマルチステップチェーン
needs-review / inconclusive / error が出た結果の読み方
コーパスが使用不能だと言われるトラブルシューティング