الأربعاء، 9 يوليو، 2014

دورة الامن المعلوماتي الدرس السادس اكتشاف ثغرات SQLi-الجزء الأول



اعتقد أنكم قد تعرفتم و بشكل جيد جدا عن قواعد البيانات و عن لغة SQL،و أصبحتم مؤهلين للتعرف على ثغرات حقن قواعد البيانات،و لكن علينا أن نعرف ما الذي يقصد بحقن قواعد البيانات أوﻻ؟

لنأخذ مثاﻻ بسيطا عن رابط في موقع ينشر مقاﻻت مختلفة...
http://xxxxxxx.org/index.php?id=17
هل تلاحظون الرقم 17...لنفرض مثلا أنه عندما تكتب هذا الرابط في متصفحك سيعطيك مقاﻻ عن أمن المعلومات،و لكن هذا ما تراه أنت،لنلقي نظرة عن الكود الذي يعطينا هذا المقال 
SELECT * FROM articles WHERE id='17'
لنقم الآن بتشريح بسيط SELECT هي أمر في SQL يأمر قاعدة البيانات بجلب معطيات مخزنة فيها في حين النجمة فهي مرتبطة بالأمر السابق و تعني:كل البيانات،FROM معناها (من) article هو الجدول الذي يحوي البيانات في القاعدة WHERE هي أيضا أحد أوامر لغة SQL و معناها عندما يكون،id هو أحد الأعمدة في الجدول article و بالتالي معنى الجملة السابقة هو:"قم بجلب كل المعطيات من الجدول article عندما يكون الـ id يساوي 17"

الآن لو قمنا ببعض التلاعبات بالرابط السابق كأن نضيف علامة تنصيص في آخره فيكون الرابط كالتالي:
http://xxxxxxx.org/index.php?id=17'
هذا ما تراه أنت و لكنه في الجانب الآخر يظهر بهذا الشكل
SELECT * FROM articles WHERE id='17''
 لو قمنا بطلب الصفحة سيظهر لنا خطأ من الشكل التالي:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 1 Error no:xxxx
 لماذا ظهر هذا الخطأ يا ترى،من المفروض أن الأمر الصحيح هو الأمر الأول و لكن عندما أضفنا علامة التنصيص لم يفهم محرك قاعدة البيانات الأمر،ﻷنه يعرف بأنه بعد الأمر WHERE و الذي يعبر مثل الشروط في اللغات الأخرى،بأن الشرط يجب أن يكون بين علامتي تنصيص إما ' أو " و لكن العلامة الثالثة التي اضفنها أربكت المحرك و بالتالي أظهر لنا الخطأ.
من الممكن جدا أننا ﻻ نحصل على خطأ بإضافة علامة تنصيص،و بالتالي علينا أن ننتقل الى استخدام طرق اخرى،يمكن استخدام احدى العلامات التالية:

"
\
/*
'/*
"/*
'--
"--
';
";
--
إن لم يؤدي إضافة إحدى هته العلامات إلى ظهور خطأ فلننتقل إلى استخدام طريقة اخرى:

+order+by+9121
+or+1=2
+and+1=2 
فيما يخص علامة الإضافة (+) هي فقط ﻻستبدال المسافة،فلو تم إضافة أحد الأسطر السابقة باستبدال علامة + بمسافة سيتم تحويلها بشكل آلي إلى 20% و بالتالي ستصعب عملية القراءة.هل فهتم الأسطر السابقة أم ﻻ؟ﻻ بأس إذن،لو أضفنا السطر الأول إلى الرابط السابق سيصبح الرابط كالتالي:
 http://xxxxxxx.org/index.php?id=17+order+by+9121
هل فهمتم الآن لماذا تمت تسمية هذا النوع من الثغرات بثغرات حقن قواعد البيانات؟ببساطة ﻷننا قمت بعملية حقن ﻷكواد لغة SQL
 بشكل غير مرخص لقاعدة البيانات من اجل جلب معلومات ﻻ يحق لنا اﻹطلاع عليها،انتهى الجزء الأول من عملية اكتشاف ثغرات حقن قواعد البيانات

0 التعليقات:

إرسال تعليق

لا تنسى ان تشارك samir soltani بتعليقك
او نشر الموظوع جزاك الله خيرا