
هناك ثغرة حقن SQL في النهاية الخلفية لـ Ruoyi v4.8.3
filterKeyword تجاوز SQL Injectionمطلوب إذن / اختبار مرخص فقط
هذا المستودع مخصص فقط للبحث الأمني والاختبار المرخص. لا تستخدمه ضد أنظمة بدون إذن صريح.
يُستخدم هذا المستودع فقط للبحث الأمني والاختبارات التي حصلت على إذن صريح. لا تستخدمه على أنظمة غير مرخصة.
يسمح نقطة النهاية /tool/gen/createTable في وحدة توليد الكود لـ RuoYi v4.8.3 للمستخدمين الخلفيين بتقديم SQL لإنشاء الجداول. تستدعي النقطة الطرفية الدالة SqlUtil.filterKeyword() لتصفية الكلمات الرئيسية الخطرة من خلال قائمة سوداء. ولكن التنفيذ يقوم بإزالة جميع المسافات البيضاء من الإدخال قبل التحقق من عناصر القائمة السوداء التي تحتوي على مسافات زائدة، مثل select و insert و drop . وبالتالي لا يمكن لتلك العناصر مطابقة الإدخال المُطبيع.
يمكن لعبارة CREATE TABLE ... AS SELECT ... (CTAS) اجتياز فحص نوع MySqlCreateTableStatement الخاص بـ Druid مع تنفيذ SELECT. يمكن للمهاجم الذي لديه جلسة خلفية صالحة استخدام هذا السلوك لحقن SQL أعمى قائم على القيم البوليانية، واستخراج البيانات الحساسة، وإنشاء جداول.
JSESSIONID.يسترد البرنامج النصي تجزئة كلمة المرور وملح المستخدم admin من جدول sys_user باستخدام المنطق التالي:
login_name و password و salt.SUBSTRING()./tool/gen/list.requests، urllib3تثبيت التبعيات:
python -m pip install requests urllib3
افتح exp.py واستبدل السطرين التاليين في قسم التهيئة بالقرب من أعلى الملف:
TARGET = "http://127.0.0.1:8080"
COOKIE = "JSESSIONID=your_session_id"
حيث:
TARGET: هو عنوان URL الأساسي لـ RuoYi المراد اختباره، على سبيل المثال http://127.0.0.1:8080.COOKIE: هي جلسة JSESSIONID خلفية معتمدة صالحة.بعد استبدال عنوان URL والجلسة، قم بتشغيل:
python exp.py
ينشئ البرنامج النصي جدولًا وسيطًا والعديد من جداول الاختبار المنطقية في قاعدة البيانات الهدف. استخدمه فقط في بيئة معزولة أو مخوّلة صراحة، واطلب من مسؤول قاعدة البيانات إزالة الجداول المُنشأة بعد الاختبار.
exp.png تظهر تحققًا ناجحًا في بيئة محلية مرخصة:

filterKeyword()، لكن لا تعامله كإجراء أمني وحيد.نقطة النهاية /tool/gen/createTable في وحدة توليد الكود لـ RuoYi v4.8.3 تقبل SQL لإنشاء الجداول من المستخدمين الخلفيين المُوثقين. تستدعي النقطة الطرفية الدالة SqlUtil.filterKeyword() لحظر كلمات SQL الخطرة. ومع ذلك، فإن التنفيذ يزيل جميع المسافات البيضاء من الإدخال قبل التحقق من عناصر القائمة السوداء التي تحتوي على مسافات زائدة، مثل select و insert و drop . وبالتالي لا يمكن لتلك العناصر مطابقة الإدخال المُطبيع.
يمكن لعبارة CREATE TABLE ... AS SELECT ... (CTAS) اجتياز فحص نوع MySqlCreateTableStatement الخاص بـ Druid مع تنفيذ SELECT. يمكن للمهاجم الذي لديه جلسة خلفية صالحة استخدام هذا السلوك لحقن SQL أعمى قائم على القيم البوليانية، واستخراج البيانات الحساسة، وإنشاء جداول.
JSESSIONID.يسترد البرنامج النصي تجزئة كلمة المرور وملح المستخدم admin من جدول sys_user باستخدام المنطق التالي:
login_name و password و salt.SUBSTRING()./tool/gen/list.requests، urllib3تثبيت التبعيات:
python -m pip install requests urllib3
افتح exp.py واستبدل السطرين التاليين في قسم التهيئة بالقرب من أعلى الملف:
TARGET = "http://127.0.0.1:8080"
COOKIE = "JSESSIONID=your_session_id"
حيث:
TARGET هو عنوان URL الأساسي لـ RuoYi المراد اختباره، على سبيل المثال http://127.0.0.1:8080.COOKIE هي جلسة JSESSIONID خلفية معتمدة صالحة.بعد استبدال عنوان URL والجلسة، قم بتشغيل:
python exp.py
ينشئ البرنامج النصي جدولًا وسيطًا والعديد من جداول الاختبار المنطقية في قاعدة البيانات الهدف. استخدمه فقط في بيئة معزولة أو مخوّلة صراحة، واطلب من مسؤول قاعدة البيانات إزالة الجداول المُنشأة بعد الاختبار.
exp.png تظهر تحققًا ناجحًا في بيئة محلية مرخصة:

filterKeyword()، لكن لا تعامله كإجراء أمني وحيد.exp.py - برنامج التحقق / 验证脚本exp.png - لقطة شاشة للتحقق الناجح / 验证成功截图README.md - توثيق الثغرة باللغتين / 中英双语漏洞说明