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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CustomC2ChannelTemplate — Cobalt Strike用のカスタムC2チャンネルを、リフレクティブローダーによって適用されるIATフックを使用して開発するためのテンプレート。 | Kitploit
ツール/GitHubGitHub/codextf2/customc2channeltemplate
ペネトレーションテストフレームワークエクスプロイトフレームワークシェルコードコマンド&コントロールレッドチーミングペイロード開発
GitHubcodextf2/customc2channeltemplate

CustomC2ChannelTemplate

Cobalt Strike用のカスタムC2チャンネルを、リフレクティブローダーによって適用されるIATフックを使用して開発するためのテンプレート。

リポジトリを見る
1071738ヶ月前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

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

IATフッキングによるカスタムC2チャネル

これは、リフレクティブローダーによって適用されるIATフックを使用して、Cobalt Strike用のカスタムC2チャネルを開発するためのシンプルなPoCおよびテンプレートです。

ブログ記事: https://codex-7.gitbook.io/codexs-terminal-window/red-team/cobalt-strike/building-custom-c2-channels-by-hooking-wininet
TCPチャネルのデモGIF gif.gif

使用方法

customCallback.h、hook.c、hash.h および hook.h ファイルは大まかなテンプレートですが、PoCとしてそのまま Crystal kit にドロップして使用できます。それらを udrl/src フォルダに配置し、既存のコピーを置き換えてください。tcg.h は変更されていません(Raphael Mudge の tradecraft garden 由来)。

examples/ フォルダ内の例はそのまま使用できますが、これらは例であり、作成時に運用上の考慮は行われていません。注意して使用してください。

現在の例は次のとおりです:

  • 名前付きパイプ(ブローカーは同一ホスト上で実行する必要があります)
  • TCP
  • UDP(チャンキングを実装するのが面倒だったため、コールバック最大サイズは65535)
  • NTP(チャンキングを実装するのが面倒だったため、コールバック最大サイズは65535)
  • ICMP(チャンキングを実装するのが面倒だったため、コールバック最大サイズは65535)
  • Websockets(wininetでのみ動作します。修正予定)

Crystal kit のオリジナルの回避機能(Draugr 実装やスリープマスキングなど)は、このコードベースをクリーンで移植可能に保つために hook.c から削除されていることに注意してください。それらの機能を維持したい場合は、Crystal kit のオリジナルコピーから戻すことができます。

beacon DLL を生成する際には、使用する http ライブラリとして適切な http ライブラリ winhttp/wininet を選択する必要があります。

このテンプレートのテストに使用された Malleable C2 プロファイルはリポジトリに提供されています。理論上、(ほとんどの)他の Malleable C2 プロファイルでも動作するはずですが、このテンプレートはこのプロファイル(GraphStrike から取得)を使用してテストされました。

なぜこれを作ったのか?

公式の ExternalC2 インターフェースは使い勝手が悪いものです。ExternalC2 チャネル経由で SMB beacon のステージングが必要であり、(4.10 までは)先に ExternalC2 エージェントを介してステージングを行わないと、既製の SMB beacon との通信をサポートしていませんでした。現在の状態でも、依然として次のアーキテクチャに縛られています:

root@kitploit:~
smb beacon --named pipe--> externalc2 agent --custom channel--> externalc2 handler --> teamserver

はい、Cobalt Strike 4.12 で UDC2 が追加されたことは認識しています。これは、その機能を UDRL で再現するための単なる楽しい実験です。

コンセプトは単純です。コールバックに使用される WinAPI をフックできれば、コールバックに必要なすべてのデータをすでに持っていることになります。カスタム C2 チャネルを実装するこの方法は、GraphStrike に見られるように、すでに過去に行われています。

ただし、GraphStrike の実装は依然として HTTP プロトコル自体にかなり依存しています。このリポジトリの目的は、周囲のコードをほとんど変更せずに、HTTP またはその他の任意のカスタムチャネルを実装するための、使いやすく修正・拡張が容易なテンプレートを提供することです。

テンプレートの拡張

このテンプレートは明らかにデフォルト状態での使用を意図していないため、選択した C2 チャネルを実装するには、以下を変更する必要があります:

customCallback 関数が次のことを行うように変更します:

  1. base64 ブロブ(最初の引数)をあらゆる手段で外部に送信する
  2. レスポンスを取得して返す

引数を使用して、http リクエストの元のホストとポート(Cobalt から設定したもの)を利用できます:

root@kitploit:~
const char *host
INTERNET_PORT port

そして、broker.py の handleCallback() 関数を次のことを行うように変更します:

  1. コールバックを受信する
  2. process_encoded_request(ここにコールバックデータを入れる) を呼び出す
  3. レスポンスを送り返す

これだけです。

例として、customCallback.h 内の customCallback() 関数にある PoC は現在次のことを行います:

  1. base64 ブロブをファイル request.txt に書き込む
  2. 500ms 待機する
  3. ファイル response.txt からレスポンスを読み取る
  4. ファイルの内容を返す

broker.py の handleCallback 関数にある PoC は現在次のことを行います:

  1. request.txt からコールバックを読み取る
  2. process_encoded_request(encoded_request) を呼び出す
  3. レスポンスを response.txt に書き込む

usage: broker.py [-h] --host HOST --port PORT ここで、host と port はチームサーバー上の http リスナーを指します。ブローカーは http リクエストを解析し、実際のリスナーに送信します。

この実装に関するその他の雑学(興味がある方向け)

これはおそらく私がやった中で最も「怠惰な」方法ですが、最も安定した方法の1つでもあります。基本的には、HTTP リクエスト全体をラップして、どのような方法でもブローカーに送るだけです。ブローカーはそれを実際にチームサーバーに送信し、HTTP beacon として実行します。これはチームサーバーからは完全に透過的です。

(技術的には)よりクリーンな実装も試しました。それは、最低限の Malleable C2 プロファイル(実際には graphstrike のものを使いました)を使用し、wininet フック自体の中で malleable 仕様に従って異なる beacon データコンポーネント(id、metadata、output など)を解析するというものでした。これによりコールバックブロブのサイズはわずかに小さくなっていたでしょう。しかし、この実装は、リクエスト解析によってコードベースが不必要に複雑になり、またその特定のプロファイルの使用(それほど大した問題ではないですが、かなりハッキーです)が必要だったため、断念されました。

この実装の方が優れていると感じました。ハッキーな malleable プロファイルへの依存が少なく(技術的には、beacon のレスポンス出力をレスポンスボディで送信する必要はまだありますが、それが唯一の要件です)、コードが10倍読みやすかったからです。

また、http リクエスト JSON には base64 エンコーディング以外の難読化や暗号化はないことも注目に値します。独自のものを追加してもかまいませんが、Beacon のコールバックはすでに暗号化されているため、技術的にはデータが復号される危険性はありません。最悪の場合、取得された base64 ブロブが HTTP リクエストとして識別される可能性があるだけです。その情報をどう使うかはあなた次第です。

クレジットと参考リンク

  • https://github.com/rasta-mouse/Crystal-Kit (開発とテスト用の元テンプレート)
  • https://github.com/RedSiege/GraphStrike (Graph チャネルを実装するための IAT フッキング)
  • https://github.com/benheise/TitanLdr (DoH を実装するための IAT フッキング)
  • https://tradecraftgarden.org/ (crystal kit、ひいてはこれにも使用されているフレームワーク)

はい、コードとコメントの一部を書くのに LLM を使用しました。誰もドキュメントを書いたり、C でボイラープレートの JSON パーサーをゼロから書いたりするのは好きではありません。訴えてください。

免責事項

通常の免責事項です。この出来の悪いコードを使用して引き起こす可能性のある、人道に対する罪や核戦争について、私は一切の責任を負いません。

ツールをダウンロード