
إثبات مفهوم لثغرة XSS مخزنة في نظام حجز الفنادق والسياحة الإصدار 1.0، مع توضيح حقن غير مصادق عليه واختطاف جلسة المسؤول.
| الحقل | التفاصيل |
|---|
| العنوان | نظام حجز الفنادق والسياحة - تخزين البرمجة النصية عبر المواقع (XSS) |
| معرف CVE | قيد التعيين |
| البائع | code-projects.org |
| رابط البائع | https://code-projects.org/hotel-and-tourism-reservation-in-php-with-source-code/ |
| المنتج | نظام حجز الفنادق والسياحة |
| الإصدار | 1.0 |
| نوع الثغرة | تخزين البرمجة النصية عبر المواقع (Stored XSS) |
| CWE | CWE-79 |
| درجة CVSS | 8.3 (عالية) |
| متجه CVSS | CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:L/A:L |
| نقطة النهاية المتأثرة (الحقن) | /ht/tour.php |
| نقطة النهاية المتأثرة (التشغيل) | /ht/admin/tour_reserves.php |
| المصادقة المطلوبة | لا (الحقن) / نعم (التشغيل) |
| قابلية الاستغلال عن بُعد | نعم |
| الباحث | سيد عماد الدين علوي |
توجد ثغرة تخزين البرمجة النصية عبر المواقع (Stored XSS) في وظيفة حجز الجولات السياحية في نظام حجز الفنادق والسياحة 1.0. يمكن لمهاجم غير مصادق حقن JavaScript عشوائي في حقول نموذج الحجز في /ht/tour.php. يتم تخزين الحمولة الخبيثة في قاعدة البيانات دون تعقيم. عندما يزور المسؤول صفحة إدارة حجوزات الجولات السياحية في /ht/admin/tour_reserves.php، يتم تنفيذ الحمولة المخزنة في سياق متصفح المسؤول — مما يتيح اختطاف الجلسة، أو سرقة بيانات الاعتماد، أو الاستيلاء الكامل على حساب المسؤول.
الملف: tour.php (نقطة الحقن)
الملف: admin/tour_reserves.php (نقطة التنفيذ)
المعامل: name , email , people , number / حقول الاتصال (POST)
التخزين: hotel_db — جدول حجوزات الجولات السياحية
الإعداد: قم بتثبيت نظام حجز الفنادق والسياحة 1.0 على XAMPP وادخل عبر http://<target>/ht/
الخطوة 1 — انتقل إلى صفحة حجز الجولات السياحية كمستخدم غير مصادق:
http://<target>/ht/tour.php?tour=4
الخطوة 2 — أدخل حمولة XSS في حقل الاسم أو في أي حقل (جميعها معرضة لـ XSS)، ثم انقر على "احجز الآن":
<script>alert(1)</script>
النتيجة: "تم إنشاء الحجز بنجاح!" — يتم الآن تخزين الحمولة في قاعدة البيانات.

الخطوة 3 — سجّل الدخول كمسؤول وانتقل إلى لوحة حجوزات الجولات السياحية:
http://<target>/ht/admin/tour_reserves.php
النتيجة: يتم تنفيذ حمولة XSS المخزنة فورًا في سياق متصفح المسؤول.

يمكن لمهاجم غير مصادق:
يقوم نموذج الحجز في tour.php بتخزين إدخال المستخدم مباشرة في قاعدة البيانات دون تعقيم. تقوم لوحة الإدارة في tour_reserves.php بإخراج القيمة المخزنة بشكل خام في استجابة HTML دون ترميز المخرجات، مما يسمح بتنفيذ البرامج النصية المحقونة.
// عند الإخراج — قم دائمًا بالترميز قبل العرض
echo htmlspecialchars($reservation['name'], ENT_QUOTES, 'UTF-8');
عماد علوي — باحث أمني مستقل GitHub: Xmyronn