حمله SQL injection یا تزریق به پایگاه داده چیست؟

حمله SQL injection یا تزریق به پایگاه داده چیست؟

0
(0)

** هشدار **

تمام آموزش های این سایت با مجوز کارشناس امنیت و طبق قوانین کشور ایران تهیه شده و هرگونه سوء استفاده و انتشار مطالب و ویدیوها کاملا غیر قانونی می باشد و در صورت سوء استفاده، NetPenT هیچ مسئولیتی نخواهد داشت. در صورت انتشار دوره های آموزشی خریداری شده، ردیابی و مشخص کردن هویت فرد منتشر کننده با توجه به داده های مخفی موجود در ویدیو ها به راحتی امکان پذیر می باشد و تبعات قانونی برای آن فرد وجود خواهد داشت.

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

تزریق SQL یا  تزریق به پایگاه داده، به حمله ای گفته می شود که از ارسال کدهای مخرب SQL به پایگاه داده به منظور دسترسی به اطلاعاتی که نمی دانند چیست و کجاست، استفاده می کند. این اطلاعات می تواند شامل هر چیزی مثل داده های حساس، لیست کاربران یا جزئیات مشتریان خصوصی باشد.

تزریق کد SQL می تواند پیامدهای گسترده ای بر کسب و کارها داشته باشد. یک حمله موفقیت آمیز ممکن است منجر به دسترسی غیر مجاز به داده های محرمانه و یا بخش مدیریت پایگاه داده شود که می تواند به کسب و کار خسارت جدی وارد کند. سرقت اطلاعات شخصی مثل شماره تلفن، آدرس و جزئیات کارت اعتباری، باعث از دست رفتن اعتماد مشتری می شود و به اعتبار شرکت صدمه خواهد زد. هرچند حمله SQL Injection را می توان برای هر پایگاه داده ای بکار برد، اما معمولا هدف این نوع حملات، وبسایت ها هستند.

کوئری SQL چیست؟

SQL یک زبان استاندارد است که برای دسترسی و دستکاری پایگاه داده به منظور ایجاد داده های قابل تنظیم برای هر کاربر استفاده می شود. کوئری (Query) به درخواستی که به سرور فرستاده شده و سرور در جواب، اطلاعاتی میدهد، گویند. کوئری SQL برای اجرای دستوراتی مثل بازیابی داده‌ها (Retrieve Data)، به روز رسانی ها و حذف رکوردها (Delete Records) استفاده می شود. با استفاده از دستورات SQL، اهداف گفته شده انجام خواهد شد. به عنوان مثال، با استفاده از دستور SELECT به منظور بازیابی داده ها، بر اساس پارامترهای ارائه شده توسط کاربر، به سرور کوئری زده میشود.

کوئری SQL یک فروشگاه الکترونیکی می تواند به صورت زیر باشد:

SELECT ItemName, ItemDescription
FROM Item
WHERE ItemNumber = ItemNumber 

سپس، وب اپلیکیشن یک رشته کوئری ایجاد می کند که به عنوان یک دستور SQL به پایگاه داده ارسال می شود:

sql_query= "
SELECT ItemName, ItemDescription
FROM Item
WHERE ItemNumber = " & Request.QueryString("ItemID") 

سپس یک ورودی ارائه شده توسط کاربر، http://www.estore.com/items/items.asp?itemid=999، می تواند کوئری SQL زیر را ایجاد کند:

SELECT ItemName, ItemDescription
FROM Item
WHERE ItemNumber = 999 

انواع SQL injection

حملات تزریق به پایگاه داده یا SQL injection معمولا به سه دسته تقسیم می شوند: In-band SQLi (روش کلاسیک)، Inferential SQLi  (روش کور)، Out-of-band SQLi. شما می توانید حمله SQL injection را بر اساس روش هایی که برای دسترسی به داده های بک اند (backend) یا سمت سرور (Server Side) و پتانسیل تخریب آن ها دسته بندی کنید.

SQLi درون باند  (In-band SQLi)

در این نوع حمله، مهاجم تنها از یک کانال ارتباطی برای راه اندازی حملات و همچنین جمع آوری نتایج استفاده می کند. سادگی و کارآمد بودن SQLi درون باند ، آن را به یکی از رایج ترین انواع حمله SQL injection تبدیل ساخته است. این روش به دو دسته دیگر تقسیم می شود:

  • حملات SQLi مبتنی بر خطا (Error-based SQLi): در این حمله، مهاجم اقداماتی انجام می دهد که باعث تولید پیغام خطا در پایگاه داده می شود. و سپس به کمک این پیغام ها، اطلاعات مورد نیاز درباره ساختار پایگاه داده را جمع آوری می کند.
  • حملات SQLi با دستور Union (Union-based SQLi): در این تکنیک با استفاده از اپراتور UNION SQL، چندین دستور تولید شده توسط پایگاه داده برای دریافت پاسخ HTTP ترکیب می شوند. این پاسخ می تواند حاوی داده هایی باشد که مهاجم بتواند از آن سوء استفاده کند.

SQLi استنتاجی (Inferential SQLi)

نام دیگر این حمله، SQLi کور (Blind SQLi Attack) می باشد. در این حمله، مهاجم payload ها را به سرور ارسال می کند و با مشاهده پاسخ و رفتار سرور، در مورد ساختار آن  اطلاعات بیشتری کسب می کند. این روش SQLi کور نامیده می شود. چرا که داده ها از پایگاه داده وبسایت به مهاجم منتقل نمی شوند. بنابراین مهاجم نمی تواند اطلاعات مربوط به حمله درون باند را ببیند.

حمله SQL Injection به روش کور به الگوهای رفتاری سرور متکی است. به همین دلیل معمولا اجرای این حمله کند تر پیش می رود. اما می تواند به همان اندازه خطرناک باشد. Blind Attack را می توان به صورت زیر طبقه بندی کرد:

  • Boolean (شرطی): در این حمله، مهاجم یک کوئری SQL به پایگاه داده می فرستد و از اپلیکیشن می خواهد که نتیجه را بازگرداند. با توجه به درست یا غلط بودن کوئری، نتیجه متفاوت خواهد بود. بر اساس نتیجه، اطلاعات داخل HTTP یا تغییر می کند و یا بدون تغییر باقی می ماند. سپس مهاجم می تواند به بررسی درستی یا نادرستی نتیجه بپردازد.
  • Time-based : در این حمله، مهاجم یک کوئری SQL به پایگاه داده می فرستد که باعث می شود پایگاه داده قبل از واکنش نشان دادن، مدتی (چند ثانیه) منتظر بماند. مهاجم می تواند از زمانی که پایگاه داده پاسخ می دهد، درست یا نادرستی کوئری را ببیند. بر اساس نتیجه، فورا یا پس از مدتی انتظار، یک پاسخ HTTP ایجاد می شود. بنابراین مهاجم می تواند بدون کمک از داده های پایگاه داده، درستی یا نادرستی پیام را تعیین کند.

SQLi خارج از باند  (Out-of-band SQLi)

مهاجم تنها زمانی می تواند این شکل از حمله تزریق کد مخرب SQL را انجام دهد که ویژگی های خاصی در سرور پایگاه داده فعال باشد. این نوع حمله در درجه اول به عنوان جایگزینی برای تکنیک های SQL injection استنتاجی و داخل باند استفاده می شود.

حملات Out-of-band SQLi زمانی انجام می شود که مهاجم نتواند از یک کانال برای راه اندازی حمله و جمع آوری اطلاعات استفاده کند. و یا زمانی که سرور خیلی کند یا ناپایدار است. این تکنیک ها روی ظرفیت سرور برای ایجاد درخواست های DNS  یا HTTP برای انتقال داده ها به مهاجم حساب می کنند.

این مقاله چقدر برای شما مفید بوده است؟

برای امتیازدهی روی ستاره ها کلیک کنید.

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

پیمایش به بالا