تزریق اس کیوال در دی وی دبلیو ا

دی وی دابلیو اِی  یک اپلیکیشن وب است که برای مقاصد آموزشی طراحی شده‌است تا افراد علاقه‌مند، متخصصین، معلمان و دانش آموزان بتوانند در محیطی کنترل شده و قانونی به یادگیری امنیت وب اپلیکیشن‌ها، علل آسیب پذیری و نحوه برطرف کردن آسیب پذیری‌ها بپردازند. 

این اپلیکیشن به زبان پی اچ پی  و پایگاه داده مای اس کیوال  نوشته شده‌است، میزان امنیت اپلیکیشن قابل تنظیم از کم، متوسط و زیاد می‌باشد. سورس کد مربوط به هر صفحه برای مقایسه قابل دسترسی است و برنامه نویسان می‌توانند با بررسی کدها به چگونگی برطرف کردن آسیب پذیری‌ها پی ببرند.

در این مقاله به بررسی بخش تزریق اس کیوال  در دی وی دابلیو اِ می‌پردازیم.

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

ورود به دی وی دابلیو اِی 

 دستور العمل:
 مرورگر خود را (Firefox, Chrome ,…) اجرا کنید.
 در نوار آدرس مرورگر عبارت “http://192.168.1.6/dvwa/login.php”  را وارد کنید. (توجه داشته باشید که بجای “۱۹۲٫۱۶۸٫۱٫۶” باید آدرس IP محلی که دی وی دبلیو اِ در سیستم شما نصب شده‌است قرار بگیرد)
 نام کاربری و رمزعبور را وارد کنید. (Username: admin , Password: password)
 روی Login کلیک نمایید.

تنظیم سطح امنیتی دی وی دابلیو اِی 

 دستورالعمل:
 از منوی سمت چپ، بر روی گزینه “DVWA Security” کلیک کنید.
 در قسمت “Script Security”، “Low” را انتخاب نمایید.
 بر روی “Submit” کلیک نمایید.

راهنمای تزریق اس کیوال 

 منوی تزریق اس کیوال:
 دستور العمل:
 از منوی سمت چپ، گزینه “SQL Injection” را انتخای نمایید.

تزریق عمومی  
 دستور العمل:
 عدد “۱” را در جعبه متن  وارد کنید.
 روی “Submit” کلیک کنید.
 دقت داشته باشید، در کدی که برای این صفحه در نظر گرفته شده‌است، کد کاربری که یک عدد است را می‌گیرد و کد کاربری، نام و نام خانوادگی را نمایش می‌دهد.
 نکته: selectیی که در PHP به کار رفته‌است و ما به آن حمله می‌کنیم، به صورت زیر است و ما به صورت خاص از فیلد “$id” استفاده می‌کنیم.

 $getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";

سناریوی همیشه درست  

 دستورالعمل:
 متن زبر را در جعبه متن شناسه کاربری وارد کنید.(مانند شکل)

 %' or '۰'='۰

روی “Submit” کلیک کنید.
 نکته:
 در این سناریو، ما به سیستم دستور می‌دهیم تمام رکوردهای نادرست و تمام رکوردهای درست را نمایش دهد.
 % - احتمالاً با هیچ شناسه کاربری برابر نیست و بنابراین همواره غلط است.
 ‘۰’=’۰’ – همواره درست است، چون همیشه ‘۰’ با ‘۰’ برابر است.
 Selectیی که برای پایگاه داده ارسال می‌شود به صورت زیر است.

 SELECT first_name, last_name FROM users WHERE user_id = '%' or '۰'='۰';

نمایش نسخه پایگاه داده 

 دستور العمل:
 متن زبر را در جعبه متن شناسه کاربری وارد کنید.(مانند شکل)

 %' or ۰=۰ union select null, version() #

روی “Submit” کلیک کنید.
 نکته:
 به آخرین خط نمایش داده شده توجه کنید که در نام خانوادگی “۵٫۱٫۶۰” قرار داده شده‌است.
 این در واقع نسخه پایگاه دادهٔ mysql است.

نمایش کاربر پایگاه داده 

 دستور العمل:
 متن زبر را در جعبه متن شناسه کاربری وارد کنید.(مانند شکل)

 %' or ۰=۰ union select null, user() #

روی “Submit” کلیک کنید.
 نکته:
 به آخرین خط نمایش داده شده توجه کنید که در نام خانوادگی “root@localhost” قرار داده شده‌است.
 این نام، کاربر پایگاه داده است که در پشت صحنه، کد PHP را اجرا می‌کند.

نمایش نام پایگاه داده 

 دستور العمل:
 متن زبر را در جعبه متن شناسه کاربری وارد کنید.(مانند شکل)

 %' or ۰=۰ union select null, database() #

روی “Submit” کلیک کنید.
 نکته:
 به آخرین خط نمایش داده شده توجه کنید که در نام خانوادگی “dvwa” قرار داده شده‌است.
 این در واقع نام پایگاه داده است.

نمایش تمام جداول موجود در شمای پایگاه داده 

 دستور العمل:
 متن زبر را در جعبه متن شناسه کاربری وارد کنید.(مانند شکل)

 %' and ۱=۰ union select null, table_name from information_schema.tables where table_name like 'user%'#

روی “Submit” کلیک کنید.
 نکته:
 اکنون ما تمام جداول موجود در شمای پایگاه داده را نمایش دادیم.
 اطلاعات موجود در شما، همان اطلاعات پایگاه داده است، شما جایی است که اطلاعات پایگاه داده‌های دیگری که روی MySQL Server هستند، ذخیره می‌شود.

نمایش تمام جداول کاربر در شمای پایگاه داده 

 دستور العمل:
 متن زبر را در جعبه متن شناسه کاربری وارد کنید.(مانند شکل)

 %' and ۱=۰ union select null, table_name from information_schema.tables where table_name like 'user%'#

روی “Submit” کلیک کنید.
 نکته:
 اکنون ما تمامی جداولی که در شما با پسوند “user” شروع شده‌اند، را نمایش داده‌ایم.

نمایش کلیه ستون‌های جدول کاربران  موجود، در شمای پایگاه داده 

 دستورالعمل:
 متن زبر را در جعبه متن شناسه کاربری وارد کنید.(مانند شکل)

 %' and ۱=۰ union select null, concat(table_name,0x0a,column_name) from information_schema.columns where table_name = 'users' #

روی “Submit” کلیک کنید.
 نکته:
 اکنون ما تمام ستون‌های جدول users را نمایش داده‌ایم.
 این ستون‌ها شامل user_id، first_name، last_name، user و  Password است.

نمایش محتویات ستون‌های جدول کاربر موجود در شمای پایگاه داده 

 دستور العمل:
 متن زبر را در جعبه متن شناسه کاربری وارد کنید.(مانند شکل)

 %' and ۱=۰ union select null, concat(first_name,0x0a,last_name,0x0a,user,0x0a,password) from users #

روی “Submit” کلیک کنید.
 نکته:
 اکنون ما موفق به نمایش تمام اطلاعات لازم برای احرازهویت  و متصل شدن به پایگاه داده، شده‌ایم.

منابع 

 Wikipedia contributors, "SQL injection," Wikipedia, The Free Encyclopedia, http://en.wikipedia.org/w/index.php?title=SQL_injection&oldid=473084301 (accessed January 25, 2012).
 SQL-Injections - eine Analyse an PHP & MySQL

پیوند به بیرون 

 
 
 

اس‌کیوال
امنیت رایانه‌ای
سوءاستفاده امنیتی از رایانه
مدیریت داده‌ها