
ZoneMinder Time-Based SQL Injection (CVE-2024-51482) Exploit POC
يحتوي هذا المستودع على استغلال إثبات مفهوم (PoC) عالي الأداء ومتوازٍ (Exploit.py) لثغرة حقن SQL أعمى (Blind SQL Injection) موجودة في إصدارات ZoneMinder 1.37.* حتى 1.37.64.
وفقًا لـ GHSA-qm8h-3xvf-m7j3، تنشأ هذه الثغرة في web/ajax/event.php عند معالجة إجراء removetag. تتم قراءة المعامل tid (TagId) من الطلب ويتم دمجه بشكل غير آمن مباشرةً في عبارة SQL:
$tagId = $_REQUEST['tid'];
// ...
$sql = "SELECT * FROM Events_Tags WHERE TagId = $tagId";
$rowCount = dbNumRows($sql);
نظرًا لأن $tagId لا يُمرَّر عبر معاملات قبل إرساله إلى dbNumRows()، يمكن لمهاجم مصادق إدخال أوامر SQL عشوائية باستخدام تقنيات حقن SQL القائمة على القيم المنطقية (boolean-based) أو القائمة على الزمن (time-based) (يستخدم إثبات المفهوم المقدم هنا الدالة SLEEP()).
يسمح ذلك بتحكم كامل في قواعد بيانات SQL، مما يؤدي إلى فقدان سرية البيانات وسلامتها، وربما الحرمان من الخدمة (DoS) عبر أوامر إيقاف مؤقت (sleep) مستمرة.
اعتبارًا من الإصدار 1.37.65، أصبحت استعلامات SQL تُبنى باستخدام معاملات بشكل صحيح. تم إصلاح الجزء المعرض للثغرة لإنشاء استعلام آمن:
$sql = "SELECT * FROM Events_Tags WHERE TagId = ?";
$rowCount = dbNumRows($sql, $tagId);
يعمل سكربت FAST EXPLOIT بإصدار v2.0 على تسريع استخراج البيانات بشكل كبير يصل إلى 5 أضعاف باستخدام تعدد الخيوط (multi-threading)، وبحث محسّن لتردد الأحرف، ومعايرة ديناميكية للعتبة الزمنية لاستخراج بيانات اعتماد المستخدمين (Username:Password) من جدول قاعدة البيانات zm.Users بشكل عدواني.
Exploit.py v2.0 FAST EXPLOIT)zm.Users بالكامل بشكل تسلسلي.http://<target>/zm/index.phpview=request&request=event&action=removetagtidpython3 Exploit.py
عند التشغيل، يعمل السكربت في وضع تفاعلي ويطالب بالمعلومات التالية:
index.php (مثل http://zoneminder.local/zm/index.php).ZMSESSID صالحة تمثل جلسة نشطة.zm.Users بالكامل.يتم إنشاء ملف باسم extracted_data.txt تلقائيًا يحتوي على بيانات الاعتماد المفرّغة (بتنسيق Username:Password). يعرض السكربت أيضًا إحصائيات تنفيذ لحظية بما في ذلك إجمالي الوقت المنقضي وإجمالي عدد طلبات HTTP المرسلة.
إخلاء مسؤولية: يهدف هذا السكربت الاستغلالي إلى الأغراض التعليمية واختبار الاختراق المصرح به فقط. لا تستخدم هذه الأداة ضد أنظمة لا تملكها أو لا تملك إذنًا صريحًا لاختبارها.