-
Notifications
You must be signed in to change notification settings - Fork 1
Instructions (فارسی)
ابزار برپ ورک فلو يک ابزار اپن سورس است که براي کمک در تست امنيتي ورک فلو ها طراحي شده است. اين ابزار بصورت افزونه اي از ابزار محبوب برپ پياده سازي شده است و با نسخه حرفه اي و رايگان آن سازگار است. از جمله ويژگي هاي اين ابزار مي توانيم به موارد زير اشاره کنيم:
- امکان رکورد ترافيک در زمان تعريف ورک فلوها
- اجراي ورک فلوهاي تعريف شده با امکان تغيير سشن آيدي
- قابليت اضافه کردن اسکريپت هاي دلخواه در بخش هاي مختلف تست يک ورک فلو
- قابليت استفاده از تست هاي ذخيره شده در آدرس هاي مختلف مرتبط با محيطهاي عملياتي و تستي و توسعه
براي نصب اين ابزار نسخه جار برنامه را از سايت گيتهاب دانلود کنيد و در بخش اکستندر برپ اضافه کنيد. يا مي توانيد سورس را دانلود کنيد، در يک ابزار کدنويسي بالا بياوريد و آنرا کامپايل کنيد و يک JAr بسازيد
اولين کاري که بعد از نصب براي انجام تست ها بايد بکنيد تعريف ورک فلو هاست. ما ورک فلو را به اين صورت تعريف مي کنيم: سلسله اي از عمليات که توسط چندين کاربر با نقش هاي متفاوت در سيستم براي يک هدف خاص انجام مي شود. بعبارت فني تر: يک ورک فلو تعدادي از درخواست ها و پاسخ هاست که براي انجام کار خاصي توسط کاربرهاي مختلف سيستم انجام شده است.
براي مثال کاربر ساده درخواست مشاهده يک فايل را مي دهد و کاربر مدير درخواست تاييد را مي دهد
قسمت هاي مختلف که توسط يک کاربر انجام مي شود را توالي (Sequence( مي ناميم. بعبارتي هر توالي سللسه اي از درخواست هاست که توسط يک کاربر به سرور ارسال مي شود.
براي مثال اينکه کاربر ادمين از ميان درخواست ها يک درخواست را انتخاب کند و آنرا تاييد کند يک توالي محسوب مي شود.
در هنگام کار با اين برنامه مراحل زير را خواهيم داشت: بايد ابتدا توالي ها را در بخش Sequence ذخيره کرد. سپس در بخش Flow آنها را به هم مربوط مي کنيم و اين جريان را پارامتري مي کنيم. مثل تعريف توابع در برنامه نويسي، بنابراين با وارد کردن پارامترهاي فلو، آن جريان دورباره اجرا خواهد شد ولي مثلا با يک کاربر ديگر يا روي ريسورس ديگر در بخش Scenario ما به پارامترهاي فلو هايي که تعريف کرده ايم مقدار دهي مي کنيم. اين سناريو ها مي توانند ذخيره شوند تا در زمان توسعه بعد از تغييرات جديد نياز به دوباره سازي آن نباشد و فقط نياز به اجراي آن باشد. در صورتيکه نياز به کارهاي پيچيده تر باشد ميتوانيم با استفاده از بخش Script اسکريپت هاي بنويسيم و آنها را در بخش هاي مختلف يک تست تعبيه کنيم.
ابتدا تنظيمات پروکسي مرورگر را روي برپ قرار دهيد. با زدن دکمه نيو در بخش سکونس پنجره سکونس جديد باز مي شود. دکمه رکورد را فشار دهيد. در مرورگر آن سکونس ( قسمت هايي از ورک فلو که مربوط به يک کاربر است ) را مي خواهيد تست کنيد اجرا کنيد. خواهيد ديد که درخواست هاي شما در پنجره سمت چپ نمايش داده مي شوند. مي توانيد با استفاده از چک باکس فيلتر از نمايش فايلهاي جاوا اسکريپت و سي اس اس جلوگيري کنيد. درخواست هاي مهم که درخواست هاي اصلي اين سکونس را تشکيل مي دهد را انتخاب کنيد و در پنل سمت راست بيندازيد. بديهي است که ترتيب درخواست ها مهم است. به هر دليلي اگر خواستيد مي توانيد حتي درخواستي را در پنجره پايين تغيير داده و دکمه ريسند را بزنيد.
بيس يوآرال آن قسمت از آدرس سايت است که در همه درخواست ها ثابت است. براي مثال ممکن است آدرس سايتي که در زمان توسعه مورد دسترس است به شکل زير باشد 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
براي اينکه نياز به دوباره کاري نباشد، و شما بتوانيد تست هايي که براي سامانه تستي ساخته ايد را روي سامانه عملياتي يا ساير سامانه ها نيز استفاده کنيد، به آن قسمت از يو آر ال ها در يک سامانه ثابت است را بيس يوآرال مي گوييم. شما براحتي با تعويض بيس يوآرال مي توانيد تست هاي ساخته شده را روي نسخه هاي مختلف سامانه تست کنيد.
ساخت فلو مانند ساخت توابع است. شما سکونس ها پشت هم قرار مي دهيد. و مشخص مي کنيد که اين ورک فلو با چه پارامترهايي کار کند. شما در قسمت هايي از متن درخواست ها پليس هولدرهايي به شکل §id@params§ اضافه مي کنيد. اين پليس هولدرها در زمان اجرا با مقدار متغير هاي آن پر خواهند شد
متغيرها به سه دسته تقسيم مي شوند. نام پارامترها بايد آميخته اي از حروف بزرگ و کوچک، اعداد و دش و آندرلاين باشد.
پارامترها نوعي از متغيرها هستند که در ابتداي اجراي ورک فلو مقداردهي مي شوند.
متغيرهاي محلي نوعي از متغيرها هستند که در وسط يک ورک فلو ساخته و مقداردهي مي شوند و در طول آن استفاده مي کنند. بعد از پايان اجرا مقدار آنها نيز از بين مي رود. براي ساخت يک متغير محلي بايد در پنجره تعريف فلو دکمه Edit Requests را بزنيد. در اين پنجره در سمت چپ يک درخواست را انتخاب کنيد تا تب هاي موجود در سمت راست مقداردهي شوند. در تب ريسپانس در قسمت پاييني دکمه + را بزنيد. درحال حاضر 5 نوع متغير پشتيباني مي شود:
- استخراج داده از فيلدهاي هيدن يک فرم
- استخراج از يک کوکي که در ريسپانس دريافت شده است
- استفاده از يک CSS Selector براي انتخاب يک فيلد
- استفاده از Regex
- کپتچاي تصويري: در نظر گرفتن خروجي بعنوان يک عکس و نمايش يک پاپ آپ براي وارد کردن آن. مقدار وارد شده بصورت يک متغير در نظر گرفته مي شود.
متغيرهاي محلي متغيرهايي هستند که بصورت عمومي در همه ورک فلو ها استفاده مي شوند. اين متغيرها در ديتابيس ذخيره مي شوند. براي ساخت يک متغير سراسري مانند متغيرهاي محلي بايد اقدام شود. در پنجره ساخت متغير بايد گزينه Global انتخاب شود. اگر نام يک متغير گلوبال مقدار ثابت return بدون حساسيت به بزرگي و کوچکي باشد بصورت يک متغيرمحلي با نام سناريو ذخيره خواهد شد.
شما مي توانيد مقدار سشن آيدي که در توکن رد وبدل مي شود را براي هر سکونس در ورک فلو تعيين کنيد. شماي مي توانيد مقدار ثابت براي آن وارد کنيد، يا نام يک متغير (پارامتر يا محلي يا عمومي) وارد کنيد تا در زمان اجرا بصورت خودکار مقداردهي شود. اگر اين مقدار خالي باشد در هنگام اجرا اقدامي روي مقدار توکن انجام نمي شود و مانند ساير بخش هاي درخواست رفتار مي شود.
سناريو يا تست کيس استفاده از فلو هايي است که در مرحله قبل ساختيم. يعني به پارامترهاي ورودي آن مقدار مي دهيم و آن را اجرا مي کنيم. همچنين بيس يوآرال آن را مي توانيم انتخاب کنيم تا تست کيس روي نسخه هاي مختلف برنامه اجرا شود.
اگر نياز به پردازش يا عمليات پيچيده تري روي درخواست ها و پاسخ ها داريد، مي توانيد از بخش اسکريپت نويسي استفاده کنيد. شما مي توانيد اسکريپت هايي بنويسيد و در 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 و ساير کلاس ها به توابع پابليک آنها دسترسي داشته باشيد.