دوره های آموزشی آکادمی پی وی لرن (پروژه محور و ویژه بازار کار)



  • ۴
  • شهریور

جلسه ۱۵ : آموزش تزریق SQL همراه با مثال

  • دسته‌بندی‌ها :
جلسه ۱۵ : آموزش تزریق SQL همراه با مثال
    • جزئیات
    • نوع محتواآمورشی

      مقدمه

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

      آموزش تزریق SQL همراه با مثال

      داده ها یکی از اجزای حیاتی سیستم های اطلاعاتی هستند. برنامه های وب مبتنی بر پایگاه داده توسط سازمان برای گرفتن داده ها از مشتریان استفاده می شوند. SQL مخفف Structured Query Language است. SQL برای بازیابی و دستکاری داده ها در پایگاه داده مورد استفاده قرار می گیرد.

      حمله ی تزریق SQL چیست؟

      تزریق SQL حمله ایست که به دستورات dynamic SQL برای تشریح بخش های خاصی از این دستورات یا اضافه کردن یک شرط که همیشه درست است، می پردازد. در این حمله از ضعف های طراحی در برنامه های وبی که ضعیف طراحی شده اند، استفاده می کنند تا دستورات SQL را اکسپلویت کنند و کد خرابکارانه SQL را اجرا نمایند.

       

      آموزش تزریق SQL همراه با مثال

      آموزش تزریق SQL همراه با مثال

      در این آموزش، تکنیک های تزریق SQL را یاد خواهید گرفت و نحوه ی محافظت از برنامه های کاربردی وب را از چنین حملاتی آموزش خواهیم داد.

      • تزریق SQL چگونه کار می کند.
      • فعالیت هک: تزریق SQL یک برنامه وب
      • سایر انواع حملات SQL Injection
      • ابزارهای اتوماسیون برای تزریق SQL
      • نحوه جلوگیری از حمله ی تزریق SQL
      • فعالیت هکینگ: استفاده از Havji برای تزریق SQL

      تزریق SQL چگونه کار می کند ؟

      انواع حملاتی که می توانند با استفاده از SQL انجام شوند، بسته به نوع موتور پایگاه داده متفاوت است. تزریق SQL با حمله به دستورات پویای SQL کار می کند. دستورات پویا دستوراتی است که در زمان اجرا با استفاده از پارامترهای رمز عبور از یک فرم وب یا رشته ی URI query تولید می شود.

      حال بیایید یک برنامه وب ساده با یک فرم ورودی را در نظر بگیریم. کد فرم HTML در زیر نشان داده شده است.

      مثال : 

      در این کد :

      • فرم بالا آدرس ایمیل و رمز عبور را قبول می کند سپس آنها را به یک فایل PHP با نام index.php ارسال می نماید.
      • آن آپشن ذخیره سازی جلسه ورود را در یک کوکی دارد. ما این را از remember_me checkbox متوجه شدیم. این روش برای ارسال داده استفاده می کند. و به این معنی است که مقادیر در URL نشان داده نمی شوند.

      فرض کنید دستورات در backend برای چک کردن شناسه کاربر به صورت زیر است.

      ;([‘SELECT * FROM users WHERE email = $_POST[’email’] AND password = md5($_POST[‘password

      در این کد

      • دستورات فوق از مقادیر آرایه ی [] $_POST به طور مستقیم بدون sanitizing (ایمنی) آن ها استفاده می کند.
      • رمز عبور با استفاده از الگوریتم MD5 رمزگذاری می شود.

      تزریق SQL را با استفاده از sqlfiddle نشان خواهیم داد. /URL http://sqlfiddle.com را در مرورگر وب خود باز کنید. شما پنجره زیر را دریافت خواهید کرد.

      توجه: شما بایستی دستورات SQL را بنویسید.

       

      آموزش تزریق SQL همراه با مثال

      آموزش تزریق SQL همراه با مثال

      • مرحله ۱) این کد را در پن چپ وارد کنید.

      مثال : 

      • مرحله ۲) روی Build Schema کلیک کنید.
      • مرحله ۳) این کد را در پن راست وارد کنید.

      ;select * from users

      • مرحله ۴) روی Run SQL کلیک کنید. شما نتیجه ی زیر را خواهید دید.

       

      آموزش تزریق SQL همراه با مثال

      آموزش تزریق SQL همراه با مثال

      فرض کنید کاربر admin@admin.sys و ۱۲۳۴ را به عنوان رمز عبور دارد. دستوراتی که در برابر پایگاه داده اجرا می شود، خواهد بود:

      ;(‘SELECT * FROM users WHERE email = ‘admin@admin.sys’ AND password = md5(‘1234

      کد بالا را می توان با تبدیل به توضیح بخشی از رمز عبور و اضافه کردن یک شرط که همیشه درست باشد، اکسپلویت نمود. فرض کنید یک مهاجم ورودی زیر را در فیلد آدرس ایمیل ارائه می کند.

      [‘–xxx@xxx.xxx’ OR 1 = 1 LIMIT 1

      xxx برای رمز عبور

      دستورات پویای تولید شده به شرح زیر است.

      ;(‘SELECT * FROM users WHERE email = ‘xxx@xxx.xxx’ OR 1 = 1 LIMIT 1 — ‘ ] AND password = md5(‘1234

      در این کد

      • xxx@xxx.xxx با تک کوتیشن تکمیل می شود که تک کوتیشن رشته را کامل می کند.
      • OR 1 = 1 LIMIT 1 شرطی است که همیشه درست می باشد و بازگشت نتایج به تنها یک رکورد محدود می شود.
      • … ‘AND … یک نظر SQL است که بخش رمز عبور را حذف می کند.

      دستورات بالا را کپی کنید و آن را در SQL FiddleRun SQL Text box پیست کنید، همان طور که در زیر نشان داده شده است.

       

      آموزش تزریق SQL همراه با مثال

      آموزش تزریق SQL همراه با مثال

      فعالیت هک: تزریق SQL یک برنامه وب

      ما یک برنامه وب ساده در / http://www.techpanda.org داریم که به حملات SQL Injection آسیب پذیر است. کد فرم HTML بالا از صفحه login گرفته شده است. این نرم افزار، امنیت پایه ای مانند نظارت بر فیلد ایمیل را فراهم می کند. این بدان معناست که کد بالا نمی تواند برای دور زدن لاگین به سیستم، مورد استفاده قرار گیرد.

      برای دور زدن ، ما به جای آن می توانیم فیلد رمز عبور را اکسپلویت کنیم. نمودار زیر مراحلی را که باید دنبال کنید، نشان می دهد.

       

      آموزش تزریق SQL همراه با مثال

      آموزش تزریق SQL همراه با مثال

      فرض کنید که حمله کننده ورودی زیر را فراهم می کند.

      • مرحله ۱: به عنوان آدرس ایمیل xxx@xxx.xxx را وارد کنید.
      • مرحله ۲: وارد کنید  [–xxx’) OR 1 = 1

       

      آموزش تزریق SQL همراه با مثال

      آموزش تزریق SQL همراه با مثال

      • روی دکمه Submit کلیک کنید.
      • شما به داشبورد هدایت می شوید.

      دستورات SQL تولید شده به شرح زیر است.

      ;(‘[–SELECT * FROM users WHERE email = ‘xxx@xxx.xxx’ AND password = md5(‘xxx’) OR 1 = 1

      نمودار زیر دستور تولید شده را توضیح می دهد.

       

      آموزش تزریق SQL همراه با مثال

      آموزش تزریق SQL همراه با مثال

      • این بیانیه به صراحت فرض می کند رمزگذاری md5 استفاده می شود.
      • با تک کوتیشن و بسته شدن براکت کامل می شود.
      • شرطی را به این عبارت اضافه می کند که همیشه درست است.

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

      سایر انواع حملات SQL Injection

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

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

      لیست فوق کامل نیست و فقط به شما دیدی از آن چه که تزریق SQL انجام می دهد را خواهد داد.

      Automation Tools برای تزریق SQL

      در مثال فوق، از تکنیک های حمله دستی بر اساس دانش گسترده از SQL استفاده کردیم. ابزارهای خودکاری وجود دارند که می توانند به شما کمک کنند تا حملات را موثرتر و در کوتاه ترین زمان ممکن انجام دهید. این ابزارها شامل :

      • SQLSmack – http://www.securiteam.com/tools/5GP081P75C.html
      • SQLPing 2 – http://www.sqlsecurity.com/downloads/sqlping2.zip?attredirects=0&d=1
      • /SQLMap – http://sqlmap.org

      نحوه جلوگیری از حمله تزریق SQL

      یک سازمان می تواند سیاست های زیر را برای محافظت از خود در برابر حملات تزریق SQL اتخاذ کند.

      • کاربر ورودی هرگز نباید مورد اعتماد قرار گیرد – قبل از آن که دستورات پویای SQL استفاده شود باید همیشه آن را پاکسازی کنیم.
      • روش های ذخیره شده – می تواند دستورات SQL را محصور کند و تمام ورودی ها را به عنوان پارامترها پردازش کند.
      • دستورات فراهم شده – دستورات آماده به کار را با ایجاد یک دستور SQL و پردازش تمام داده های کاربر ارسال شده به عنوان پارامترها فراهم می کند. این هیچ تاثیری بر سینتکس دستورات SQL ندارد.
      • Regular expressions – این ها می توانند برای شناسایی کد مخرب بالقوه و حذف آن قبل از اجرای دستورات SQL استفاده شوند.
      • پیام های خطا – این نباید اطلاعات حساس و جایی که دقیقا خطا رخ داده را فاش کند. پیام های خطای ساده سفارشی مانند “با عرض پوزش، ما در حال تجربه خطاهای فنی هستیم. با تیم فنی تماس گرفته شده است. لطفا بعدا دوباره امتحان کنید “را می توانید به جای نشان دادن دستورات SQL ی که باعث خطا شده است را استفاده کنید.
      • و موارد دیگر

      فعالیت هک: از Havij برای تزریق SQL استفاده کنید.

      در این سناریوی عملی، ما قصد داریم از برنامه Havij Advanced SQL Injection برای اسکن آسیب پذیری یک وب سایت استفاده کنیم.

      توجه: نرم افزار ضد ویروس خود را متوقف کنید.

      تصویر زیر پنجره اصلی Havij را نشان می دهد.

       

      آموزش تزریق SQL همراه با مثال

      آموزش تزریق SQL همراه با مثال

      ابزار فوق می تواند برای ارزیابی آسیب پذیری یک وب سایت / برنامه استفاده شود.

      کلام پایانی

      SQL Injection نوعی از حمله است که از دستورات بد SQL استفاده می کند.
      تزریق SQL می تواند مورد استفاده برای دور زدن الگوریتم های ورود، بازیابی، قرار دادن، و به روز رسانی و حذف داده ها باشد.
      ابزار تزریق SQL شامل SQLMap، SQLPing، و SQLSmack، و غیره است.
      یک سیاست امنیتی خوب هنگام نوشتن دستور SQL می تواند به کاهش حملات تزریق SQL کمک کند.

      QR:  جلسه ۱۵ : آموزش تزریق SQL همراه با مثال
      به اشتراک بگذارید


      دیدگاه کاربران
      1. تصویر کاربر
        • تصویر کاربر
      2. تصویر کاربر