معرفی SQL Injection
SQLi) SQL Injection) نوعی حمله تزریقی است که اجرای دستورات مخرب SQL را ممکن می سازد. این دستورها سرور پایگاه داده را در پشت یک برنامه وب کنترل می کنند. مهاجمان می توانند از آسیب پذیری های SQL Injection برای دور زدن اقدامات امنیتی برنامه استفاده کنند. آنها می توانند به تأیید اعتبار و مجوز یک صفحه وب یا برنامه وب بپردازند و محتوای کل پایگاه داده SQL را بازیابی کنند. آنها همچنین می توانند از SQL Injection برای افزودن، تغییر و حذف سوابق در پایگاه داده استفاده کنند.آسیب پذیری SQL Injection ممکن است روی هر وب سایت یا برنامه وب که از یک پایگاه داده SQL مانند MySQL، Oracle، SQL Serverیا سایر موارد استفاده می کند، تأثیر بگذارد. مجرمان ممکن است از آن برای دستیابی غیرمجاز به داده های حساس شما مانند: اطلاعات مربوط به مشتری، داده های شخصی، اسرار تجاری، مالکیت معنوی و موارد دیگر استفاده کنند. حملات SQL Injection یکی از قدیمی ترین، رایج ترین و خطرناک ترین آسیب پذیری برنامه های وب است. سازمان OWASP (پروژه امنیت نرم افزاری تحت وب) SQL Injection را در بین فهرست تزریقات موجود در سند خود را به عنوان تهدید شماره یک برای امنیت برنامه های تحت وب ذکر کرده است.

چگونه و چرا یک حمله SQL Injection انجام می شود
- برای انجام حمله SQL Injection، یک مهاجم ابتدا باید ورودی های کاربر آسیب پذیر را در صفحه وب یا برنامه تحت وب پیدا کند. یک صفحه وب یا یک برنامه تحت وب که دارای آسیب پذیری SQL Injection است، از چنین ورودی کاربر به طور مستقیم در یک کوئری SQL استفاده می کند. مهاجم می تواند محتوای ورودی ایجاد کند. چنین محتوائی غالبا به عنوان بار مخرب نامیده می شود و بخش اصلی حمله است. بعد از اینکه مهاجم این محتوا را ارسال کرد، دستورات مخرب SQL در پایگاه داده اجرا می شوند.
- SQL یک زبان کوئری است که برای مدیریت داده های ذخیره شده در پایگاه های داده طراحی شده است. می توانید از آن برای دسترسی، تغییر و حذف داده ها استفاده کنید. بسیاری از برنامه های وب و وب سایت ها، همه داده ها را در پایگاه های داده SQL ذخیره می کنند. در برخی موارد، شما همچنین می توانید از دستورات SQL برای اجرای فرامین سیستم عامل استفاده کنید. بنابراین، یک حمله موفق SQL Injection می تواند عواقب بسیار جدی در بر داشته باشد.
- مهاجمان می توانند از SQL Injections برای یافتن اعتبار سایر کاربران در پایگاه داده استفاده کنند. آنها می توانند هویت این کاربران را جعل کنند. کاربر جعل شده ممکن است یک مدیر پایگاه داده با تمام امتیازات پایگاه داده باشد.
- SQL به شما امکان می دهد داده ها را از پایگاه داده انتخاب و خارج کنید. آسیب پذیری SQL Injection می تواند به مهاجم اجازه دهد دسترسی کامل به کلیه داده های یک سرور پایگاه داده را بدهد.
- SQL همچنین به شما امکان می دهد داده ها را در یک پایگاه داده تغییر داده و داده های جدید اضافه کنید. به عنوان مثال ، در یک برنامه مالی، یک مهاجم می تواند از SQL Injection برای تغییر دادن مانده ها، معاملات باطل یا انتقال پول به حساب خود استفاده کند.
- شما می توانید SQL را برای حذف سوابق از یک پایگاه داده، حتی جداول جدول استفاده کنید. حتی اگر مدیر پشتیبان تهیه پایگاه داده باشد، حذف داده ها می تواند در دسترس بودن برنامه تا زمان بازگرداندن بانک اطلاعات تأثیر بگذارد. همچنین، پشتیبان گیری ممکن است جدیدترین داده ها را پوشش ندهد.
- در برخی از سرورهای پایگاه داده، شما می توانید با استفاده از سرور پایگاه داده به سیستم عامل دسترسی پیدا کنید. این ممکن است عمدی یا تصادفی باشد. در چنین حالتی، یک مهاجم می تواند از SQL Injection به عنوان بردار اولیه استفاده کند و سپس به شبکه داخلی پشت فایروال حمله کند.
انواع حملات SQL Injection
SQL Injectionبه طور معمول در سه دسته قرار می گیرند: SQLi درون باند (کلاسیک)، SQLi استنباطی (کور) و SQLi خارج از باند. شما می توانید انواع SQL Injection را بر اساس روش هایی که از آن ها برای دسترسی به داده های پس زمینه و پتانسیل آسیب دیدن استفاده می شود، طبقه بندی کنید.SQLi درون باند
مهاجم از همان کانال های ارتباطی برای شروع حملات خود و جمع آوری نتایج خود استفاده می کند. سادگی و کارایی SQLi درون باند، آن را به یکی از متداول ترین انواع حمله SQLi تبدیل می کند. دو روش فرعی وجود دارد:- SQLi - Error-based SQLi مبتنی بر خطا - مهاجم اقداماتی را انجام می دهد که باعث می شود پایگاه داده پیام خطایی ایجاد کند. مهاجم به طور بالقوه می تواند از داده های تهیه شده توسط این پیام های خطا برای جمع آوری اطلاعات در مورد ساختار بانک اطلاعاتی استفاده کند.
- SQLi - Union-based SQLi مبتنی بر اتحادیه این تکنیک از اپراتور UNION SQL استفاده می کند، که چندین عبارت انتخابی ایجاد شده توسط پایگاه داده را برای رسیدن به یک پاسخ HTTP یکپارچه می کند. این پاسخ ممکن است حاوی داده هایی باشد که توسط مهاجم قابل استفاده است.
SQLi استنباطی (کور)
مهاجم بارهای داده را به سرور ارسال می کند و پاسخ و رفتار سرور را مشاهده می کند تا درباره ساختار آن اطلاعات بیشتری کسب کند. این روش SQLi کور نامیده می شود، زیرا داده ها از پایگاه داده وب سایت به مهاجم منتقل نمی شوند، بنابراین مهاجم نمی تواند اطلاعاتی را در مورد حمله به صورت باند مشاهده کند. SQL Injectionکور به الگوهای پاسخ و رفتارهای سرور متکی است، بنابراین معمولاً برای اجرای آنها کندتر هستند اما ممکن است به همان اندازه مضر باشند. تزریق های کور SQL را می توان به شرح زیر طبقه بندی کرد:- Boolean — مهاجم یک کوئری SQL را به پایگاه داده ارسال می کند و باعث می شود برنامه به نتیجه ای برگردد. نتیجه بسته به صحت یا نادرست بودن کوئری متفاوت خواهد بود. براساس نتیجه، اطلاعات موجود در پاسخ HTTP اصلاح شده یا بدون تغییر خواهند ماند. اگر پیام نتیجه واقعی یا غلط ایجاد کند، مهاجم می تواند نتیجه بگیرد.
- Time-based— مهاجم، یک کوئری SQL را به پایگاه داده ارسال می کند، که باعث می شود پایگاه داده منتظر بماند (برای مدت زمانی در ثانیه) قبل از اینکه بتواند واکنش نشان دهد. مهاجم می تواند از زمانی که بانک اطلاعاتی برای پاسخ به آن صرف کند، ببیند آیا یک پرس و جو درست است یا غلط. براساس نتیجه، پاسخ HTTP فوراً یا پس از یک دوره انتظار تولید می شود. بنابراین مهاجم می تواند در صورتی کار کند که پیغامی که مورد استفاده قرار می گیرد صحیح یا نادرست باشد، بدون اینکه به داده از پایگاه داده متکی باشد.