الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ما معنى SQL injection

رائج
بدأه Xacker في 14 أكتوبر 2008 · 37 رد · 24,548 مشاهدة · في قسم أمن المعلومات العام
مشاركة: واتساب X فيسبوك تيليجرام
#26
حازم مفيد كتب:
^^^

اخي الا تظن انه يمكن تجاوز الداله Mysql_real_escape_string

عن طريق الامر التالي في خانة اليوزر : or 1=1

الباس : 44444444444444444444

..في امان الله

أظن أنه لا يمكن تجاوز الداله Mysql_real_escape_string بالطريقة التى ذكرتها
#27

الف شكر اخ X على هذا الموضوع المهم

لكن ماذا عن هذا الاستعلام

select password from admin where userName = '" & textBox1.text &"'

الكود بال VB

ثم نعمل مقارنة بين الباسورد الذي استعلمنا عنه وبين الباسورد المدخل في التكست بوكس الخاص بالباسورد؟

مع التحية

#28

للأسف لا أعرف إن كانت ASP تتصرف بنفس الطريقة.

تستطيع أن تكتب مثال لنفسك تختبر فيه عملية تعديل الاستعلام أو أن تسأل في قسم ASP إن كنت مبتدئ على هذه الأمور.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#29
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

1
#30

أشكر الجميع على مشاركاتكم التي أثرت الموضوع ... والتي تعلمت منها الكثير .. والموضوع يستاهل الرفع ...

وأتمنى التوسع في إحتمالات الإختراق ... وسبل الحماية منها

والله يجزاكم خير

اللهم صلي على محمد وعلى آل محمد كما صليت على إبراهيم وعلى آل إبراهيم إنك حميد مجيد

وبارك على محمد وعلى آل محمد كما باركت على إبراهيم وعلى آل إبراهيم إنك حميد مجيد

#31

الموضوع قديم ولكن أحببت المشاركة بفكرة إضافية للحماية من الـ SQL Injection وهي تشفير اسم المستخدم وكلمة السر، مثال:

$username = base64_encode($_POST['username']);
$password = md5($_POST['password']);

select * from admin where username = $username and password = $password;

مع العلم بأن البيانات مشفرة ضمن قاعدة البيانات

#32

ويمكن أن تكون البيانات غير مشفرة ويتم الإستعلام كما يلي :

select * from admin where md5(username) = $username and md5(password) = $password;

فكرة جميله :)

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#33

أخي هنا يوجد نقطة مهمة يجب ان انبه اليها فأنا لاحظت خطأ قاتل !!!!

ويمكن الاخ xacker مانه منتبه ...

على كل حال بما ان هدف هذا الموضوع هو تأمين معلومات موثوقة للافراد والمبرمجين كان من ضروري لتدخل ..

اول شي :

اقتباس
هل يمكن الإلتفاف عليها ؟ طبعا لايوجد إختلاف في الأداء فيما لو كان الإستعلام مجرد سطر واحد :

نعم يمكن الالتفاف عليها ..!!!

لاحظ اخي xacker لايهم المخرجات التي سوف يطبعها البرنامج دائما يوجد طريقة لتخطي هذه العوائق

مثلا لاحظ معي اخي ...

عادة يقوم المخترق بأضافة اكواد خبيثة على الاستعلام ويشاهد النتيجة وعلى حسب هذه النتيجة يشتغل ويكمل ويطالع المعلومات من القاعدة ..

بحالة البرنامج التي قمت بطرحه حيث يوجد مقارنة بين الباسوورد التي نتجت من الاستعلام مع الباسوورد التي ادخلها الهاكر ...طبعا لا يوجد تساوي الا في حالة ان الهكر انشأ حساب وبيعرف الباس ههه!!!

على كل حال واتفقنا على انه مابيعرف الباس ...يعني لن يطبع المخرجات ...وبتالي لن يشاهد الخطأ

ولكن في نقطة مهمة !!! او طريقة تم تطويرها من جديد

مثلا المخترق بالحالة السابقة قادر على اضافة الاكواد الخبيثة وسوف يتم تنفيذها من خلال المتغير $name ولكنه لن يشاهد المخرجات او رسائل الخطأ ...

ومعظم الاشخاص الغير فاهمين لفكرة الحقن رح يفكروا انو مافي ثغرة ويتركوا الموقع الخاص بك ..ويروحو ينامو ههههه

بس رح يجي شخص رح يقوم بتالي ...

رح يدخل كود خبيث مهمته هي تاخير وقتي اما من خلال دالة خاصة sleep او من خلال ادخال اوامر ثقيلة على سيرفر رح تاخذ وقت ليتم تنفيذها ...

هنا رح يعرف الهاكر انو قادر على الحقن ...

وهنا رح يبدأ بسحب المعلومات طبعا مو بطريقة العادية ولكن بطريقة اخرى تاخذ وقت وعلى الاغلب يقوم الهاكر ببرمجة سكريبت خفيف يسحب له البيانات

وهو يعتمد على تالي :

جملة شرطية تقارن بين اول حرف من اسم القاعدة مع الحرف 'A' فأذا كان هناك تساوي يتم تنفيذ كود تأخير مثل ماسبق وذكرنا واذا لم يكن هناك تساوي لا يوجد تأخير

طبعا اذا لم يتم تساوي ياخذ الحرف يلي بعده B وهيك لحتى يصير في تأخير وقتها بيكون عرف الحرف الاول وبياخذ الحرف الثاني وبيعيد العملية نفسها لحتى يسحب اسم القاعدة

بعدين ببلش باسماء الجداول وبنفس التقنية لحتى يوصل للبيانات يلي موجودة بالقاعدة

طبعا يدويا مستحيل يعملها !!! لانو غير قادر على تقدير التأخير الزمني ولكن بكتابة كام كود بسيطين ...رح يتمكن من سحب كل المعلومات ولا مين شاف ولا مين دري ... الا اذا حدا طلع باللوقو رح يشوف بقعة كبيرة !!! تثير الشبهات

واخيرا كان بدي اطرح مصادر بس للاسف ولله من مبارح ماني نايم ونعسان ماني قادر دور بملفاتي ..بلكي بكرة يمكن

واتمنى تكون وصلت الفكرة ...

يوجد مشكلة بالاقتباس بس اظن الفكرة وضحت

تم تعديل هذه المشاركة بواسطة Xacker في 23 ديسمبر 2012 في 14:19 — السبب: إزالة GCode المعطوب

Ninja-Sec.org

logo.png

If You Can't Beat Them Keep Them Confused

#34

نعم صحيح، لا تنسى أن الموضوع قديم والمعلومات تتجدد :)

بما أن الموضوع تم فتحه من جديد، فالطرق التي يتكلم عنها الأخ 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

#35

السلام عليكم 

أولا شكرا على الدرس عندي سؤال أنا حاليا أقوم ببرمجة موقع  و حتى لا أقوم بتعقيد الأمور على نفسي في الحماية  نويت إن شاء الله أن  أقوم بتشفير كل معلومات المستخدم  من كلمة مرور و إسم المستخدم و بريد .......إلخ  و فك تشفيرها عند عرض من منطلق أن هذه الأمور لا تطلب إلا للتسجيل و الدخول فلا تستهلك الكثير من الموارد إضافة للإستعلامات عن الصفحات  

مثلا آخذ post  أو get أشفرها بكلمة سرية ثم أدخلها لقاعدة البينات أو أستعلم بها (فقط العناوين و ليس كل الصفحة) ثم أقوم بفك تشفير الناتج لو كان مشفر مثل البريد أو الإسم

أو أعرضه مباشرة مثل النص 

سؤال هل سيكون ذالك كافيا للحماية أم هناك أمور أخرى عليا الأنتباه لها و هل سيضغط ذالك على السيرفر مع العلم أنا التشفير فقط لمعلومات المستخدم و عناوين الصفحات

#36

موضوع رائع وتم إختراق أكثر من موقع من خلال الحقن  بال sql

من أجل حماية تطبيقاتنا

مبرمج مصرى أبحث عن فرصة للسفر - Windows & Web Application

موبايل :201061837609+ الإيميل : Mohamed_Tegara@Yahoo.Com

www.mfouad.somee.com

#37

تكمن الخطورة الحقيقة في ثغرات SQL INJECTION في الاستغلال المتقدم الذي يتعدى الدخول للنظام او الحسابات او لوحات التحكم , الاستغلال المتقدم يهدف الى زرع اوامر قابلة للتنفيذ داخل قيم الحقول , في حال تمت زراعتها فمن الممكن تنفيذها , سيشكل هذا تهديدا على النظام باكمله.

لدى من الامور البديهية ان تقوم بتأمين كل الاستعلامات.

=============
الطموح و الحافز سر النجاح

=============

AflamHQ.com | Palphp.com

#38

وجدت احد المواقع يقوم بالغاء اي علامات مثل الهمزة او ( -- ) وغيرها في الصفحة ناحية العميل بواسطة سكريبت فيها .

ولكن ومع اني مبتدئ ولكن عندي خبرة بالبرمجة اتوقع ان تكون هذه الطريقة غبية ويمكن الاتفاف عليها وصنع صفحة شبيهة بها بدون هذا السكريبت وارسال البيانات الى الخادم بشكل جديد .

اليس كذلك ...؟

 

وايضا في الثقنيات الجديدة الان يتم استخدام البارمترات واسناد القيم لها وتم التنفيذ فتكون هذه الطريقة أكثر امنا ولا يتم اسناد القيم في جملة SQL بشكل مباشر .

تم تعديل هذه المشاركة بواسطة FastReport في 11 مايو 2014 في 20:13

مواضيع مشابهة