اخبار داخلی آرمان داده پویان

مقالات

حملات تزریق SQL

۱۶ بهمن ۱۳۹۶

حملات تزریق SQL

قسمت اول

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

انواع حملات تزریق SQL

در ادامه در پنج دسته و با مثال در هر دسته حمله تزریق SQL را به شما توضیح خواهیم داد:

  • حملاتی که منجر به افشای اطلاعات پنهان می‌گردد
  • حملاتی که منطق برنامه کاربردی را به هم می‌ریزد
  • حملاتی که به منظور  استخراج داده از دیگر جداول پایگاه داده انجام می‌پذیرد
  • حملاتی که به منظور سنجش پایگاه داده صورت می‌پذیرد
  • حملات کورکورانه تزریق SQL

حملات تزریق SQL که

منجر به افشای اطلاعات پنهان می‌گردد

با یک مثال این نوع از حمله تزریق SQL را توضیح می‌دهیم. یک برنامه کاربردی فروشگاهی را در نظر بگیرید به نام OnlineShop. کاربر بر روی دسته‌بندی هدیه کلیک کرده مرورگرش این URL را ارسال می‌نماید:

https://shoponline.com/products?category=Gifts

بعد از آن این SQL query ارسال می‌گردد تا جزئیات محصولات مرتبط از پایگاه داده استخراج شود.

SELECT * FROM products WHERE category = ‘Gifts’ AND released = 1

موارد زیر از پایگاه داده درخواست می‌گردد:

تمامی جزئیات از جدول محصولات جایی که دسته بندی هدیه است و released = 1 می‌باشد. در واقع released=1 برای کالاهای عرضه شده است و مقدار صفر برای کالاهای عرضه نشده است، پش فروشگاه کالاهایی که عرضه نشده است را نمی‌خواهد به کاربران نشان دهد. پس در این سناریو اطلاعات پنهان پایگاه داده که به کاربر نبایستی نمایش داده شود، کالاهای عرضه نشده است. حمله‌ای که می‌تواند صورت پذیرد می‌تواند بدین صورت باشد:

https://shoponline/products?category=Gifts’–

نتایج SQL query به صورت زیر است:

SELECT * FROM products WHERE category = ‘Gifts’–‘ AND released = 1

خب نکته کلیدی در”–” یا به اصطلاح double dash می‌باشد. زیرا بعد از “–” هر چه که بیاید به عنوان comment برداشت می‌شود. در نتیجه پایگاه داده released=1 را در نظر نگرفته و در خروجی تمام موارد چه عرضه شده و چه عرضه نشده را ارسال می‌نماید.

:یا می‌تواند سناریوی هوشمندانه‌تری نیز باشد

https://onlineshops.com/products?category=Gifts’+OR+1=1–

حاصل آن SQL query زیر خواهد بود.

SELECT * FROM products WHERE category = ‘Gifts’ OR 1=1–‘ AND released = 1

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

حملات تزریق SQL که

منطق برنامه کاربردی را به هم می‌ریزد

این حمله را نیز با یک سناریو توضیح خواهیم داد. حالتی را در نظر بگیرید که کاربر در وب سایت یا برنامه کاربردی مورد نظرش می‌تواند نام کاربری و گذرواژه وارد کند. نام کاربری را “اپل” و گذرواژه را “۱۲۳” در نظر بگیرید. SQL query زیر به سمت پایگاه داده فرستاده خواهد شد:

SELECT * FROM users WHERE username = ‘اپل’ AND password = ‘123’

حال مهاجم می‌تواند دوباره از همان دابل دش در این بار در قسمت نام کاربری استفاده نماید و بررسی گذرواژه را دور بزند.

SELECT * FROM users WHERE username = ‘administrator’–‘ AND password = ”

همانطور که می‌بینید به صورت هوشمندانه‌ای نام کاربری administrator انتخاب شده است.

حملات تزریق SQL که

 داده‌ها از دیگر جداول پایگاه داده استخراج می‌نماید

مورد بعدی مربوط به زمانی است که به اطلاعات جداول دیگر مهاجم دست می‌یابد. در این حمله از کلیدواژه UNION استفاده می‌شود، کلید واژه ای که اجازه می‌دهد تا یک SELECT query اجرا شده و نتایج به query اصلی اضافه گردد. به طور مثال اگر یک برنامه کاربردی query زیر را اجرا نماید

SELECT name, description FROM products WHERE category = ‘Gifts’

و در آن مهاجم به جای ورودی Gifts ورودی زیر را قرار دهد:

‘ UNION SELECT username, password FROM users—

برنامه کاربردی در خروجی تمامی نام‌های کاربری و گذرواژه‌ها را همراه با اسامی و توضیح محصولات برمی‌گرداند.

آرمان داده پویان ارائه دهنده تست نفوذ برنامه‌های کاربردی 

برای مشاوره و کسب اطلاعات بیشتر با کارشناسان ما تماس بگیرید

تعداد بازدید: 1009


تازه ترین ها