SpareNet Servers Advertising & Link Exchange

اطلاعیه

بستن
هیچ اطلاعیه ای هنوز ایجاد نشده است .

Fuzzing Vulnserver with Peach 3

بستن
X
 
  • فیلتر
  • زمان
  • نمایش
پاک کردن همه
نوشته‌های جدید

  • Fuzzing Vulnserver with Peach 3

    Vulnserver

    vulnserver یک نرم افزار است که به صورت آسیب پذیر توسط Stephan Bradshaw نوشته شده، کار این نرم افزار اینکه تمامی درخواست هایی که به سمت پروتکل TCP روی یک پورت مشخص میاد رو قبول میکنه.این سرور رو میشه با فرستادن یک سری کارکتر های تصادفی اون رو buffer overflows و SEH overwrites کرد. این نرم افزار یک راه خوب برای یاد گیری چگونگی SEH overwrites و buffer overflows است.

    Peach

    همون طور که در پست قبلی خودم این نرم افزار رو معرفی کردم پیچ(هلو) یک فازر که دو حالت فازینگ یعنی generational و mutation رو به طور کامل ساپورت میکنه. این نرم افزار از یک فایل XML استفاده میکنه که بفهمه چطور باید به یک نرم افزار حلمه کنه یعنی کدوم پورت کدوم آی پی و اینکه چه نوع اطلاعاتی رو به صورت تصادفی ارسال کنه که موجب به کرش کردن نرم افزار بشه به طور مثال یک کانکشن تحت شبکه ایجاد میکنه و خروجی رو درون یک فایل تحویل میده. دلیل من برای انتخاب این فازر اینکه که پشتیبانی قوی نسبت به بقیه فازر ها داره و اگر من به یک مشکل بر بخورم میتونم راحت اونو با پیشتیبانی درمیون بزارم و مشکلم رو به راحتی حل کنم.

    Setting Up

    بعد از اینکه نرم افزار رو از پست قبلی من توی همین سایت دانلود کردید فایل vulnserver رو از اینجا دانلود کنید، همچنین نرم افزار netcat برای ویندوز از اینجا ، بعد از اون نرم افزار Windb رو برای ویندوز 7 نصب کنید که میتونید از اینجا دانلودش کنید، خوب حالا تقریبا آمده شدیم که کار رو شروع کنیم.اول ما به وسیله CMD نرم افزار vulnserver رو اجرا میکنم،به صورت پیش فرض نرم افزار روی پورت 9999 اجرا میشه اما اگر شما یک پورت دیگه بهش بدید روی اون پورت اجرا میشه(منظور روی این پورت لیسن میکنه).



    سپس به وسیله یک CMD دیگه ما توسط نرم افزار netcat به سرور متصل میشم و یکم سیخونک میکنیم نرم افزار رو که بفهمیم چی به چیه. به وسیله تایپت کردن کلمه HELP ما به یک لیست بر میخورم که دستورات نرم افزار vulnserver رو برامون مینوسیه. وقتی که خوب این دستورات رو نگاه میکنید میبینید که کار خاصی انجام نمیدن و مهم نیستن این ها فقط برای مدیریت ورودی های نرم افزار هستن که میتونن باعث کرش کردن نرم افزار بشن.



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



    خوب اینطور بنظر میرسه که پروتکل اصلی که نرم افزار باهاش کار میکنه به این صورت هست:[command] [input] [newline]این مقدار اطلاعات باید کافی باشه برای شروع کار با نرم افزار Peach و کار فازینگ.

    Peach Pit

    peach pit یک حالت کلی از مدل های داده(Data Models) داره. دنبال شده به وسیله وضعیت مدل ها (followed by State Models)، دنبال شده به وسیله عامل(followed by Agents)، و دنبال شده به وسیله تست (followed by Tests).

    Data Model

    Data Model توصیف میکنه نوعی از داده ها رو که Peach میتونه اون ها رو به عنوان ورودی قبول کنه یا باید استفاده بشه موقعی که تلاش میکنه برای فاز کرد چیزی. خوشبختانه فرمت استفاده شده ما به طور منصفانه این ساده و با یک دستور بهبود یافته است، یک فاصله، یک رشته که قابل فاز شدن است، و یک کارکتر برای اول خط رفتن مکان نما و یک کاراکتر برای رفتن به خط بعد.
    پروتکل های بیشتر نیاز داره که شما دانش بیشتری نصب به اون موضوع داشته باشید.
    یک نکته اونم اینکه شما میتونید data Models های بیشتر در Peach Pit.
    اگر چه ما در هدف خود فقط بر روی یک دستور فکوس می کنیم. ولی شما باید برای هر کامند نرم افزار آسیب پذیر یک Data Model داشته باشید.

    State Model

    در قسمت بعد ما State Model رو داریم. State Model به طور ساده به Peach میگه که چطور رفتار کنه از آن رو این یک قسمت برای تعاون(ارتباط) با پروتکل هایی است که سعی بر فاز کردنشون دارم.State Model شامل میشه یک یا بیشتر State ها که شامل یک یا چند Actions هستند که طراحی میکنه دقیقا گام هایی رو که Peach باید هنگام عمل فازینگ انجام بده.آیا Peach نیاز داره به بپذیره یک خروجی رو از یک Network Connection قبل از تامین کردن ورودی ها؟ عمل شما این است که باید آن را Model کنید. فقط این نیست، اما اگر شما قبول کنید خروجی ها رو ، شما نیاز دارید که به Peach بگید که خروجی چه شکلی خواهد بود در فرم Data Model. اگر یک عمل فازینگ رو بری روی یک فایل(File Format) انجام میدهید، شما مجبور خواهید بود که به فازر بگید که فایل رو باز کنه، اطلاعات فازینگ رو بنویسه و فایل رو ببنده.دوباره چون سرور آسیب پذیر ما یک برنامه ساده است پس State Model ما شامل یک Action ورودی برای یک پیام خوش آمدید اولیه باشه، و عمل خروجی ما اینکه اطلاعات فازینگ Data Model رو بفرسته، و عمل ورودی دیگر ما برای دریافت خروجی تایید شده از سرور آسیب پذیر اگر که قبلش کرش نکرده باشه!

    Agents

    در هنگام فازینگ، یک کاری رو شما باید انجام بدید اونم شروع Peach در حالت Agent مد هست. این agent اجرا خواهد کرد برنامه ای رو که شما سعی در فاز کردنش دارید و یک دیباگر که منیتور میکنه نرم افزار رو و همچنین مسئوله برای شناسایی کرش ها و موارد که پیش میاد رو یادداشت میکنه. Agents میتونه یک Tricky thing باشه برای کانفیگ کردن.

    Tests

    بالاخره، یک تست هم وجود داره. یک تست موجب این میشه که همه چیز باهم توضیح داده میشه و اینکه چگونه فازینگ اجرا خواهد شد. در اینجا باید تصمیم بگیرید که Agent و State Model چطور باید استفاده بشه. دوتا قسمت مهم دیگه ای هم وجود داره که هنگام تست باید تصمیم بگیرید که باید چی باشه! نویسندگان نرم افزار به ما میگن که Peach چگونه باید با نرم افزار ارتباط برقرار کرد. آیا ما با یک فایل ارتباط برقرار میکنیم یا یک TCP یا یک UDP? شما تعیین خواهید کرد!
    Logger جایی که شما به Peach میگید که کجا فایل لوگ رو بسازه!

    HTER Example

    در اینجا نشون میدیم که دستورات Peach Pit باید چه شکلی باشه:






    کد:
    <?xml version="1.0" encoding="utf-8"?>
    <Peach xmlns="http://peachfuzzer.com/2012/Peach" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://peachfuzzer.com/2012/Peach ../peach.xsd">
    
    <DataModel name="DataHTER">
    <String value="HTER " mutable="false" token="true"/>
    <String value=""/>
    <String value="\r\n" mutable="false" token="true"/>
    </DataModel>
    <StateModel name="StateHTER" initialState="Initial">
    <State name="Initial">
    <Action type="input" ><DataModel ref="DataResponse"/></Action>
    <Action type="output"><DataModel ref="DataHTER"/></Action>
    <Action type="input" ><DataModel ref="DataResponse"/></Action>
    </State>
    </StateModel>
    
    <DataModel name="DataResponse">
    <String value=""/>
    </DataModel>
    
    <Agent name="RemoteAgent" location="tcp://127.0.0.1:9001">
    <!-- Run and attach windbg to a vulnerable server. -->
    <Monitor class="WindowsDebugger">
    <Param name="CommandLine" value="C:\Documents and Settings\Administrator\Desktop\vulnserver\vulnserver.exe"/>
    <Param name="WinDbgPath" value="C:\Program Files\Debugging Tools for Windows (x86)" />
    </Monitor>
    </Agent>
    
    <Test name="TestHTER">
    <Agent ref="RemoteAgent"/>
    <StateModel ref="StateHTER"/>
    <Publisher class="TcpClient">
    <Param name="Host" value="127.0.0.1"/>
    <Param name="Port" value="9999"/>
    </Publisher>
    <Logger class="File">
    <Param name="Path" value="Logs"/>
    </Logger>
    </Test>
    </Peach>
    به صورت خیلی مختسر به شما میگیم که چی اینجا داریم. اول یک Data Model با اسم DataHTER وجود داره که به طور ساده توضیح میده که چطور میخواهیم دستور HTER خودمونو به سرور آسیب پذیر بفرستیم! ما همیشه رشته " HTER" (همراه با فاصله) آنگاه باتوجه به رشته هایی که ما ساختیم به Peach اجازه اینو میدیم که خودش تصمیم بگیره که چطور باید باشن دنباله اون هم یک r\ n\ قرار میدیم!
    بعد StateHTER State Model میگه که ما قبول میکنیم خروجی ها رو از سرور آسیب پذیر که آن شبیه DataResponse Data Model خواهد بود(که البته ما هنوز اون رو تعریف نکردیم. یک DataHTER Data Model میفرسته و بعد قبول میکنه بیشتر خروجی هایی رو که شبیه DataResponse Data Model هستند.
    حالا ما DataResponse Data Model رو تعریف میکنم. این صرفا یک رشته است و الکی هم نیست!
    در مرحله بعد ما Agent رو داریم. در اینجا ما به Peach Fuzzer نشان میدیم که چطور متصل به Peach Agent در ۱۲۷.۰.۰.۱ در لایه tcp پورت ۹۰۰۱ ما همچنین به اون میگیم که مانیتور کننده نرم افزار WindowsDebugger هست و ما نشونش میدیم که باید نرم افزار رو از طریق کامند لاین اجرا کنه و کجا قرار داره و اون وقت ما بهش میگیم که مانیتور کننده رو از کجا میتونه WinDbg رو پیدا کنه!
    خوب کم کم به آخرش نزدیک میشم! در اینجا ما میگیم که میخوایم استفاده کنیم از Agent به اسم "RemoteAgent" و انجام بده تست رو با پروتکلی که توضیح داده شده در State Model به اسم "StateHTER" که ما باید چاپ کنیم خروجی فاز شده رو با استفاده از TcpClient on IP address 127.0.0.1 at TCP port 9999. در آخر باید ذخیره کنیم یافته ها رو در زیر فولدری به اسم "Logs".

    Whew!

    Fuzzing

    حالا میریم به بخش خوبش. اول ما روشن کنیم Peach Agent و بهش بگیم که از کانال TCP استفاده کنه.
    Peach Agent منتظر خواهد ایستاد برای دستور عمل هایی که از Peach fuzzer میاد به سمتش و در نهایت مسئول این باشه که هر دفعه سرور آسیب پذیر رو اجرا کنه و شناسایی کنه اگر کرشی رخ داده.



    بعد ما Peach رو اجرا مکینم با استفاده از دستورات زیر:



    امیدوارم که هر دفعه که در یک چرخه شما باید ببینید خروجی هایی رو که از Peach command shell دریافت میکنید و اون باید شبیه عکس زیر باشه:



    این یک نشانه ای است که Peach ارسال میکنه اون مقدار رو که باعث کرش شدن شده! Peach باید ذخیره کنه ورودی که شما بعدا خواهید دید. Peach میتونه یک مدت زمان ببره تا وقتی که هدف شما انجام بشه یا هم هر وقت که خواستید میتونید اونو متوقف کنید!

    Examining the Output

    بیاید یک نگاه نزدیک تر داشته باشیم به اینکه ورودی چی رو در تکرار ۱۷۱ ام داشته که باعث کرش نرم افزار شده! در جایی که شما Peach رو اجرا کردین یک فولدر ایجاد شده با اسم Logs. در داخل اون شما باید یک فولدر داشته باشید که به وسیله اجرا کردن نرم افزار ایجاد شده. در داخل اون شما باید یک فولدر داشته باشید به اسم Faults.

    این فولدر در بردارنده اجراهایی که باعث ایجاد کرش شده! یکی از قابلیت هایی خوب Peach اینکه که وقتی شما یک برنامه رو با استفاده از WinDbg اجرا میکیند اون به صورت خودکار ماژول ها رو از ماکروسافت لود میکنه. MSEC Debugger Extensions, این تلاش میکنه برای اینکه مطمئن بشه آیا کرشی که رخ داده قابلیت اکسپلویت کردن رو داره یا نه. MSEC در حال حاظر در ورژن ۱.۶ میباشد اما Peach فقط با ورژن ۱.۰.۶ ارائه میشه پس امیدوارم که در آینده این رو عوض کنن.

    ما خوش شانس هستیم به خاطر اینکه در فولدر خطاهای فولدری میبینیم به اسم EXPLOITABLE_0x264d5172_0x00000000. فولدر رو که باز کنیم خواهیم دید که فولدر دیگری داخل آن است که به اسم تعداد تکرارهایی که باعث کرش شده:۱۷۱ در داخل فولدر ۱۷۱ چند فایل متنی وجود داره. احتمالا دوتای اونا جالب هستن به این سبب که اونا این دو فایل باشن: WindowsDebugEngine_StackTrace.txt و action_2_Output_Unknown Action 2.txt.

    WindowsDebugEngine_StackTrace.txt خیلی خوشحال کننده نیست فقط یک تریس از استک موقع کرش کردن سرور آسیب پذیر هست. اون فقط ارزشمنده که داخلش رو نگاه کنیم و موقعیت ثبات های رجیستر رو ببینیم و ببینم که به طور بالقوه کنترلی روی اونها داریم یا نه.

    فایل دیگری که جالب هست فایل action_2_Output_Unknown Action 2.txt هست که به ما نشون میده که چه چیزی به سرور آسیب پذیر فرستاده و باعث کرش شده.

    حال ما میدانیم که اگر HTER رو ۹۵۲۶ بار تکرار کنیم و بفرستیم باعث کرش سرور میشه و به طور بالقوه میشه اونو اکسپلویت کرد.


    Hooray!

    ما میتونیستم این کارها رو به نحو بهتری انجام بدیم! آیا ما میتونیم این عملیات رو به صورت ریموت انجام بدیم؟
    شاید من در باره اون موضوع هم چیزی نوشتم اگر از این پست استقبال بشه!
    اما چندین دسته از این آموزش ها وجود داره که شما میتونید ازش استفاده کنید
    تشکر فراموش نشه!
    به امید آموزش های بعد!
    [align=center]My Email: [email protected]
    [/align][align=left]mov problems,hell
    sub me,pain
    add me,love
    inc pleasure
    inc adrenaline
    push limits
    call hopeForAbetterTomorrow[/align]

  • #2
    RE: Fuzzing Vulnserver with Peach 3

    با سلام وتشکر 

    اگه لطف کنید یک ویدئو اموزشی تهیه و تو هربخش واسه دانلود بذارید کاربردی تر و مفیدتر میشه

    موفق باشید 

    یا حق

    نظر

    صبر کنید ..
    X