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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Fortigate-SSL-VPN-Exploit-Kit — FortiGate SSL-VPNの金塊。CVE-2024-21762およびCVE-2023-27997。79の動作するエクスプロイトクライアント。53のハードウェアSKU。55のFortiOSビルド。 | Kitploit
ツール/GitHubGitHub/abraxas/fortigate-ssl-vpn-exploit-kit
エクスプロイトフレームワーク脆弱性分析エクスプロイトウェブアプリケーション悪用データ流出ネットワークセキュリティペネトレーションテストコマンド&コントロールレッドチーミング
ペイロード開発
GitHubabraxas/fortigate-ssl-vpn-exploit-kit

Fortigate-SSL-VPN-Exploit-Kit

FortiGate SSL-VPNの金塊。CVE-2024-21762およびCVE-2023-27997。79の動作するエクスプロイトクライアント。53のハードウェアSKU。55のFortiOSビルド。

リポジトリを見る
8時間27分前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

FortiGate SSL-VPN キット(野外で回収)

研究アーカイブ。 発見されたままの状態で回収。これらのファイルは私が作成したものではない。
公開日: 2026年9月1日

このリポジトリは、SKU別FortiGate SSL-VPNエクスプロイトカタログの上に載るオーケストレーター、第2段階ペイロード、およびオペレーターリスナーである。長編のストーリー、件数、ハンティングノートは、Abraxas Labsのシリーズ**The SSL-VPN pot of gold**に掲載されている。

  • サイト: abraxaslabs.tech
  • シリーズ: The SSL-VPN pot of gold
  • GitHub: github.com/abraxas
  • Twitter / X: @abraxas_null

このリポジトリをホストしている当事者と標的システムの所有者の両方から明示的な書面による許可を得ていない限り、いかなるホストに対してもこのマテリアルを実行しないこと。関連するCVEは、このリリース前に公開され、パッチ適用済みである。このツリーは、研究、検知、および歴史的分析を目的としている。


これは何か

私は野外でプライベートなFortiGate SSL-VPNキットを発見した。最初のドロップは、動作するクライアントのディレクトリだった: exp/exp_60E-v6.4.7.pyやexp/exp_1000D-v7.4.0.pyのような名前だ。各ファイルはである。2つの公開n-dayが、フォルダが部品カタログのように見えるまでハードウェアとファームウェア全体に再スタンプされていた。

SKU別・FortiOS別のメモリ破壊クライアント

金脈はオフセットマトリクスであり、新しいバグではない。その議論はシリーズのPhase 0にある。Phase 1では、2つのプリミティブを挙動として扱う。Phase 2は、検索可能なSKU / トレイン / CPUマップである。Phase 3はハンティングである。

このリポジトリは、同じキットの残りの部分であり、別のエクスプロイトファミリーではない。

  • exp/プログラムは、シリーズで既に説明されているイメージ別クライアントである。
  • 親ディレクトリとshellcode/のファイルは、それらのクライアントが呼び出すように書かれていたランチャー、インプラント取得、および設定窃取リスナーである。
  • exp_*.pyファイルにはインプラントが含まれていなかった。それらは(1)「シェルコードサーバー」から生のバイトを取得するか、(2)GET /s.jsしてevalすることだけを知っていた。それらの欠落していた部分がここにある。

プリミティブ:

ファミリーCVEFortinetアドバイザリ公開情報
ACVE-2024-21762FG-IR-24-015Assetnote — Two Bytes is Plenty
BCVE-2023-27997FG-IR-23-097Lexfo — XORtigate, Bishop Fox

両方ともCISAの既知の悪用された脆弱性カタログに掲載されている。poc.pyはどちらのCVEも実装していない。既に分類されている2つのファミリー(チャンク書き込み21762、enc=ヒープオーバーフロー27997)を選択してラップする。


レイアウト

root@kitploit:~
.
├── poc.py                     # pocsuite3ランチャー / フィンガープリント / プロセスマネージャー
├── s.js                       # Node第2段階(設定窃取)
├── send_cmd.py                # ステージャーパスのコールバックハンドラー
├── init.sh                    # オペレーターワークステーションのパッケージインストール
├── requirements.txt           # pwntools
├── exp/
│   └── exp_<SKU>-v<FortiOS>.py
└── shellcode/
    ├── shellcode_server.py    # 長さプレフィックス付きブロブポンプ
    ├── shellcode_arm          # 約2.0 MBの生の第2段階
    └── shellcode_amd64        # 約2.7 MBの生の第2段階

exp/index.htmlとshellcode/index.htmlは、通常のPython http.serverディレクトリリスティングである。これらは、このツリーがかつてWebルートとしてホストされていたことを示すだけである。

このexp/のコピーは、以前のカタログに4つの追加クライアントを加えたものである: exp_30E-v6.2.4.py、exp_30E-v6.2.12.py、exp_30E-v6.2.14.py、exp_40F-v7.0.5.py。


各要素の連携方法

root@kitploit:~
poc.py                          オーケストレーター (pocsuite3)
  │
  ├─ フィンガープリントポータル ─────── VERSION_LIBS (ハッシュ → SKU + FortiOS)
  ├─ ファイル選択 ──────────────── exp/exp_<SKU>-v<ver>.py
  │
  ├─ クライアントが「ステージャー」種別の場合 (Family A ARM / 一部のamd64)
  │     shellcode/shellcode_server.py を起動
  │           shellcode/shellcode_arm  または  shellcode_amd64 を読み込む
  │     send_cmd.py を起動                   (コールバック待機)
  │     :9999 で設定レシーバーを起動
  │     選択した exp_*.py を実行
  │
  └─ クライアントが「Node /s.js」種別の場合 (ほとんどのFamily B + 多くのFamily A)
        HTTPで s.js を配信
        :9999 で設定レシーバーを起動
        選択した exp_*.py を実行
              → ファイアウォールが GET /s.js → eval → 外部送信

パイプラインを一言で: 識別 → オフセットファイル選択 → sslvpndを破壊 → インプラント取得 → /data/config/*.gzを外部送信 → オペレーター側でアーカイブ。

最後のステップが要点である。ヒットは、ファイアウォール自体のsslvpndにおける認証なしのコード実行である — TLS終端、ルーティングポリシー、VPNセッション、多くの場合LDAP/RADIUSバインディング。FortiOSは有用な/bin/shを提供しない。公開研究とこのキットの両方が、内部コマンドヘルパーおよび/またはFortiOSが実際に同梱している/bin/nodeを経由する。確認されたヒットは、クラッシュしたデーモンではなく、ネットワークエッジの侵害として扱うこと。What a hit meansを参照。


ファイル別解説

poc.py — ランチャー

オペレーターフロントエンド(pocsuite3 POCBase)。CVE-2024-21762やCVE-2023-27997を実装していない。

  1. https://<target>/remote/login?lang=enを取得(フォールバックGB2312)。
  2. /sslvpn/js/login.js?q=<md5>からキャッシュバスターハッシュを取得。
  3. そのハッシュを埋め込みテーブルVERSION_LIBS(182行のhash,SKU,version)で検索。このテーブルがあるからこそ、オペレーターがSKUを指定しなくてもキットは50以上のアプライアンスから選択できる。SNMPや管理APIではなく公開SSL-VPNリソースハッシュによって駆動される、マトリクスと同じSKU。
  4. exp/exp_<SKU>-v<version>.pyを解決。
  5. ソースを読んでクライアントを分類:
    • s.jsを含む → 種別2 (Nodeローダー)
    • 使用法にShellcode Serverと記載 → 種別1 (ステージャー); その後スクリプト内のarm vs amd64を確認
  6. 対応するヘルパーを起動し、ホスト/ポート/コールバック引数でexp_*.pyをPopen。

このコピーでのデフォルトのオペレーターアドレス: 環境変数からのHOST_IP、それ以外はATTACKER_HOST。このツリー内のリテラルIPv4アドレスはロールラベルに置き換えられている(ポートは変更なし):

ラベルロール出現箇所
TARGET_HOST攻撃対象のFortiGateハードコードなし。argvからのrhost / target(poc.pyを参照)
ATTACKER_HOSTオペレーターワークステーションpoc.pyのデフォルトHOST_IP。poc.py、send_cmd.py、shellcode/shellcode_server.pyのバインドアドレス。lhostで埋められるexp_*.pyのs.js / TFTPプレースホルダー
C2_HOSTこのインプラントのコピーに焼き込まれたコールバックs.js — エクスプロイトに渡されるlhostではない
ポートロール
7777コールバック / send_cmd.py
8888シェルコードサーバー
9999設定レシーバー(s.jsとsend_cmd.pyの外部送信と一致)

ポータルハッシュがVERSION_LIBSにない場合、「unknown target hash」で停止する。ハッシュが一致してもexp/ファイルがない場合は「no exp」。

s.js — 欠落していたNode第2段階

これは、Family B / Node Family Aクライアントがexecute_cmdの後に取得するファイルである。これは一般的なリバースシェルではない。

  • ハードコードされたコールバック**C2_HOST:9999**(C2ホスト。TARGET_HOSTでも、エクスプロイトに渡されるlhost / ATTACKER_HOSTでもない — このコピーは1つのオペレーターコールバック用に焼き込まれた)。
  • ファイアウォール上の/data/config/を読み取る。
  • シンボリックリンクでない*.gzファイル(FortiOS圧縮設定オブジェクト)を取得。
  • それらを展開し、それぞれを小さな長さプレフィックス付きTCPプロトコルで送信し、その後エンドマーカーを送信。

これは設定窃取ツールである。これが、poc.pyも9999でリッスンし、ファイルをbase64結果に再組み立てする理由を説明している。任意のFortiGateの出口からポート9999のC2_HOSTをハントすること。ハンティングノート: Phase 3。

send_cmd.py — ステージャーパスのコールバックハンドラー

選択したexp_*.pyがARM/amd64シェルコード種別(使用法にシェルコードサーバーを含む)の場合に使用される。

  • 7777でリッスン。
  • 接続時、1つのコマンドを書き込む: cd /data/configして、すべての*.gzをnc <LHOST> 9999にcat。
  • s.jsと同じ目標(設定窃取)、異なるトランスポート(シェルコールバック vs Node)。

コメントアウトされたバリアントは、生のcatの代わりにbase64フレーミングを使用していた。

shellcode/shellcode_server.py — Family Aステージャー用バイトポンプ

ARM32 exp_*.pyスタブに既に見られるプロトコルと一致:

  1. オペレーター選択のポートにバインド(poc.pyは8888を使用)。
  2. 1つの接続を受け入れる。
  3. 4バイトのリトルエンディアン長を送信。
  4. 同じディレクトリからshellcode_<arch>ブロブを送信。

exp_*.pyステージャーはここに接続し、書き込み可能・実行可能メモリをマップし、ブロブを取得してからlhost:lport(7777 → send_cmd.py)に接続し直す。

shellcode/shellcode_armとshellcode/shellcode_amd64

生の第2段階ブロブ(約2.0 MB ARM、約2.7 MB amd64)。ステージャーがダウンロードするものである。Pythonファイル内の小さなThumbスタブではない。それらのスタブはこれらのファイルを取得するだけである。Node以外のパスのインプラントとして扱うこと。サイズから、パックまたは静的ペイロードであり、数十命令ではないことが示唆される。

init.sh — オペレーターワークステーションのセットアップ

ファイアウォールに対しては使用されない。build-essential、binutils-arm-linux-gnueabihf、gcc-aarch64-linux-gnuをインストールする。これはDebian系の攻撃ボックス上でARM/AArch64の部品をビルドするためのものである。Pythonのみを配布するのではなくステージャーをコンパイルする作者と一致する。

requirements.txt

1行のみ: pwntools。exp_*.pyファイルとshellcode_server.pyがこれをインポートする。poc.pyもpocsuite3、python-dotenv、mmh3、requestsを必要とする。


exp/クライアントとの関係

シリーズで既に説明済みこのツリーでのロール
Family A ARM exp_*.py(ステージャー引数)第1段階。shellcode_server.py + shellcode_arm(またはamd64)を呼び出し、その後lhost:7777。
Family A/B Node exp_*.py(/s.js)第1段階。親s.jsのHTTP GET、その後eval。
6.0 DシリーズTFTP / /tmp/sバリアントTFTP経由で同じs.js目標。依然としてオペレーターHTTPルート上のこのファイルを期待。

親ディレクトリの何も第3のCVEを実装していない。件数、SKUヒートマップ、トレイン整列(Family Aは7.4.0 / 7.4.1まで、Family Bは27997ウィンドウ内)はPhase 0とPhase 2にある。元のカタログで最も再ターゲットが多かったのは: FortiGate-60E、100E、60F、100F — ブランチオフィスハードウェア。


これが変えるもの

最初のドロップは「コールバックを取得する」で止まっていた。第2段階の本体が欠落していた。このツリーは目的を明確にする:

  1. 「一般的なRCE」ではなく、/data/config/*.gzからFortiOS設定を窃取する。それは資格情報とトポロジーの侵害である(VPNユーザー、ルート、それらのオブジェクトに保存されたシークレット)。
  2. IOCセットは具体的である(下記参照)。
  3. poc.pyの**VERSION_LIBS**は、「このハッシュはどのSKUだと思っていたか」の既製リストである。
  4. このキットは、接続されていないPoCの寄せ集めではなく、完全な設定窃取パイプラインである。

指標(このコピー)

ポータル偵察と第1段階URIはHunting the kitに文書化されている。公開ライトアップとこのツリーで既に指摘されている特徴的なもの:

  • ポータル偵察: GET /remote/loginと/sslvpn/js/login.js?q=
  • 第1段階URI: /aaaa/bbbb、/remote/error、/remote/info、enc=付き/remote/hostcheck_validate
  • ファイアウォールからのアウトバウンドHTTP GET /s.js
  • ファイアウォールから7777 / 8888 / 9999へのアウトバウンドTCP
  • このs.jsのコピー内の焼き込まれたC2 C2_HOST:9999(C2ホスト)
  • ATTACKER_HOSTポート7777 / 8888 / 9999上のオペレーターリスナー(攻撃者ホスト)
  • ターゲットはハードコードされない: **TARGET_HOST**は実行時に指定されるrhost

ファイアウォール(TARGET_HOST)からC2_HOST:9999への出口と、関連するウィンドウ中に/s.jsを配信した任意のATTACKER_HOSTへの出口をハントすること。


このキットが証明しないこと

イントロダクションより:

  • 新しい0-day。プリミティブは公開ライトアップのあるn-dayである。
  • FortiProxy、FortiManager、FortiAnalyzer、FortiWeb。ここにサンプルはない。
  • 回収されたマトリクスにないSKU(多くの70F / 90G / 120Gユニット、VM専用イメージ、6K / 7Kシャーシ)。コンパイル済みオフセットなし。
  • Fortinetの公開カットを超えるビルド。このフォルダではなく、ライブアドバイザリ(FG-IR-24-015、FG-IR-23-097)で確認すること。
  • 永続化。それは、これらのスクリプトではまだ明確な第3段階として実装されていないフォローオンに存在するだろう。

VMに対する公開PoCは別のアーティファクトである。このパックは、偵察に応答した人向けである。


シリーズ

  1. Phase 0 · イントロダクション — 発見、件数、重要性。
  2. Phase 1 · 2つの公開ドア — Family AとFamily Bをレシピではなく挙動として。
  3. Phase 2 · マトリクス — 53のSKU、トレイン、CPU。検索可能。
  4. Phase 3 · キットのハンティング — 特徴的なURI、パッチカット、ポータルが到達可能だった場合の対処法。

FortiGateを運用している場合: モデル、正確なFortiOS、SSL-VPNのオン/オフ、ポータルが信頼できないネットワークから到達可能だったかどうかを棚卸しすること。その後Phase 2を読むこと。それらのファイル名が最も目立っていたからといって、60シリーズのブランチボックスのみを棚卸ししないこと。


通知

これらのファイルは、独立したセキュリティ研究の過程で野外で回収された。私はこれらを作成していない。関連するCVEが公開開示されパッチ適用された後、発見されたままの状態で公開される。

研究・教育目的のみ。 このリポジトリをホストしている当事者と標的システムの所有者の両方から明示的な書面による許可を得ていない限り、いかなるホストに対してもこのマテリアルを実行、展開、または使用しないこと。

— @abraxas_null · abraxaslabs.tech · github.com/abraxas

ツールをダウンロード