Exploit надежности система тестирования
Автор:
Ашфак Ансари

Пересмотрены:
Рейтинг:
5
На Апрель 1, 2015
Последние изменения:Февраль 6, 2017

Резюме:

Exploit надежности система тестирования разработана для определения надежности программного обеспечения использовать путем расчета удар подсчет EIP = 0x41414141

Введение

 
Один мой знакомый играл с «MS13-009” a Используйте После Бесплатно Уязвимость в Интернет эксплорер что приводит к Удаленное выполнение кода.

Он попросил меня помочь ему в письменном виде надежным использовать для этой уязвимости.

После того, как я начал искать в уязвимости, Я понял, что эта уязвимость является ненадежным из-за того, что есть очень Маленькое окно между свободными и использования освобожденной объекта. Что еще более важно, бесплатно произошло, когда выполнение всех СЦЕНАРИЙ блоки получить завершена.

В связи с этим, мы должны были полагаться на JScript-х setTimeout() Функция перераспределения освобожденный объект.

Как, Моя задача в том, чтобы написать надежный использовать для этой уязвимости, было больно, чтобы начать Интернет эксплорер под WinDbg и записывать EIP Значение регистра каждый раз,.

Эта ситуация заставила меня разочарование, и я начал думать, почему не написать небольшой скрипт, который делает эту задачу.

Exploit надежности система тестирования

 
Так, Надежность определяется путем подсчета количества раз эксплуатируют имеет возможность контролировать EIP зарегистрироваться нужный адрес / значение.
Это очень простой скрипт для ОС Windows чтобы определить, сколько эксплойт надежный. Я использовал 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 команды

Этот файл является частью Exploit испытания на надежность
Система.

Exploit Надежность Testing System используется для проверки
Надежность удара EIP = 0x41414141. Эта система
направлена ​​на поиск, сколько использовать надежный.

Смотрите файл "License" для разрешения копирования.

Автор : Ашфак Ансари
Контакт: ashfaq_ansari1989[на]hotmail.com
Сайт: HTTP://hacksys.vfreaks.com

"""


__author__ = 'Ашфак Ансари'
__version__ = '1,0'

импортировать os
импортировать системы
импортировать shutil
импортировать подпроцесс
импортировать резьбы


класс ExploitReliabilityTestingSystem(объект):
    """
    Этот класс является сердцем Exploit надежность
    Система тестирования.
    """


    Def __init__(само, ЦКБ, журнал, программа, аргументы=''):
        """
        Это конструктор для ЭРЦ

        :остановить CDB: cdb.exe путь
        :Журнал парам: войти путь
        :парам программа: Программа для запуска
        :Param аргументы: Аргументы программы
        """

        # проверить, если CDB, войти и программа существует
        если не os.путь.существует(ЦКБ):
            поднимать AttributeError("Пожалуйста, подтвердите CDB путь")
        Элиф не os.путь.существует(журнал):
            стараться:
                os.MkDir(os.путь.имя_директории(журнал))
            кроме OSError:
                поднимать AttributeError("Пожалуйста, подтвердите Путь к журналу")
        Элиф не os.путь.существует(программа):
            поднимать AttributeError("Пожалуйста, подтвердите Программа Путь")

        само.ЦКБ = ЦКБ
        само.журнал = журнал
        само.программа = программа
        само.аргументы = аргументы
        само.процесс = Ни один

    Def работать(само, file_path, Тайм-аут=60):
        """
        Это используется, чтобы запустить процесс с тайм-
        с помощью резьбы

        :парам file_path: путь к файлу, чтобы открыть
        :парам тайм-аут: Тайм-аут в секундах
        """

        # проверить аргументы и параметр тайм-аута
        если file_path является Ни один:
            поднимать AttributeError("Пожалуйста, подтвердите программы FILEPATH")
        Элиф Тайм-аут является Ни один и тип(Тайм-аут) == улица:
            поднимать AttributeError("Пожалуйста, подтвердите ТАЙМОУТ")

        Def __launch_process():
            # подготовить аргумент процесса
            process_args = само.ЦКБ + '' + '-g -g -O -c & Quot; .logopen " + само.журнал + \
                           ';R;.logclose;д" И Quot; ' + само.программа + '" ' + само.аргументы + \
                           '' + file_path

            само.процесс = подпроцесс.Папа(process_args,
                                            стандартного ввода=подпроцесс.PIPE,
                                            STDOUT=подпроцесс.PIPE,
                                            STDERR=подпроцесс.PIPE)
            # подождите процесс выхода
            само.процесс.общаться()

        # подготовить нить для запуска процесса
        process_thread = резьбы.Нить(цель=__launch_process)

        # запустить поток
        process_thread.начало()

        # Теперь присоединиться нить
        process_thread.присоединиться(Тайм-аут=Тайм-аут)

        # проверить, если нить еще жив
        если process_thread.is_alive():
            # Кажется, что процесс не завершился
            # давайте убить процесс
            само.процесс.прекратить()

            # давайте прекратить дочерний поток
            process_thread.присоединиться()

    Def is_crash_reliable(само, EIP):
        """
        Это используется, чтобы проверить, если авария была надежным
        проверив EIP из журнала аварии

        :EIP парам: EIP значение регистра для сравнения
        :возврат: Верно / Неверно
        """

        # проверить EIP в виде строки
        если тип(EIP) != улица:
            поднимать AttributeError("Пожалуйста, подтвердите EIP ')

        журнал = открыть(само.журнал).читать()

        если "EIP ={0}'.формат(EIP) в журнал:
            возврат Верно
        еще:
            возврат Ложный


если __name__ == "__main__":
    # константы
    ЗАГОЛОВОК = '' '

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

           Exploit надежности системы
                 Версия: {0}

    '' '
.формат(__version__)

    # точно подстроить эти параметры
    MAX_RUN = 10
    ВРЕМЯ ВЫШЛО = 60
    EIP = "41414141"
    FILE_PATH = 'HTTP://локальный:8000/exploit.html "
    CDB_PATH = "С:\\Program Files\\Средства отладки для Windows, (x86)\\cdb.exe "
    PROGRAM_PATH = "С:\\Program Files\\Интернет эксплорер\\iexplore.exe "
    PROGRAM_ARGS = ''
    Log_path = "С:\\Журналы\' + os.path.basename(PROGRAM_PATH) + '.журнал'

    reliable_crash_count = 0
    Надежность = 0

    # Целевые распечатать Подробности
    Печатать заголовки страниц
    Печать "
Цель EIP: {0}".format(EIP)
    Печать "
Конечное приложение: {0}\N".format(os.path.basename(PROGRAM_PATH))

    # создать экземпляр Exploit надежность
    # Класс TestingSystem
    Эртц = ExploitReliabilityTestingSystem(ЦКБ = CDB_PATH,
                                           войти = log_path,
                                           Программа = PROGRAM_PATH,
                                           аргументы = PROGRAM_ARGS)

    # запустите приложение и подсчитать количество аварий
    для I в диапазоне(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("\R[{0}] Живая балл: {1}%И Quot; .format(я + 1, надежность))
        sys.stdout.flush()

    # удалить каталог журнала
    shutil.rmtree(Путь = os.path.dirname(Log_path))

    Печать "
\N'
    Печать "
Exploit Рейтинг надежности: {0}%".format(надежность)

 

Отказ: Пожалуйста, не используйте исходный код, предоставленный здесь. Последняя версия всегда можно найти в репозитории Github, приведенной ниже.

 

В ситуации

 

Exploit Надежность Testing System Завершен
Exploit Надежности системы, установленной

 

Exploit надежности тестирования по GitHub

 


Я надеюсь, что это может быть полезно использовать разработчикам, которые хотят проверить надежность их подвигах. Пожалуйста, поднимите вопрос, если вы обнаружили ошибку, или если у вас есть какие-либо предложения улучшения.

12,433 просмотров всего, 28 просмотров сегодня

Следующие две вкладки изменять содержимое ниже.

Ашфак Ансари

Исследователь безопасности
Ашфак Ансари является основателем HackSys команды кодовым названием "Panthera". Он исследователь безопасности с опытом работы в различных аспектах информационной безопасности. Он является автором "HackSys Экстремальные Уязвимые водителя" и "Shellcode смерти". Он также написал и опубликовал различные технические документы на эксплуатацию программного обеспечения низкого уровня. Его основной интерес заключается в "Низкий уровень эксплуатации", "Обратное проектирование", "Анализ программы" и "Гибридная Фаззинг". Он фанат искусственного интеллекта и машинного обучения. Он глава свинец для нулевой Пуне.

Оставить комментарий

Ваш электронный адрес не будет опубликован. Обязательные поля помечены *