
ZoneMinder Time-Based SQL Injection (CVE-2024-51482) Exploit POC
इस रिपॉजिटरी में ZoneMinder संस्करण 1.37.* से 1.37.64 में पाई गई एक ब्लाइंड SQL इंजेक्शन भेद्यता के लिए एक उच्च-प्रदर्शन, समानांतरकृत प्रूफ-ऑफ-कॉन्सेप्ट (PoC) एक्सप्लॉइट (Exploit.py) शामिल है।
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 कमांड इंजेक्ट कर सकता है (यहाँ प्रस्तुत PoC SLEEP() का लाभ उठाता है)।
यह SQL डेटाबेस पर पूर्ण नियंत्रण की अनुमति देता है, जिससे डेटा गोपनीयता और अखंडता का नुकसान होता है, और संभावित रूप से लगातार स्लीप कमांड के माध्यम से डिनायल ऑफ सर्विस (DoS) हो सकती है।
संस्करण 1.37.65 के अनुसार, SQL क्वेरी को ठीक से पैरामीटरीकृत कर दिया गया है। कमजोर ब्लॉक को एक सुरक्षित क्वेरी बनाने के लिए पैच किया गया था:
$sql = "SELECT * FROM Events_Tags WHERE TagId = ?";
$rowCount = dbNumRows($sql, $tagId);
v2.0 FAST EXPLOIT स्क्रिप्ट मल्टी-थ्रेडिंग, एक अनुकूलित कैरेक्टर फ्रीक्वेंसी खोज, और डायनामिक थ्रेशोल्ड कैलिब्रेशन का उपयोग करके डेटा निष्कर्षण को 5 गुना तक तेज करती है, ताकि zm.Users डेटाबेस तालिका से आक्रामक रूप से उपयोगकर्ता क्रेडेंशियल्स (Username:Password) निकाले जा सकें।
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 अनुरोधों की कुल संख्या सहित वास्तविक समय के निष्पादन आँकड़े भी प्रदर्शित करती है।
अस्वीकरण: यह एक्सप्लॉइट स्क्रिप्ट केवल शैक्षिक उद्देश्यों और अधिकृत पेनेट्रेशन टेस्टिंग के लिए है। इस टूल का उपयोग उन सिस्टमों के विरुद्ध न करें जिनके स्वामी आप नहीं हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट अनुमति नहीं है।