اکسپلویت کردن آسیب پذیری SQL Injection با UNION

در این مطلب به بررسی چگونگی اجرای Query ها توسط نفوذگران و روش Union Based میپردازیم.

در پایگاه های داده Stacked Query برای اجرای چندین دستور SQL پشت سر هم استفاده میشود. برای درک بهتر به Query زیر دقت کنید:

در Query بالا میبینید که پس از اجرا شدن دستور اول ، دستور دوم SQL نیز اجرا میشود.
نفوذگران نیز میتوانند از این ویژگی به منظور نفوذ به پایگاه داد و اجرای Query های جدید استفاده کنند.
زبان ها و پایگاه های داده ای که از این روش پشتیبانی میکنند:


Stack-Query

همانطور که مشاهده میکنید این روش در درون دیتابیس MySQL در زبان های PHP و ASP پشتیبانی نمیشود.

UNION Based SQL Injection

همانطوری که متوجه شدید ، ما در دیتابیس MySQL در ۲ زبان ASP و PHP نمیتوانید از Stacked Query استفاده کنیم.
پس با چه روش هایی میتوانیم به اطلاعات دست پیدا کنیم؟
یکی از روش هایی که با استفاده از آن میتوان به اطلاعات دست پیدا کردن روش Union Based است که در این روش اساس کار ما استفاده از Union است.

در واقع در MySQL از Union به منظور ۲ بار به کار بردن Select استفاده میشود. کاری که این دستور میکند این هست که نتیجه Select دوم را در انتهای Select اول اضافه میکند ، بنابراین تعداد ستون های Select شده در ۲ طرف Query باید یکسان باشد.
Query زیر را مشاهده کنید:

همینطور که مشاهده میکنید ، نتیجه دستور دوم در انتهای دستور اول اضافه میشود ، در صورتی که تعداد ستون های انتخاب شده در ۲ طرف برابر نباشد این اتفاق میافتد:

همانطور که مشاهده میکنید ، ما در سمت چپ Query پایگاه داده ۲ ستون داریم و در سمت Query پایگاه داده ۱ ستون ، این مشکل یکی از مشکلاتی هست که نفوذگران در هنگام نفوذ از طریق روش Union Based به آن بر میخورند. در واقع برای حل این مشکل باید تعداد ستون های انتخاب شده در سمت چپ Query را پیدا کنند.
به کاربرد دستور order by توجه کنید:

همانگونه که مشاهده میکنید کار این دستور مرتب سازی اطلاعات در داخل یک ستون میباشد ما برای مرتب سازی میتوانیم از نام ستون یا شماره ستون استفاده کنیم.
بنابر اینکه نفوذگران به نام ستون ها در این آسیب پذیری دسترسی ندارند از شماره آن استفاده میکنند.
حال فرض کنید ما اگر شماره ستونی را وارد کنیم که وجود ندارد چه اتفاقی میافتد؟!

همانطور که مشاهده میکنید ما از ارور میتوانیم متوجه شویم که مقدار ستون انتخاب شده در Query کمتر از ۲ هست پس حتما ۱ ستون می باشد.
از همین روش میتوانیم تعداد ستون ها به منظور استفاده در تزریق با استفاده از Union استفاده کنیم.

تا اینجای کار نحوه استفاده از Union و Order by را آموختیم. اما نفوذگران چگونه میتوانند اطلاعات را بیرون بکشند ؟! اصلا مبنای بیرون کشیدن اطلاعات یا اصطلاحات غلطی مانند “ستون آسیب پذیر” چیست؟

با هم دیگه یک برنامه ساده PHP آسیب پذیر را بررسی میکنیم:

در برنامه بالا ۳ مقدار انتخاب میشود و سپس فقط از مقدار username استفاده میشود. در واقع ما زمانی میتوانیم با روش UNION Based اطلاعات را بیرون بکشیم که یکی از ستون ها در خروجی چاپ شود در غیر این صورت باید از روش های دیگر استفاده کنیم. اگر دقت کنید ستونی که ما میتوانیم با استفاده از اون اطلاعات را بیرون بکشیم ستون دوم یا username است بنابراین اصطلاح غلطی که عام شده عبارت ستون آسیب پذیر است در صورتی که ستونی آسیب پذیر نیست !!

برای بدست آوردن اطلاعات بیشتر از این روش بهره برداری از آسیب پذیری تزریق پایگاه داده این ویدئو را مشاهده کنید.

ارسال نظر

ایمیل شما منتشر نخواهد شد. پر کردن ورودی ها الزامی است. *

*

نوزده + 14 =