بهره برداری از قابلیت اطمینان سیستم تست
نویسنده:
اشفق انصاری

نقد و مرور:
رتبه:
5
بر آوریل 1, 2015
تاریخ و زمان آخرین اصلاح شده:فوریه 6, 2017

خلاصه:

بهره برداری از قابلیت اطمینان سیستم آزمون است توسعه یافته برای تعیین قابلیت اطمینان از یک نرم افزار بهره برداری با محاسبه تعداد ضربه از EIP = 0x41414141

معرفی

 
One of my friend was playing with “MS13-009” a پس از استفاده از رایگان آسیب پذیری در اینترنت اکسپلورر که منجر به اجرای کد از راه دور.

او از من خواست تا او را در نوشتن یک کمک قابل اعتماد بهره برداری برای این آسیب پذیری.

هنگامی که شروع کردم به نگاه کردن به آسیب پذیری, من متوجه شدم که این آسیب پذیری به دلیل این واقعیت است که بسیار وجود دارد غیر قابل اعتماد است پنجره کوچک بین آزاد و استفاده از شی آزاد. مهمتر, رایگان تنها زمانی رخ داد که اعدام همه SCRIPT بلوک تکمیل.

با توجه به این, ما تا به حال به در JScript از تکیه setTimeout() تابع به دوباره اختصاص شی آزاد.

مانند, وظیفه من بود به ارسال نامه قابل اعتماد برای این آسیب پذیری بهره برداری, آن دردناک برای راه اندازی شد اینترنت اکسپلورر تحت Windbg خودآموز و ثبت EIP ثبت نام ارزش هر زمان.

این وضعیت به من نا امید و شروع کردم به فکر که چرا یک اسکریپت کوچک است که آیا این کار ارسال نشده است.

بهره برداری از قابلیت اطمینان سیستم تست

 
پس, قابلیت اطمینان است با شمارش تعداد دفعاتی که بهره برداری تعیین قادر به کنترل است EIP با مورد نظر آدرس / ارزش ثبت نام.
این اسکریپت بسیار ساده برای ویندوز برای تعیین مقدار بهره برداری است قابل اعتماد. من استفاده کرده اند CDB.EXE برای تشخیص تصادف و ضبط دولت ثبت.

کد منبع

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
# -*- برنامه نویسی: UTF-8 -*-
"""

 /$$$$$$$$ /$$$$$$$  /$$$$$$$$ /$$$$$$
| $$_____ /| $$__ $$|__ $$ __ // $$ __ $$
| $$      | $$  \ $$   | $$  | $$  \__ /
| $$$$$   | $$$$$$$/   | $$  |  $$$$$$
| $$__ / | $$__ $$ | $$   \____ $$
| $$      | $$  \ $$   | $$   /$$  \ $$
| $$$$$$$$| $$  | $$   | $$  |  $$$$$$/
|________ /|__ /|__ / |__ / \______ /


حق طبع و نشر (C) 2010-2015 HackSys تیم

این فایل بخشی از بهره برداری از تست قابلیت اطمینان است
سیستم.

بهره برداری از قابلیت اطمینان سیستم تست استفاده می شود برای تست
قابلیت اطمینان از هدف قرار دادن EIP = 0x41414141. این سیستم
در پیدا کردن چقدر بهره برداری هدف قابل اعتماد است.

مشاهده فایل مجوز برای اجازه کپی.

نویسنده : اشفق انصاری
تماس: ashfaq_ansari1989[در]hotmail.com
سایت اینترنتی: HTTP://hacksys.vfreaks.com

"""


__author__ = 'اشفق انصاری'
__version__ = '1.0'

واردات os
واردات سیستم
واردات shutil
واردات فرزند
واردات نخ کشی


کلاس ExploitReliabilityTestingSystem(هدف):
    """
    این کلاس قلب بهره برداری از قابلیت اطمینان است
    سیستم تست.
    """


    دف __init__(خود, CDB, ورود به سیستم, برنامه, استدلال=''):
        """
        این سازنده برای ارتس است

        :متوقف CDB: مسیر cdb.exe
        :ورود و پرم: ورود به سیستم مسیر
        :برنامه و پرم: برنامه برای راه اندازی
        :استدلال و پرم: استدلال برنامه
        """

        # اعتبار اگر CDB, ورود به سیستم و برنامه وجود دارد
        اگر نه os.مسیر.وجود دارد(CDB):
            بالا بردن AttributeError('لطفا مسیر CDB اعتبار')
        الیف نه os.مسیر.وجود دارد(ورود به سیستم):
            امتحان:
                os.mkdir(os.مسیر.dirname(ورود به سیستم))
            جز OSERROR:
                بالا بردن AttributeError('لطفا مسیر ورود به سیستم اعتبار')
        الیف نه os.مسیر.وجود دارد(برنامه):
            بالا بردن AttributeError('لطفا مسیر برنامه اعتبار')

        خود.CDB = CDB
        خود.ورود به سیستم = ورود به سیستم
        خود.برنامه = برنامه
        خود.استدلال = استدلال
        خود.روند = هیچ کدام

    دف دویدن(خود, FILE_PATH, فاصله=60):
        """
        این استفاده می شود برای اجرای فرایند با فاصله
        با استفاده از نخ

        :FILE_PATH و پرم: فایل مسیر برای باز کردن
        :ایست و پرم: ایست در ثانیه
        """

        # اعتبار استدلال و پارامتر فاصله
        اگر FILE_PATH است هیچ کدام:
            بالا بردن AttributeError('لطفا برنامه FILEPATH اعتبار')
        الیف فاصله است هیچ کدام و نوع(فاصله) == خیابان:
            بالا بردن AttributeError('لطفا متغیر اعتبار')

        دف __launch_process():
            # آماده استدلال روند
            process_args = خود.CDB + '' + '-G -G -o -c & quot؛ را .logopen' + خود.ورود به سیستم + \
                           ';تحقیق;.logclose;پرسش" و & quot؛ ' + خود.برنامه + '" ' + خود.استدلال + \
                           '' + FILE_PATH

            خود.روند = فرزند.پاپ(process_args,
                                            STDIN=فرزند.لوله,
                                            دهید.=فرزند.لوله,
                                            stderr=فرزند.لوله)
            # منتظر روند به خروج
            خود.روند.ارتباط()

        # آماده سازی موضوع برای اجرای فرایند
        process_thread = نخ کشی.نخ(هدف=__launch_process)

        # شروع موضوع
        process_thread.شروع()

        # در حال حاضر پیوستن به موضوع
        process_thread.پیوستن(فاصله=فاصله)

        # بررسی کنید که آیا موضوع هنوز زنده است
        اگر process_thread.is_alive():
            # به نظر می رسد که این روند به سقوط نیست
            # اجازه دهید روند کشتن
            خود.روند.خاتمه دادن()

            # اجازه دهید موضوع کودک خاتمه
            process_thread.پیوستن()

    دف is_crash_reliable(خود, EIP):
        """
        این استفاده می شود برای بررسی اگر تصادف قابل اعتماد بود
        با چک کردن EIP از ورود تصادف

        :پرم EIP: EIP ثبت نام ارزش برای مقایسه
        :برگشت: درست / غلط
        """

        # اعتبار EIP به عنوان رشته
        اگر نوع(EIP) != خیابان:
            بالا بردن AttributeError('لطفا EIP اعتبار')

        ورود به سیستم = باز(خود.ورود به سیستم).خواندن()

        اگر 'EIP ={0}'.قالب(EIP) به ورود به سیستم:
            برگشت درست
        دیگر:
            برگشت غلط


اگر __name__ == "__main__":
    # ثابت
    HEADER = '' '

      /$$$$$$$$ /$$$$$$$  /$$$$$$$$ /$$$$$$
     | $$_____ /| $$__ $$|__ $$ __ // $$ __ $$
     | $$      | $$  \ $$   | $$  | $$  \__ /
     | $$$$$   | $$$$$$$/   | $$  |  $$$$$$
     | $$__ / | $$__ $$ | $$   \____ $$
     | $$      | $$  \ $$   | $$   /$$  \ $$
     | $$$$$$$$| $$  | $$   | $$  |  $$$$$$/
     |________ /|__ /|__ / |__ / \______ /

           بهره برداری از سیستم قابلیت اطمینان
                 نسخه: {0}

    '' '
.قالب(__version__)

    # لحن خوب این ارزش ها
    MAX_RUN = 10
    متغیر = 60
    EIP = '41414141'
    FILE_PATH = 'HTTP://localhost را:8000/exploit.html '
    CDB_PATH = 'C:\\برنامه فایل\\ابزار اشکال زدایی برای ویندوز (معماری x86)\\cdb.exe '
    PROGRAM_PATH = 'C:\\برنامه فایل\\اینترنت اکسپلورر\\iexplore.exe در '
    PROGRAM_ARGS = ''
    LOG_PATH = 'C:\\سیاههها\' + os.path.basename(PROGRAM_PATH) + '.ورود به سیستم'

    reliable_crash_count = 0
    قابلیت اطمینان = 0

    # جزئیات هدف چاپ
    HEADER چاپ
    چاپ
هدف EIP: {0}'.format(EIP)
    چاپ
هدف کاربرد: {0}\N'.format(os.path.basename(PROGRAM_PATH))

    # ایجاد نمونه از بهره برداری از قابلیت اطمینان
    # کلاس TestingSystem
    ارتس = ExploitReliabilityTestingSystem(CDB = CDB_PATH,
                                           ورود به سیستم = LOG_PATH,
                                           برنامه = PROGRAM_PATH,
                                           استدلال = PROGRAM_ARGS)

    # اجرای برنامه و تعداد تصادفات
    برای من در محدوده(0, MAX_RUN):
        # اجرای برنامه هدف
        erts.run(FILE_PATH = FILE_PATH, فاصله = زمان)

        # در حال حاضر بررسی در صورتی که سقوط قابل اعتماد است
        اگر erts.is_crash_reliable(EIP EIP =):
            reliable_crash_count = 1

        # در حال حاضر تعیین بهره برداری قابلیت اطمینان
        قابلیت اطمینان = (reliable_crash_count * 100) / MAX_RUN

        # چاپ وضعیت بر روی صفحه نمایش
        sys.stdout.write("\تحقیق[{0}] قابلیت اطمینان زنده رتبه: {1}%quot &؛ .format(من + 1, قابلیت اطمینان))
        sys.stdout.flush()

    # حذف دایرکتوری ورود
    shutil.rmtree(مسیر = os.path.dirname(LOG_PATH))

    چاپ
\N'
    چاپ
بهره برداری از قابلیت اطمینان رتبه: {0}%'.format(قابلیت اطمینان)

 

سلب مسئولیت: لطفا کد منبع ارائه شده در اینجا استفاده کنید. آخرین نسخه همیشه می توانید در مخزن گیتهاب داده شده در زیر یافت می شود.

 

در عمل

 

بهره برداری از قابلیت اطمینان سیستم تست های انجام شده
بهره برداری از قابلیت اطمینان سیستم تست در حال اجرا

 

بهره برداری از سیستم تست قابلیت اطمینان در گیتهاب

 


من امیدوارم که این ممکن است مفید باشد به بهره برداری توسعه دهندگان که می خواهند برای تست قابلیت اطمینان از سوء استفاده از آنها. لطفا یک موضوع افزایش اگر شما هر گونه اشکال و یا پیدا کردن اگر شما هر گونه پیشنهاد بهبود.

12,424 نمایش کل, 19 بازدید های امروز

دو زبانه زیر محتوای زیر تغییر.

اشفق انصاری

محقق امنیتی
اشفق انصاری بنیانگذار است HackSys تیم کد نام "Panthera". او یک محقق امنیتی با تجربه در جنبه های مختلف امنیت اطلاعات می باشد. او نویسنده "HackSys افراطی درایور آسیب پذیر" و "شل کد از مرگ". او همچنین نوشته شده است و whitepapers مختلف در سطح پایین بهره برداری نرم افزار منتشر شده. علاقه او نهفته در هسته "بهره برداری سطح پایین", "مهندسی معکوس", "تجزیه و تحلیل برنامه" و "ترکیبی fuzzing در". او fanboy هوش مصنوعی و یادگیری ماشین است. او به فصل برای است تهی پونا.

پاسخ دهید لغو پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخشهای موردنیاز علامتگذاری شدهاند *