أظن أنه لا يمكن تجاوز الداله Mysql_real_escape_string بالطريقة التى ذكرتهاحازم مفيد كتب:^^^اخي الا تظن انه يمكن تجاوز الداله Mysql_real_escape_string
عن طريق الامر التالي في خانة اليوزر : or 1=1
الباس : 44444444444444444444
..في امان الله
ما معنى SQL injection
الف شكر اخ X على هذا الموضوع المهم
لكن ماذا عن هذا الاستعلام
select password from admin where userName = '" & textBox1.text &"'
الكود بال VB
ثم نعمل مقارنة بين الباسورد الذي استعلمنا عنه وبين الباسورد المدخل في التكست بوكس الخاص بالباسورد؟
مع التحية
للأسف لا أعرف إن كانت ASP تتصرف بنفس الطريقة.
تستطيع أن تكتب مثال لنفسك تختبر فيه عملية تعديل الاستعلام أو أن تسأل في قسم ASP إن كنت مبتدئ على هذه الأمور.
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
Code Geek كتب:الف شكر اخ X على هذا الموضوع المهملكن ماذا عن هذا الاستعلام
select password from admin where userName = '" & textBox1.text &"'الكود بال VB
ثم نعمل مقارنة بين الباسورد الذي استعلمنا عنه وبين الباسورد المدخل في التكست بوكس الخاص بالباسورد؟
مع التحية
لو انه ادخل ahmed
ستكون الجمله
select password from admin where userName = 'ahmed'
ولكن ماذا لو أدخل
ahmed'; DROP TABLE admin; --
ستكون الجمله
select password from admin where userName = 'ahmed' ; DROP TABLE admin; --'
أو ادخل
ahmed'; UPDATE admin SET password = '123' WHERE userName = 'ahmed
ستكون الجمله
select password from admin where userName = 'ahmed' ; UPDATE admin SET password = '123' WHERE userName = 'ahmed'
بعد ذلك يدخل بأسم ahmed وكلمة مرور 123
أو ادخل
N'; INSERT INTO admin (userName, password) VALUES ('Nawaly_8764563', '123'); --ستكون الجمله
select password from admin where userName = 'N' ; INSERT INTO ad<span style='color:blue'>min(userName, password) VALUES ('Nawaly_8764563', '123'); --'هذا سينشئ حساب بأسم Nawaly_8764563 وكلمة مرور 123
تم تعديل هذه المشاركة بواسطة NawalyZuma في 1 مارس 2009 في 19:41
أشكر الجميع على مشاركاتكم التي أثرت الموضوع ... والتي تعلمت منها الكثير .. والموضوع يستاهل الرفع ...
وأتمنى التوسع في إحتمالات الإختراق ... وسبل الحماية منها
والله يجزاكم خير
اللهم صلي على محمد وعلى آل محمد كما صليت على إبراهيم وعلى آل إبراهيم إنك حميد مجيد
وبارك على محمد وعلى آل محمد كما باركت على إبراهيم وعلى آل إبراهيم إنك حميد مجيد
الموضوع قديم ولكن أحببت المشاركة بفكرة إضافية للحماية من الـ SQL Injection وهي تشفير اسم المستخدم وكلمة السر، مثال:
$username = base64_encode($_POST['username']); $password = md5($_POST['password']);
select * from admin where username = $username and password = $password;
مع العلم بأن البيانات مشفرة ضمن قاعدة البيانات
ويمكن أن تكون البيانات غير مشفرة ويتم الإستعلام كما يلي :
select * from admin where md5(username) = $username and md5(password) = $password;
فكرة جميله :)
أخي هنا يوجد نقطة مهمة يجب ان انبه اليها فأنا لاحظت خطأ قاتل !!!!
ويمكن الاخ xacker مانه منتبه ...
على كل حال بما ان هدف هذا الموضوع هو تأمين معلومات موثوقة للافراد والمبرمجين كان من ضروري لتدخل ..
اول شي :
اقتباسهل يمكن الإلتفاف عليها ؟ طبعا لايوجد إختلاف في الأداء فيما لو كان الإستعلام مجرد سطر واحد :
نعم يمكن الالتفاف عليها ..!!!
لاحظ اخي xacker لايهم المخرجات التي سوف يطبعها البرنامج دائما يوجد طريقة لتخطي هذه العوائق
مثلا لاحظ معي اخي ...
عادة يقوم المخترق بأضافة اكواد خبيثة على الاستعلام ويشاهد النتيجة وعلى حسب هذه النتيجة يشتغل ويكمل ويطالع المعلومات من القاعدة ..
بحالة البرنامج التي قمت بطرحه حيث يوجد مقارنة بين الباسوورد التي نتجت من الاستعلام مع الباسوورد التي ادخلها الهاكر ...طبعا لا يوجد تساوي الا في حالة ان الهكر انشأ حساب وبيعرف الباس ههه!!!
على كل حال واتفقنا على انه مابيعرف الباس ...يعني لن يطبع المخرجات ...وبتالي لن يشاهد الخطأ
ولكن في نقطة مهمة !!! او طريقة تم تطويرها من جديد
مثلا المخترق بالحالة السابقة قادر على اضافة الاكواد الخبيثة وسوف يتم تنفيذها من خلال المتغير $name ولكنه لن يشاهد المخرجات او رسائل الخطأ ...
ومعظم الاشخاص الغير فاهمين لفكرة الحقن رح يفكروا انو مافي ثغرة ويتركوا الموقع الخاص بك ..ويروحو ينامو ههههه
بس رح يجي شخص رح يقوم بتالي ...
رح يدخل كود خبيث مهمته هي تاخير وقتي اما من خلال دالة خاصة sleep او من خلال ادخال اوامر ثقيلة على سيرفر رح تاخذ وقت ليتم تنفيذها ...
هنا رح يعرف الهاكر انو قادر على الحقن ...
وهنا رح يبدأ بسحب المعلومات طبعا مو بطريقة العادية ولكن بطريقة اخرى تاخذ وقت وعلى الاغلب يقوم الهاكر ببرمجة سكريبت خفيف يسحب له البيانات
وهو يعتمد على تالي :
جملة شرطية تقارن بين اول حرف من اسم القاعدة مع الحرف 'A' فأذا كان هناك تساوي يتم تنفيذ كود تأخير مثل ماسبق وذكرنا واذا لم يكن هناك تساوي لا يوجد تأخير
طبعا اذا لم يتم تساوي ياخذ الحرف يلي بعده B وهيك لحتى يصير في تأخير وقتها بيكون عرف الحرف الاول وبياخذ الحرف الثاني وبيعيد العملية نفسها لحتى يسحب اسم القاعدة
بعدين ببلش باسماء الجداول وبنفس التقنية لحتى يوصل للبيانات يلي موجودة بالقاعدة
طبعا يدويا مستحيل يعملها !!! لانو غير قادر على تقدير التأخير الزمني ولكن بكتابة كام كود بسيطين ...رح يتمكن من سحب كل المعلومات ولا مين شاف ولا مين دري ... الا اذا حدا طلع باللوقو رح يشوف بقعة كبيرة !!! تثير الشبهات
واخيرا كان بدي اطرح مصادر بس للاسف ولله من مبارح ماني نايم ونعسان ماني قادر دور بملفاتي ..بلكي بكرة يمكن
واتمنى تكون وصلت الفكرة ...
يوجد مشكلة بالاقتباس بس اظن الفكرة وضحت
تم تعديل هذه المشاركة بواسطة Xacker في 23 ديسمبر 2012 في 14:19 — السبب: إزالة GCode المعطوب
Ninja-Sec.org

If You Can't Beat Them Keep Them Confused
نعم صحيح، لا تنسى أن الموضوع قديم والمعلومات تتجدد :)
بما أن الموضوع تم فتحه من جديد، فالطرق التي يتكلم عنها الأخ Laz0rd تسمى بـ Blind SQL Injection
على هذا الرابط تجدون تقنيات bsqli المستخدمة بكثرة حتى يومنا هذا:
http://websec.wordpress.com/2011/04/06/blind-sqli-techniques
بالإضافة إلى الطرق المعتمدة على التأخير الزمني بـ SLEEP أو تنفيذ عمليات طويلة مثل BENCHMARK(SHA1(.....))
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
السلام عليكم
أولا شكرا على الدرس عندي سؤال أنا حاليا أقوم ببرمجة موقع و حتى لا أقوم بتعقيد الأمور على نفسي في الحماية نويت إن شاء الله أن أقوم بتشفير كل معلومات المستخدم من كلمة مرور و إسم المستخدم و بريد .......إلخ و فك تشفيرها عند عرض من منطلق أن هذه الأمور لا تطلب إلا للتسجيل و الدخول فلا تستهلك الكثير من الموارد إضافة للإستعلامات عن الصفحات
مثلا آخذ post أو get أشفرها بكلمة سرية ثم أدخلها لقاعدة البينات أو أستعلم بها (فقط العناوين و ليس كل الصفحة) ثم أقوم بفك تشفير الناتج لو كان مشفر مثل البريد أو الإسم
أو أعرضه مباشرة مثل النص
سؤال هل سيكون ذالك كافيا للحماية أم هناك أمور أخرى عليا الأنتباه لها و هل سيضغط ذالك على السيرفر مع العلم أنا التشفير فقط لمعلومات المستخدم و عناوين الصفحات
موضوع رائع وتم إختراق أكثر من موقع من خلال الحقن بال sql
من أجل حماية تطبيقاتنا
مبرمج مصرى أبحث عن فرصة للسفر - Windows & Web Application
موبايل :201061837609+ الإيميل : Mohamed_Tegara@Yahoo.Com
www.mfouad.somee.com
تكمن الخطورة الحقيقة في ثغرات SQL INJECTION في الاستغلال المتقدم الذي يتعدى الدخول للنظام او الحسابات او لوحات التحكم , الاستغلال المتقدم يهدف الى زرع اوامر قابلة للتنفيذ داخل قيم الحقول , في حال تمت زراعتها فمن الممكن تنفيذها , سيشكل هذا تهديدا على النظام باكمله.
لدى من الامور البديهية ان تقوم بتأمين كل الاستعلامات.
وجدت احد المواقع يقوم بالغاء اي علامات مثل الهمزة او ( -- ) وغيرها في الصفحة ناحية العميل بواسطة سكريبت فيها .
ولكن ومع اني مبتدئ ولكن عندي خبرة بالبرمجة اتوقع ان تكون هذه الطريقة غبية ويمكن الاتفاف عليها وصنع صفحة شبيهة بها بدون هذا السكريبت وارسال البيانات الى الخادم بشكل جديد .
اليس كذلك ...؟
وايضا في الثقنيات الجديدة الان يتم استخدام البارمترات واسناد القيم لها وتم التنفيذ فتكون هذه الطريقة أكثر امنا ولا يتم اسناد القيم في جملة SQL بشكل مباشر .
تم تعديل هذه المشاركة بواسطة FastReport في 11 مايو 2014 في 20:13
