آموزش هک از طریق تزریق SQL: با مثال بیاموزید

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

آموزش هک از طریق تزریق SQL: با مثال بیاموزید

تزریق SQL چیست؟

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

با مثال عملی SQL Injection را بیاموزید

 

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

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

نحوه عملکرد SQL Injection

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

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

<form action=‘index.php’ method="post">

<input type="email" name="email" required="required"/>

<input type="password" name="password"/>

<input type="checkbox" name="remember_me" value="Remember me"/>

<input type="submit" value="Submit"/>

</form>

اینجا،
فرم فوق آدرس ایمیل را می پذیرد ، و سپس رمز ورود آنها را به یک فایل PHP به نام index.php ارسال می کند.

این یک گزینه ذخیره کردن جلسه login در یک کوکی دارد. ما این را از چک باکس remember_me استنباط کرده ایم. این فرم از متد پُست برای تسلیم دیتا استفاده میکند. این بدان معنی است که مقادیر در URL نمایش داده نمی شوند.

بیایید فرض کنیم عبارت در پشت صحنه برای بررسی ID کاربر به شرح زیر باشد:

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

اینجا،

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

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

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

202103211745-01

  • مرحله ۱) این کد را در قاب سمت چپ وارد کنید
CREATE TABLE `users` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `email` VARCHAR(45) NULL,
  `password` VARCHAR(45) NULL,
  PRIMARY KEY (`id`));
  
  
insert into users (email,password) values ('m@m.com',md5('abc'));
  • مرحله ۲) روی Build Schema کلیک کنید

 

    • مرحله ۳) این کد را در قاب سمت راست وارد کنید
select * from users;

 

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

202103211750-02

فرض کنید کاربر 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 فوق را کپی کرده و مانند شکل زیر در جعبه متن SQL FiddleRun SQL جای گذاری کنید

202103211803-03

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

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

 

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

202103211808-04

فرض کنید یک مهاجم ورودی زیر را ارائه دهد

202103211810-05

  • مرحله ۱: xxx@xxx.xxx را به عنوان آدرس ایمیل وارد کنید
  • مرحله ۲:xxx’) OR 1 = 1 — ] را وارد کنید
  • بر روی دکمه Submit  کلیک کنید
  • به داشبورد هدایت خواهید شد

عبارت SQL تولید شده به شرح زیر خواهد بود

SELECT * FROM users WHERE email = 'xxx@xxx.xxx' AND password = md5('xxx') OR 1 = 1 -- ]'); 

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

202103211816-06

اینجا،

 

  • این عبارت هوشمندانه فرض می کند رمز-انکرایپت md5 استفاده شده است
  • کاراکترهای نقل قول تکی و براکت بسته شدن را کامل می کند
  • شرطی را به ادامه جمله اضافه می کند که همیشه درست باشد

 

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

 

انواع دیگر حمله SQL Injection

 

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

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

لیست فوق جامع نیست. این فقط به شما ایده می دهد که SQL Injection چیست.

ابزارهای اتوماسیون برای تزریق SQL

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

SQLSmack – https://securiteam.com/tools/5GP081P75C

SQLPing 2 – http://www.sqlsecurity.com/downloads/sqlping2.zip?attredirects=0&d

SQLMap – http://sqlmap.org/

 

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

یک سازمان می تواند برای محافظت از خود در برابر حملات SQL Injection سیاست زیر را در پیش بگیرد.

  • به ورودی کاربر هرگز نباید اعتماد کرد – همیشه باید قبل از استفاده از عبارات SQL پویا ، آن را پاکسازی کرد.
  • رویه های ذخیره شده (Stored procedures)- می توانند عبارات SQL را کپسوله کنند و تمام ورودی را به عنوان پارامتر در نظر بگیرند.
  • دستورات آماده شده (Prepared statements) – دستورات آماده شده برای کار ابتدا عبارات SQL را ایجاد میکنند سپس با تمام داده های کاربر که تسلیم شده به عنوان پارامتر رفتار میکنند. این تاثیری در سینتاکس دستور SQL ندارد.
  • عبارات منظم (Regular expressions) – از اینها می توان برای شناسایی کد احتمالی مضر و حذف آن قبل از اجرای دستورات SQL استفاده کرد.
  • حق دسترسی کاربر به اتصال به پایگاه داده – به حسابهایی که برای اتصال به پایگاه داده استفاده می شوند فقط حق دسترسی لازم باید داده شود. این می تواند به کاهش عملکردهای SQL در سرور کمک کند.
  • پیام های خطا – این اطلاعات نباید اطلاعات حساس و محل دقیق بروز خطا را نشان دهد. پیام های خطای سفارشی ساده مانند “متأسفیم ، ما با خطاهای فنی روبرو هستیم. با تیم فنی تماس گرفته شده است. لطفا بعداً دوباره امتحان کنید “می تواند به جای نمایش عبارات SQL که باعث خطا شده اند ، استفاده شود.

 

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

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

توجه: برنامه ضد ویروس شما ممکن است به دلیل ماهیت آن را پرچم گذاری کند. باید آن را به لیست استثناها اضافه کنید یا نرم افزار ضد ویروس خود را موقتاً متوقف کنید.

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

202103211835-07

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

 

خلاصه

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

 

شناسنامه مطلب:

لینک: https://www.guru99.com/learn-sql-injection-with-practical-example.html

نویسنده: سایت guru99.com

مترجم: گوگل ترانسلیت

ویراستار ترجمه: علیرضا صدر ثقةالاسلامی

دیدگاهتان را بنویسید

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