بررسی آسیب پذیری SQL Injection

احتمالا تاکنون اسم آسیب پذیری SQL Injection به گوشتون خورده ، در حال حاضر این آسیب پذیری یکی از معمول ترین آسیب پذیری هایی هست که در درون یک برنامه تحت وب رخ میدهد و نفوذگران از طریق آن میتوانند به اطلاعات مورد نظرشون دسترسی پیدا کنند.

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

آسیب پذیری SQL Injection یا “تزریق به پایگاه داده” نوعی آسیب پذیری میباشد که نفوذگر با استفاده از عدم input-validation برنامه اقدام به تغییر Query و  در نهایت به دست آوردن اطلاعات میکند.

به علت متفاوت بودن Query ها ،دیتابیس ها ، برنامه های امنیتی ، فیلترینگ ها و … روش بهره برداری “Exploitation” میتواند متفاوت باشد.

به صورت کلی در عمل “White Box Testing” به علت مشخص بودن برنامه و فعالیت های آن نفوذ با روش دستی آسان بوده اما در سایت هایی که از برنامه های اختصاصی استفاده میکنند تا حدودی حدس زدن نوع Query و محدودیت ها برای افراد تازه کار دشوار و بنابر تجربه میتوان پیش رفت.

به طور کلی بنابر دخیل بودن Query دیتابیس در درون برنامه روش های متعددی برای استفاده و نفوذ وجود دارند و این روش ها در دیتابیس های مختلف میتوانند متفاوت باشند .

معمولا ما در دیتابیس ها یک Query کلی داریم که به این شکل هست :

در Query بالا زمانی که مقدار یک ستون “Value” برابر با مقدار یکی از سطر های column1 باشد ، ستون های انتخاب شده ، نتیجه قابل مشاهده هست ، در غیر این صورت نتیجه ای باز نمیگردد.

توجه داشته باشید که مقدار های استفاده شده در درون Query ها فرضی میباشند و در صورت اجرای این Query ها ممکن است با خطا مواجه شوید.

معمولا در برنامه های تحت وب کاربر به قسمت [value] در Query بالا دسترسی دارد و در صورت عدم اعتبارسنجی ورودی کاربر قادر به تغییر Query و به دست آوردن اطلاعات پایگاه داده  میباشد.

اما کاربر چگونه میتواند Query جدیدی را بنویسد؟

بر میگردیم به برنامه نویسی ، احتمالا تاکنون مفهوم Comment به گوشتون خورده است. در واقع Comment گذاری به عملی گفته میشود که خطی یا خطوطی را در برنامه بی اثر کنیم. معمولا از Comment گذاری برای توضیح دادن اقسام کد برای ویرایش و عیب یابی استفاده میشود.

حال ، این Comment گذاری به ما کمک میکند که بتوانیم ادامه Query را بی اثر کنیم !  معمولا برای Comment کردن عبارت ها از عبارت — یا # استفاده میشود. علاوه بر این نوع از Comment ها ، نوع دیگری از Comment  ها تحت عنوان Comment های درون خطی “inline-comments” نیز وجود دارد که معمولا از این نوع از Comment  ها برای مبهم کردن کد و بایپس blacklist ها و برنامه های امنیتی استفاده میشود.

نمونه ای از استفاده از این ۲ نوع Comment را در زیر میتوانید مشاهده کنید:

Line Comment:

In-line Comment:

Inline-comment هایی نیز وجود دارند که مخصوص MySQL هستند و کدی که در درون آن قرار بگیرد اجرا میشود. از این نوع Comment ها میتوان برای کارهایی مثل پیدا کردن ورژن و … استفاده کرد.

اگر دقت کرده باشید ما در Comment آخر یک دستور پایگاه داده که به منظور مرتب سازی از آن استفاده میشود را به کار بردیم ! پس در واقع ما میتونیم در فضایی که ایجاد کرده ایم دستورات پایگاه داده را نیز تزریق کنیم و اطلاعاتی را که نیاز داریم بیرون بکشیم !

البته استفاده ای که برنامه از Query میکند برای ما بسیار مهم است و میتواند نحوه تزریق کد ما را تغییر دهید.

 

 

ارسال نظر

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

*

چهار × چهار =