Exploit Betrouwbaarheid Testing System
Auteur:
Ashfaq Ansari

Beoordeeld door:
Rating:
5
Op April 1, 2015
Laatst gewijzigd:Februari 6, 2017

Overzicht:

Exploit Betrouwbaarheid Testing System is ontwikkeld om de betrouwbaarheid van een software bepalen misbruiken door te berekenen hit telling van EIP = 0x41414141

Introductie

 
One of my friend was playing with “MS13-009” een Gebruik Na Gratis kwetsbaarheid in Internet Explorer wat leidt tot Uitvoering van externe code.

Hij vroeg me om hem te helpen bij het schrijven van een betrouwbare exploit voor dit beveiligingslek.

Zodra ik ging op zoek naar de kwetsbaarheid, Ik realiseerde me dat dit beveiligingslek onbetrouwbaar is te wijten aan het feit dat er een zeer klein venster tussen gratis en het gebruik van de vrijgekomen object. Belangrijker, de gratis pas gebeurde toen de uitvoering van alle SCRIPT blokken krijgen afgerond.

Door deze, we moesten vertrouwen op jscript's setTimeout() functie om de bevrijde object herverdelen.

Als, Mijn taak was om te schrijven een betrouwbare exploit voor dit beveiligingslek, het was pijnlijk om te starten Internet Explorer onder WinDbg en noteer de EIP registreren waarde elke keer.

Deze situatie maakte me gefrustreerd en ik begon te denken waarom niet een klein script dat deze taak doet schrijven.

Exploit Betrouwbaarheid Testing System

 
Dus, de betrouwbaarheid wordt bepaald door het tellen van het aantal keren dat de exploit is in staat om de controle EIP registreren bij het gewenste adres / waarde.
Dit is een zeer eenvoudig script voor Windows om te bepalen hoeveel een exploit is betrouwbaar. Ik heb gebruikt CDB.EXE aan de crash detecteren en de registers staat.

Source Code

 

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
# -*- codering: UTF-8 -*-
"""

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


Auteursrecht (C) 2010-2015 HackSys Team

Dit bestand is onderdeel van Exploit Betrouwbaarheidstesten
Systeem.

Exploit Betrouwbaarheid Testing System wordt gebruikt om te testen
betrouwbaarheid van het raken van EIP = 0x41414141. Dit systeem
is gericht op het vinden van hoeveel een exploit is betrouwbaar.

Zie het bestand "vergunning" voor het kopiëren toestemming.

Auteur : Ashfaq Ansari
Contact: ashfaq_ansari1989[bij]hotmail.com
Website: http://hacksys.vfreaks.com

"""


__author__ = 'Ashfaq Ansari'
__version__ = '1.0'

importeren de
importeren sys
importeren shutil
importeren deelproces
importeren threading


klasse ExploitReliabilityTestingSystem(object):
    """
    Deze klasse is het hart van Exploit Betrouwbaarheid
    Testing System.
    """


    def __in het__(zelf, cdb, logboek, programma, args=''):
        """
        Dit is de aannemer voor ERTS

        :stoppen cdb: cdb.exe pad
        :param log: log pad
        :param programma: programma te starten
        :param args: argumenten programma
        """

        # valideren als cdb, aanmelden en programma bestaat
        indien niet de.pad.bestaat(cdb):
            verhogen AttributeError('Gelieve valideren CDB pad')
        elif niet de.pad.bestaat(logboek):
            proberen:
                de.mkdir(de.pad.dirname(logboek))
            behalve OSERROR:
                verhogen AttributeError('Gelieve valideren LOG pad')
        elif niet de.pad.bestaat(programma):
            verhogen AttributeError('Gelieve valideren PROGRAM pad')

        zelf.cdb = cdb
        zelf.logboek = logboek
        zelf.programma = programma
        zelf.args = args
        zelf.procede = Geen

    def lopen(zelf, FILE_PATH, timeout=60):
        """
        Dit wordt gebruikt om het proces timeout draaien
        gebruik van threading

        :param FILE_PATH: bestand pad te openen
        :param timeout: timeout in seconden
        """

        # valideren args en time-out parameter
        indien FILE_PATH is Geen:
            verhogen AttributeError('Gelieve valideren programma BESTANDSPAD')
        elif timeout is Geen en type(timeout) == Art:
            verhogen AttributeError('Gelieve valideren TIME-OUT')

        def __launch_process():
            # het proces argument voor te bereiden
            process_args = zelf.cdb + '' + '-g -G -o -c & Quot; .logopen' + zelf.logboek + \
                           ';r;.logclose;q" & Quot; ' + zelf.programma + '" ' + zelf.args + \
                           '' + FILE_PATH

            zelf.procede = deelproces.De paus(process_args,
                                            stdin=deelproces.PIPE,
                                            stdout=deelproces.PIPE,
                                            stderr=deelproces.PIPE)
            # wacht tot het proces te verlaten
            zelf.procede.communiceren()

        # bereiden de draad om het proces in werking
        process_thread = threading.Draad(doel=__launch_process)

        # start de draad
        process_thread.begin()

        # nu lid worden van de draad
        process_thread.toetreden(timeout=timeout)

        # controleren of de draad nog in leven is
        indien process_thread.is_alive():
            # lijkt erop dat het proces niet crashen
            # laten we doden het proces
            zelf.procede.beëindigen()

            # Laten we eindigen het kind thread
            process_thread.toetreden()

    def is_crash_reliable(zelf, EIP):
        """
        Dit wordt gebruikt om te controleren of de crash was betrouwbaar
        door het controleren van de EIP van de crash log

        :EIP param: EIP registreren waarde om te vergelijken
        :terugkeren: Waar Onwaar
        """

        # valideren EIP als touwtje
        indien type(EIP) != Art:
            verhogen AttributeError('Gelieve valideren EIP')

        logboek = open(zelf.logboek).lezen()

        indien 'EIP ={0}'.formaat(EIP) in logboek:
            terugkeren Waar
        anders:
            terugkeren Vals


indien __name__ == "__main__":
    # constanten
    HEADER = '' '

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

           Exploit betrouwbaarheid van het systeem
                 Versie: {0}

    '' '
.formaat(__version__)

    # fine-tunen van deze waarden
    MAX_RUN = 10
    TIME OUT = 60
    EIP = '41414141'
    FILE_PATH = Http://localhost:8000/exploit.html '
    CDB_PATH = C:\\Program Files\\Debugging Tools for Windows (x86)\\cdb.exe '
    PROGRAM_PATH = C:\\Program Files\\Internet Explorer\\iexplore.exe '
    PROGRAM_ARGS = ''
    Log_path = C:\\Logs\' + os.path.basename(PROGRAM_PATH) + '.logboek'

    reliable_crash_count = 0
    betrouwbaarheid = 0

    # afdruk prismadetails
    Print Header
    print '
Target EIP: {0}'.format(EIP)
    print '
Doel applicatie: {0}\n'.format(os.path.basename(PROGRAM_PATH))

    # maken het exemplaar van Exploit Betrouwbaarheid
    # TestingSystem klasse
    Erts = ExploitReliabilityTestingSystem(CDB = CDB_PATH,
                                           log = log_path,
                                           programma = PROGRAM_PATH,
                                           args = PROGRAM_ARGS)

    # de applicatie en tel het aantal ongevallen
    voor i in range(0, MAX_RUN):
        # lopen het doel applicatie
        erts.run(FILE_PATH = FILE_PATH, timeout = TIME-OUT)

        # nu controleren of de crash is betrouwbaar
        indien erts.is_crash_reliable(EIP EIP =):
            reliable_crash_count = 1

        # Nu bepalen de exploit betrouwbaarheid
        betrouwbaarheid = (reliable_crash_count * 100) / MAX_RUN

        # de status op het scherm af te drukken
        sys.stdout.write("\r[{0}] Levende Betrouwbaarheid Waardering: {1}%& Quot; .format(ik + 1, betrouwbaarheid))
        sys.stdout.flush()

    # verwijdert u de log directory
    shutil.rmtree(path = os.path.dirname(Log_path))

    print '
\n'
    print '
Exploit Betrouwbaarheid Waardering: {0}%'.format(betrouwbaarheid)

 

Ontkenning: Gelieve niet de broncode die hier gebruiken. De laatste versie is altijd te vinden op de Github repository hieronder gegeven.

 

In Actie

 

Exploit Betrouwbaarheid Testing System Voltooid
Exploit Betrouwbaarheid Testing System Running

 

Exploit Betrouwbaarheid Testing System op GitHub

 


Ik hoop dat dit kan nuttig zijn voor ontwikkelaars die willen de betrouwbaarheid van hun exploits testen exploiteren. Gelieve te verhogen een probleem als je een bug te vinden of als u een verbetervoorstel.

12,431 totaal aantal vertoningen, 26 aantal vertoningen vandaag

De volgende twee tabbladen te veranderen hieronder inhoud.

Ashfaq Ansari

Beveiliging Onderzoeker
Ashfaq Ansari is de oprichter van HackSys Team codenaam "Panthera". Hij is een security-onderzoeker met ervaring in verschillende aspecten van informatiebeveiliging. Hij is auteur "HackSys Extreme Kwetsbare Driver" en "Shellcode of Death". Hij heeft ook geschreven en publiceerde diverse whitepapers op een laag level software uitbuiting. Zijn belangrijkste interesse ligt in "Low Level Exploitation", "Reverse Engineering", "Programma Analyse" en "Hybride Fuzzing". Hij is een fanboy van Kunstmatige Intelligentie en Machine Learning. Hij is het hoofdstuk voorsprong van null Pune.

Laatste berichten van Ashfaq Ansari (bekijk alle)

Laat een reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd *