Skip to content

Instructions (فارسی)

Mehrdad Abdi edited this page Jan 9, 2018 · 1 revision

ابزار برپ ورک فلو يک ابزار اپن سورس است که براي کمک در تست امنيتي ورک فلو ها طراحي شده است. اين ابزار بصورت افزونه اي از ابزار محبوب برپ پياده سازي شده است و با نسخه حرفه اي و رايگان آن سازگار است. از جمله ويژگي هاي اين ابزار مي توانيم به موارد زير اشاره کنيم:

  • امکان رکورد ترافيک در زمان تعريف ورک فلوها
  • اجراي ورک فلوهاي تعريف شده با امکان تغيير سشن آيدي
  • قابليت اضافه کردن اسکريپت هاي دلخواه در بخش هاي مختلف تست يک ورک فلو
  • قابليت استفاده از تست هاي ذخيره شده در آدرس هاي مختلف مرتبط با محيطهاي عملياتي و تستي و توسعه

Installing

براي نصب اين ابزار نسخه جار برنامه را از سايت گيتهاب دانلود کنيد و در بخش اکستندر برپ اضافه کنيد. يا مي توانيد سورس را دانلود کنيد، در يک ابزار کدنويسي بالا بياوريد و آنرا کامپايل کنيد و يک JAr بسازيد

Basics

اولين کاري که بعد از نصب براي انجام تست ها بايد بکنيد تعريف ورک فلو هاست. ما ورک فلو را به اين صورت تعريف مي کنيم: سلسله اي از عمليات که توسط چندين کاربر با نقش هاي متفاوت در سيستم براي يک هدف خاص انجام مي شود. بعبارت فني تر: يک ورک فلو تعدادي از درخواست ها و پاسخ هاست که براي انجام کار خاصي توسط کاربرهاي مختلف سيستم انجام شده است.

براي مثال کاربر ساده درخواست مشاهده يک فايل را مي دهد و کاربر مدير درخواست تاييد را مي دهد

قسمت هاي مختلف که توسط يک کاربر انجام مي شود را توالي (Sequence( مي ناميم. بعبارتي هر توالي سللسه اي از درخواست هاست که توسط يک کاربر به سرور ارسال مي شود.

براي مثال اينکه کاربر ادمين از ميان درخواست ها يک درخواست را انتخاب کند و آنرا تاييد کند يک توالي محسوب مي شود.

در هنگام کار با اين برنامه مراحل زير را خواهيم داشت: بايد ابتدا توالي ها را در بخش Sequence ذخيره کرد. سپس در بخش Flow آنها را به هم مربوط مي کنيم و اين جريان را پارامتري مي کنيم. مثل تعريف توابع در برنامه نويسي، بنابراين با وارد کردن پارامترهاي فلو، آن جريان دورباره اجرا خواهد شد ولي مثلا با يک کاربر ديگر يا روي ريسورس ديگر در بخش Scenario ما به پارامترهاي فلو هايي که تعريف کرده ايم مقدار دهي مي کنيم. اين سناريو ها مي توانند ذخيره شوند تا در زمان توسعه بعد از تغييرات جديد نياز به دوباره سازي آن نباشد و فقط نياز به اجراي آن باشد. در صورتيکه نياز به کارهاي پيچيده تر باشد ميتوانيم با استفاده از بخش Script اسکريپت هاي بنويسيم و آنها را در بخش هاي مختلف يک تست تعبيه کنيم.

Recording Sequences

ابتدا تنظيمات پروکسي مرورگر را روي برپ قرار دهيد. با زدن دکمه نيو در بخش سکونس پنجره سکونس جديد باز مي شود. دکمه رکورد را فشار دهيد. در مرورگر آن سکونس ( قسمت هايي از ورک فلو که مربوط به يک کاربر است ) را مي خواهيد تست کنيد اجرا کنيد. خواهيد ديد که درخواست هاي شما در پنجره سمت چپ نمايش داده مي شوند. مي توانيد با استفاده از چک باکس فيلتر از نمايش فايلهاي جاوا اسکريپت و سي اس اس جلوگيري کنيد. درخواست هاي مهم که درخواست هاي اصلي اين سکونس را تشکيل مي دهد را انتخاب کنيد و در پنل سمت راست بيندازيد. بديهي است که ترتيب درخواست ها مهم است. به هر دليلي اگر خواستيد مي توانيد حتي درخواستي را در پنجره پايين تغيير داده و دکمه ريسند را بزنيد.

Base URL

بيس يوآرال آن قسمت از آدرس سايت است که در همه درخواست ها ثابت است. براي مثال ممکن است آدرس سايتي که در زمان توسعه مورد دسترس است به شکل زير باشد http://test-me.com/app4dev/index.php و آدرس زير براي زماني باشد که براي تست رفته است http://test-me.com/app4test/index.php و آدرس زير براي عملياتي باشد http://test-me.com/index.php

يا مثلا براي نسخه آلفا http://test-me.com/alpha/index.php و نسخه بتا http://test-me.com/beta/index.php

براي اينکه نياز به دوباره کاري نباشد، و شما بتوانيد تست هايي که براي سامانه تستي ساخته ايد را روي سامانه عملياتي يا ساير سامانه ها نيز استفاده کنيد، به آن قسمت از يو آر ال ها در يک سامانه ثابت است را بيس يوآرال مي گوييم. شما براحتي با تعويض بيس يوآرال مي توانيد تست هاي ساخته شده را روي نسخه هاي مختلف سامانه تست کنيد.

Defining Flows

ساخت فلو مانند ساخت توابع است. شما سکونس ها پشت هم قرار مي دهيد. و مشخص مي کنيد که اين ورک فلو با چه پارامترهايي کار کند. شما در قسمت هايي از متن درخواست ها پليس هولدرهايي به شکل §id@params§ اضافه مي کنيد. اين پليس هولدرها در زمان اجرا با مقدار متغير هاي آن پر خواهند شد

Variables

متغيرها به سه دسته تقسيم مي شوند. نام پارامترها بايد آميخته اي از حروف بزرگ و کوچک، اعداد و دش و آندرلاين باشد.

Parameters

پارامترها نوعي از متغيرها هستند که در ابتداي اجراي ورک فلو مقداردهي مي شوند.

Local variables

متغيرهاي محلي نوعي از متغيرها هستند که در وسط يک ورک فلو ساخته و مقداردهي مي شوند و در طول آن استفاده مي کنند. بعد از پايان اجرا مقدار آنها نيز از بين مي رود. براي ساخت يک متغير محلي بايد در پنجره تعريف فلو دکمه Edit Requests را بزنيد. در اين پنجره در سمت چپ يک درخواست را انتخاب کنيد تا تب هاي موجود در سمت راست مقداردهي شوند. در تب ريسپانس در قسمت پاييني دکمه + را بزنيد. درحال حاضر 5 نوع متغير پشتيباني مي شود:

  • استخراج داده از فيلدهاي هيدن يک فرم
  • استخراج از يک کوکي که در ريسپانس دريافت شده است
  • استفاده از يک CSS Selector براي انتخاب يک فيلد
  • استفاده از Regex
  • کپتچاي تصويري: در نظر گرفتن خروجي بعنوان يک عکس و نمايش يک پاپ آپ براي وارد کردن آن. مقدار وارد شده بصورت يک متغير در نظر گرفته مي شود.

Global variables

متغيرهاي محلي متغيرهايي هستند که بصورت عمومي در همه ورک فلو ها استفاده مي شوند. اين متغيرها در ديتابيس ذخيره مي شوند. براي ساخت يک متغير سراسري مانند متغيرهاي محلي بايد اقدام شود. در پنجره ساخت متغير بايد گزينه Global انتخاب شود. اگر نام يک متغير گلوبال مقدار ثابت return بدون حساسيت به بزرگي و کوچکي باشد بصورت يک متغيرمحلي با نام سناريو ذخيره خواهد شد.

Session Management

شما مي توانيد مقدار سشن آيدي که در توکن رد وبدل مي شود را براي هر سکونس در ورک فلو تعيين کنيد. شماي مي توانيد مقدار ثابت براي آن وارد کنيد، يا نام يک متغير (پارامتر يا محلي يا عمومي) وارد کنيد تا در زمان اجرا بصورت خودکار مقداردهي شود. اگر اين مقدار خالي باشد در هنگام اجرا اقدامي روي مقدار توکن انجام نمي شود و مانند ساير بخش هاي درخواست رفتار مي شود.

Deining a Test (Scenario)

سناريو يا تست کيس استفاده از فلو هايي است که در مرحله قبل ساختيم. يعني به پارامترهاي ورودي آن مقدار مي دهيم و آن را اجرا مي کنيم. همچنين بيس يوآرال آن را مي توانيم انتخاب کنيم تا تست کيس روي نسخه هاي مختلف برنامه اجرا شود.

Scripting

اگر نياز به پردازش يا عمليات پيچيده تري روي درخواست ها و پاسخ ها داريد، مي توانيد از بخش اسکريپت نويسي استفاده کنيد. شما مي توانيد اسکريپت هايي بنويسيد و در 5 نقطه از اجراي يک تست آنها را تزريق کنيد:

  • قبل از شروع تست
  • قبل از مقداردهي به پارامترهاي يک درخواست
  • بعد از مقداردهي به پارامترهاي يک درخواست
  • بعد از دريافت پاسخ
  • بعد از پايان تست

اسکريپ ها ميتوانند به زبان هاي جاوااسکريپت، پايتون يا روبي باشند. براي استفاده از پايتون و روبي بايد ماژول هاي Jython يا JRuby را به برپ معرفي کنيد. ولي براي اسکريپت نويسي به زبان جاوااسکريپت نياز به اضافه کردن ماژول جدييد نيست.

براي مثال مي توانيد با استفاده از قطعه کد زير يک متغير گلوبال تعريف کنيد:

instance.updateGlobalVariable("session-"+ instance.getParams().get("username") , instance.queryLocalVariable("cookie-login"))

قعلا API اين بخش مستند سازي نشده است. ولي شما مي توانيد با مراجعه به سورس کد و مشاهده کد https://github.com/mabdi/burp-workflows/blob/master/src/com/behsazan/controller/Flow_Running.java و ساير کلاس ها به توابع پابليک آنها دسترسي داشته باشيد.