Explotar Confiabilidad Testing System
Autor:
Ashfaq Ansari

Comentado por:
Clasificación:
5
En Abril 1, 2015
Última modificación:Febrero 6, 2017

Resumen:

Explotar Confiabilidad sistema de prueba se desarrolló para determinar la fiabilidad de un software de explotar mediante el cálculo de la cuenta de golpear EIP = 0x41414141

Introducción

 
One of my friend was playing with “MS13-009” un Utilice Después gratuito vulnerabilidad en Internet Explorer lo que conduce a Ejecución remota de código.

Él me pidió que le ayudara a escribir una fiable exploit para esta vulnerabilidad.

Una vez que me puse a buscar en la vulnerabilidad, Me di cuenta de que esta vulnerabilidad no es confiable debido al hecho de que hay una muy pequeña ventana entre el libre y el uso del objeto liberado. Más importante, la libre sólo ocurría cuando la ejecución de todo el GUIÓN bloques se completan.

Debido a esta, teníamos que depender de de JScript setTimeout() función para reasignar el objeto liberado.

Como, mi tarea era escribir una fiable exploit para esta vulnerabilidad, fue doloroso para lanzar Internet Explorer bajo WinDbg y registrar la EIP registrarse valor cada vez.

Esta situación hizo que me frustra y me puse a pensar por qué no escribir un pequeño script que hace esta tarea.

Explotar Confiabilidad Testing System

 
Así, la fiabilidad se determina contando el número de veces que el exploit es capaz de controlar EIP registrarse en la dirección / valor deseado.
Esta un script muy simple para Ventanas para determinar la cantidad de un exploit es seguro. He utilizado Cdb.exe para detectar el accidente y registrar el estado registros.

Código Fuente

 

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
# -*- codificación: UTF-8 -*-
"""

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


Derechos de autor (C) 2010-2015 HackSys equipo

Este archivo es parte de Exploit Pruebas de confiabilidad
Sistema.

Explotar Confiabilidad sistema de prueba se utiliza para probar
fiabilidad de golpear EIP = 0x41414141. Este sistema de
está dirigido a la búsqueda de la cantidad de un exploit es confiable.

Vea el archivo de "licencia" para el permiso de copia.

Autor : Ashfaq Ansari
Contacto: ashfaq_ansari1989[en]hotmail.com
Sitio web: http://hacksys.vfreaks.com

"""


__author__ = 'Ashfaq Ansari'
__version__ = '1.0'

importar la
importar sis
importar shutil
importar subproceso
importar enhebrar


clase ExploitReliabilityTestingSystem(objeto):
    """
    Esta clase es el corazón de Exploit Confiabilidad
    Testing System.
    """


    def __init__(yo, cdb, log, programa, args=''):
        """
        Este es el constructor para ERTS

        :detener cdb: camino cdb.exe
        :registro param: ruta de registro
        :programa param: programa para lanzar
        :args param: argumentos del programa
        """

        # validar si cdb, registro y existe programa
        si no la.camino.existe(cdb):
            elevar AttributeError('Por favor, valide camino CDB')
        elif no la.camino.existe(log):
            intentar:
                la.mkdir(la.camino.dirname(log))
            excepto OSError:
                elevar AttributeError('Por favor, valide ruta de registro')
        elif no la.camino.existe(programa):
            elevar AttributeError('Por favor, valide ruta del programa')

        yo.cdb = cdb
        yo.log = log
        yo.programa = programa
        yo.args = args
        yo.proceso = Ninguno

    def ejecutar(yo, vía_acceso_archivo, tiempo de espera=60):
        """
        Esto se utiliza para ejecutar el proceso con tiempo de espera
        usando threading

        :vía_acceso_archivo param: presentar camino para abrir
        :timeout param: Tiempo de espera en segundos
        """

        # validar argumentos y parámetros de tiempo de espera
        si vía_acceso_archivo es Ninguno:
            elevar AttributeError('Por favor, valide FILEPATH programa')
        elif tiempo de espera es Ninguno y tipo(tiempo de espera) == er:
            elevar AttributeError('Por favor, valide TIMEOUT')

        def __launch_process():
            # preparar el proceso de argumento
            process_args = yo.cdb + '' + '-g -G -o -c & Quot; .logopen' + yo.log + \
                           ';r;.logclose;q" & Quot; ' + yo.programa + '" ' + yo.args + \
                           '' + vía_acceso_archivo

            yo.proceso = subproceso.El Papa(process_args,
                                            stdin=subproceso.TUBO,
                                            stdout=subproceso.TUBO,
                                            stderr=subproceso.TUBO)
            # esperar a que el proceso para salir
            yo.proceso.comunicarse()

        # preparar el hilo para ejecutar el proceso
        process_thread = enhebrar.Hilo(objetivo=__launch_process)

        # iniciar el hilo
        process_thread.comienzo()

        # ahora unirse al hilo
        process_thread.unirse(tiempo de espera=tiempo de espera)

        # comprobar si el hilo sigue vivo
        si process_thread.is_alive():
            # Parece que el proceso no se había estrellado
            # vamos a matar el proceso
            yo.proceso.terminar()

            # vamos a terminar la hebra niño
            process_thread.unirse()

    def is_crash_reliable(yo, EIP):
        """
        Esto se utiliza para comprobar si el accidente era fiable
        marcando la EIP desde el registro de bloqueo

        :EIP param: EIP regístrese valor a comparar
        :volver: Verdadero / Falso
        """

        # validar EIP como cadena
        si tipo(EIP) != er:
            elevar AttributeError('Por favor, valide EIP')

        log = abrir(yo.log).leer()

        si 'EIP ={0}'.formato(EIP) en log:
            volver Verdadero
        más:
            volver Falso


si __name__ == "__main__":
    # constantes
    CABECERA = '' '

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

           Exploit System Confiabilidad
                 Versión: {0}

    '' '
.formato(__version__)

    # afinar estos valores
    Max_racha = 10
    SE ACABÓ EL TIEMPO = 60
    EIP = '41414141'
    FILE_PATH = 'Http://localhost:8000/exploit.html '
    CDB_PATH = 'C:\\Archivos de programa\\Herramientas de depuración para Windows (x86)\\cdb.exe '
    Vía_acceso_programa = 'C:\\Archivos de programa\\Internet Explorer\\iexplore.exe "
    PROGRAM_ARGS = ''
    Log_path = 'C:\\Registros\' + os.path.basename(Vía_acceso_programa) + '.log'

    reliable_crash_count = 0
    fiabilidad = 0

    # detalles del objetivo de impresión
    CABECERA impresión
    print '
Target EIP: {0}'.formato(EIP)
    print '
Aplicación de destino: {0}\n'.formato(os.path.basename(Vía_acceso_programa))

    # crear la instancia de Exploit Confiabilidad
    # Clase TestingSystem
    yertos = ExploitReliabilityTestingSystem(cdb = CDB_PATH,
                                           log = log_path,
                                           programa = vía_acceso_programa,
                                           args = PROGRAM_ARGS)

    # ejecutar la aplicación y contar el número de accidentes
    for i in range(0, Max_racha):
        # ejecutar la aplicación de destino
        erts.run(vía_acceso_archivo = FILE_PATH, timeout = TIMEOUT)

        # Ahora compruebe si el accidente es confiable
        si erts.is_crash_reliable(EIP EIP =):
            reliable_crash_count = 1

        # Ahora determine el exploit fiabilidad
        fiabilidad = (reliable_crash_count * 100) / Max_racha

        # imprimir el estado en la pantalla
        sys.stdout.write("\r[{0}] Vivo Confiabilidad Clasificación: {1}%& Quot; .formato(yo + 1, confiabilidad))
        sys.stdout.flush()

    # eliminar el directorio de registro
    shutil.rmtree(path = os.path.dirname(Log_path))

    print '
\n'
    print '
Explotar Confiabilidad Clasificación: {0}%'.formato(confiabilidad)

 

Renuncia: Por favor, no utilice el código fuente proporcionado aquí. La última versión siempre se puede encontrar en el repositorio Github dada abajo.

 

En Acción

 

Exploit Completado Confiabilidad Testing System
Explotar la seguridad de ejecución Testing System

 

Exploit System Pruebas de confiabilidad en GitHub

 


Espero que esto puede ser útil para explotar los desarrolladores que quieran probar la fiabilidad de sus hazañas. Por favor, levanten un problema si usted encuentra algún error o si usted tiene alguna propuesta de mejora.

12,434 visitas totales, 29 vistas hoy

Las dos fichas siguientes cambian el contenido a continuación.

Ashfaq Ansari

Investigador de Seguridad
Ashfaq Ansari es el fundador de HackSys equipo cuyo nombre en código "Panthera". Él es un investigador de seguridad con experiencia en diversos aspectos de la seguridad de la información. Es autor "HackSys Extreme Vulnerable Conductor" y "Shellcode de la Muerte". También ha escrito y publicado varios documentos técnicos sobre la explotación de software de bajo nivel. Su interés principal radica en "Bajo Explotación Nivel", "Ingeniería Inversa", "Programa de Análisis" y "Híbrido Fuzzing". Él es un fanático de la Inteligencia Artificial y Aprendizaje Automático. Él es el principal capítulo para nula Pune.

Deja un comentario

Su dirección de correo electrónico no será publicada. Los campos necesarios están marcados *