إدخال (حقن) تعليمات SQL في قاعدة بيانات موقع ما من خلال ضعف أمني في برمجة الموقع بأخذ معلومات أو قيم مرتجعة من قبل المستخدم من الصفحة بدون فحصها بحثاً عن الرموز الممنوعة والتي قد تسبب خللاً في الجمل الخاصة بـ SQL عندما يتم إدخال هذه القيم في الحقول المخصصة في قاعدة البيانات.
SQL injection يمكن أن يحدث في أي مكان يقوم باسترجاع بيانات من المستخدم، أو يعتمد على قيم معينة يعتبرها المبرمج ثابتة في الصفحة، بينما في حقيقة الأمر يكون المهاجم قد قام بتبديلها بقيم أخرى معتمداً على أن المبرمج قام بإغفال هذه النقطة من خلال حفظ الصفحة لديه وإعادة تشكيلها مرة أخرى reconstruct بقيم مختلفة عما وضعه المبرمج، مثال: استخدام قائمة drop down لعرض مجموعة من الألوان والطلب من المستخدم اختيار لونه المفضل، يمكن للمهاجم حفظ الصفحة وإعادة كتابة شئ مختلف بدلاً من القيم بنفس الـ id المحدد للعنصر.
SQL injection يتنوع بين السهل الاستغلال وبين المعقّد الاستغلال.
يمكن إعطاء المثال البسيط التالي: جملة SQL في صفحة login.php تقوم باختيار عضوية من جدول بناء على وجود اسم مستخدم في هذا الجدول وتطابق كلمة المرور مع الحقل المناسب
عند النقر على زر Submit فإن النموذج يقوم بإرسال قيم الحقول name و pass إلى الصفحة login.php التي تحوي على جملة SQL السابقة.
لو قام المهاجم بإدخال النص التالي كاسم مستخدم (نفرض وجوده في الجدول): كود admin
وقام بإدخال كلمة مرور بالشكل: كود ' or 1=1;--
فما يحصل هو أن القيم أعلاه سيتم إضافتها ضمن جملة SQL كقيم متغيرات لتصبح الجملة أثناء التنفيذ بالشكل التالي:
SELECT id FROM users WHERE name='admin' AND pass='' OR 1=1;--';
لاحظ كيف أنه يتم نفي احتمال كون كلمة السر فارغة من خلال استخدام الشرط المنطقي OR وتبديله بعبارة محققة دوماً، 1=1 من ثم إدخال ; والتي تعني نهاية الجملة الشرطية من ثم -- التي تعني اعتبار كل ما يليها كتعليق لا يتم أخذه بعين الاعتبار أثناء التنفيذ (لتجنب الأخطاء التي قد تظهر في جملة SQL معقدة أكثر)
في مثل هذا الاستغلال فإن المهاجم قام بالحصول على صلاحيات الحساب admin وبدون إدخال أي كلمة مرور.
يمكن استغلال SQL injection للحصول على صلاحيات، لسرقة جداول كاملة قد تحوي على بيانات شخصية أو بيانات هامة وسرّية (بطاقات الائتمان في موقع تجاري) والعديد من الأمور الأخرى.
بما أن جمل SQL لا تظهر للمهاجم وتختلف من موقع لآخر فيكون هناك عمل ينتظر المهاجم في كتابة استغلالات أكثر تعقيداً من المثال أعلاه للحصول على صلاحيات أو بيانات ما من جدول معين، فمجرد عدم الحصول على اسم الجدول يمنعه من الحصول على المعلومات الموجوده بداخله لذلك يلجئ المهاجم إلى إدخال استغلالات خاطئة عند التنفيذ تحدث خطأ معالجة تجعل السيرفر يقوم بتلفّظ معلومات لمحاولة توضيح الخطأ وسبب حصوله، غالباً ما تحوي هذه الأخطاء على معلومات مهمة للمهاجم كأن يظهر الخطأ التالي:
كود Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC SQL Server Driver][SQL Server]Column 'users.id' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause. /process_login.asp, line 35
في استغلال خاطئ ( ' having 1=1-- ) يمكن المهاجم من معرفة الجدول والـ column الذي يعمل فيه ومعلومات أخرى أيضاً مثل GROUP BY التي قد تساهم في توسعة دائرة المعرفة الخاصة به!
blind SQL injection هو أحد الأنواع عندما يقوم مدير الموقع بتعطيل إظهار معلومات نتيجة استعلامات خاطئة، فلا يظهر شئ للمهاجم، حينها يكون عليه أن يقوم بعمل أكثر وربما يكون من المستحيل بالنسبة له الحصول على نتيجة عندما تفشل محاولاته جميعها في إعطائه ما يريد.
Tiger مشرف
عدد الرسائل : 1619 العمر : 35 تاريخ التسجيل : 22/02/2008
موضوع: رد: ما معنى SQL injection الجمعة فبراير 13, 2009 7:44 am
ههههههههههه
golden flower مشرفة
عدد الرسائل : 2517 العمر : 35 تاريخ التسجيل : 28/04/2008
موضوع: رد: ما معنى SQL injection الجمعة فبراير 13, 2009 7:50 am
موضوع جميل جدا
بس انت بتضحك ليه يا تايجر
golden flower مشرفة
عدد الرسائل : 2517 العمر : 35 تاريخ التسجيل : 28/04/2008
موضوع: رد: ما معنى SQL injection الجمعة فبراير 13, 2009 7:55 am
انا فهمت
Tiger مشرف
عدد الرسائل : 1619 العمر : 35 تاريخ التسجيل : 22/02/2008
موضوع: رد: ما معنى SQL injection الجمعة فبراير 13, 2009 7:58 am
لان المنتدى فية ثغرة لو قربت الدرس هتلاحظى ان فية اتنين input box وكمان login دى اصلا كانت اكواد ولما عملت ارسل مسهمة الاكواد الترجمة يعنى زى ال SQl injection يعنى قدرت ازرع كود هوتميل ويترجم كانة كود ودى تتعتبر صغرة لان المفروض الكلام بياخدة يمررة على دالة تقوم بتحويل الكلام الى نص يبقى حتى لو فية كود المفروض يطلع زى ما هو
Tiger مشرف
عدد الرسائل : 1619 العمر : 35 تاريخ التسجيل : 22/02/2008
موضوع: رد: ما معنى SQL injection الجمعة فبراير 13, 2009 8:00 am
ودا الدرس التانى اللى هينزل تحت عنوان ما معنى Cross-site scripting لان اللى حصل دا يعتبر Cross-site scripting
golden flower مشرفة
عدد الرسائل : 2517 العمر : 35 تاريخ التسجيل : 28/04/2008
موضوع: رد: ما معنى SQL injection الجمعة فبراير 13, 2009 8:01 am
شكرا على التوضيح
نور مشرفه عامه
عدد الرسائل : 5392 العمر : 36 تاريخ التسجيل : 26/10/2007
موضوع: رد: ما معنى SQL injection الجمعة فبراير 13, 2009 8:47 am
اوبااااااااااااااااااااااا
معقول الكلام دا دا يبقى فعلا حاجة جامدة خالص
lolla. عضو ملكي
عدد الرسائل : 1129 العمر : 34 تاريخ التسجيل : 30/08/2008
موضوع: رد: ما معنى SQL injection الجمعة فبراير 13, 2009 8:55 pm
انا مش فاهمه اى حاجه خالص
Tiger مشرف
عدد الرسائل : 1619 العمر : 35 تاريخ التسجيل : 22/02/2008
موضوع: رد: ما معنى SQL injection الجمعة فبراير 13, 2009 9:12 pm
ههههههههههه ولا يهمك يا لولا البلد زى الفل متخديش فى بالك انتى دول ناس فاضية