Exploit Pålidelighed Testing System
Forfatter:
Ashfaq Ansari

Anmeldt af:
Rating:
5
On April 1, 2015
Sidst ændret:Februar 6, 2017

Resumé:

Exploit Reliability Testing System is developed to determine the reliability of a software exploit by calculating hit count of EIP=0x41414141

Indledning

 
One of my friend was playing with “MS13-009” a Use after free sårbarhed i Internet Explorer hvilket fører til Fjernkørsel.

Han bad mig om at hjælpe ham med at skrive en pålidelig udnytte for denne sårbarhed.

Når jeg begyndte at kigge ind i sårbarhed, Jeg indså, at denne sårbarhed er upålidelige på grund af det faktum, at der er en meget lille vindue mellem fri og brug af befriet objekt. Vigtigere, den gratis kun skete, da udførelsen af ​​alle de SCRIPT blokke bliver afsluttet.

På grund af dette, vi måtte stole på JScript s setTimeout() funktion til at omfordele de frigjorte objekt.

Som, Min opgave var at skrive en pålidelig udnytte denne sårbarhed, det var smertefuldt at iværksætte Internet Explorer under WinDbg og registrere EIP tilmeld værdi hver gang.

Denne situation gjorde mig frustreret, og jeg begyndte at tænke, hvorfor ikke skrive et lille script, der gør denne opgave.

Exploit Pålidelighed Testing System

 
Så, pålideligheden bestemmes ved at tælle antallet af gange udnytter er i stand til kontrol EIP registrere med den ønskede adresse / værdi.
Dette et meget simpelt script til Windows at afgøre, hvor meget en udnytte er pålidelig. Jeg har brugt CDB.EXE at opdage styrtet og registrere registre tilstand.

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
# -*- kodning: utf-8 -*-
"""

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


Copyright (C) 2010-2015 HackSys Team

Denne fil er en del af Exploit pålidelighedstest
System.

Exploit Pålidelighed Testing System bruges til at teste
pålidelighed for at ramme EIP = 0x41414141. Dette system
til formål at finde, hvor meget en udnytte er pålidelig.

Se filen »licens« til kopiering tilladelse.

Forfatter : Ashfaq Ansari
Kontakt: ashfaq_ansari1989[på]hotmail.com
Websted: http://hacksys.vfreaks.com

"""


__author__ = 'Ashfaq Ansari'
__version__ = '1.0'

importere Den
importere sys
importere shutil
importere delproces
importere threading


klasse ExploitReliabilityTestingSystem(objekt):
    """
    Denne klasse er hjertet af Exploit Pålidelighed
    Test System.
    """


    def __init__(selv, CDB, log, program, args=''):
        """
        Dette er konstruktør for ERTS

        :stoppe CDB: cdb.exe sti
        :param log: log sti
        :param program: program, der skal
        :param args: program argumenter
        """

        # validere hvis CDB, log og program findes
        hvis ikke Den.sti.eksisterer(CDB):
            hæve AttributeError("Validere venligst CDB sti ')
        Elif ikke Den.sti.eksisterer(log):
            prøv:
                Den.mkdir(Den.sti.dirname(log))
            undtagen OSERROR:
                hæve AttributeError("Validere du logge sti ')
        Elif ikke Den.sti.eksisterer(program):
            hæve AttributeError("Validere venligst PROGRAM sti ')

        selv.CDB = CDB
        selv.log = log
        selv.program = program
        selv.args = args
        selv.proces = Ingen

    def køre(selv, FILE_PATH, timeout=60):
        """
        Dette bruges til at køre processen med timeout
        hjælp gevind

        :param FILE_PATH: filsti til at åbne
        :param timeout: timeout i sekunder
        """

        # validere args og timeout parameter
        hvis FILE_PATH er Ingen:
            hæve AttributeError("Venligst validere program filepath ')
        Elif timeout er Ingen og typen(timeout) == st:
            hæve AttributeError("Venligst validere TIMEOUT ')

        def __launch_process():
            # forberede processen argument
            process_args = selv.CDB + '' + »-g -G -o -c & Quot; .logopen ' + selv.log + \
                           ';r;.logclose;q" & Quot; " + selv.program + '" ' + selv.args + \
                           '' + FILE_PATH

            selv.proces = delproces.Paven(process_args,
                                            stdin=delproces.PIPE,
                                            stdout=delproces.PIPE,
                                            stderr=delproces.PIPE)
            # vente til processen for at afslutte
            selv.proces.kommunikere()

        # forberede tråden til at køre processen
        process_thread = threading.Tråd(target=__launch_process)

        # starte tråden
        process_thread.begyndelse()

        # nu slutte tråden
        process_thread.deltage(timeout=timeout)

        # kontrollere, om tråden er stadig i live
        hvis process_thread.is_alive():
            # synes at processen ikke ned
            # Lad os dræbe processen
            selv.proces.opsige()

            # lad os afslutte barnet tråd
            process_thread.deltage()

    def is_crash_reliable(selv, EIP):
        """
        Dette bruges til at kontrollere, om styrtet var pålidelige
        ved at kontrollere EIP fra styrtet log

        :EIP param: EIP tilmeld værdi at sammenligne
        :tilbage: Sandt / Falsk
        """

        # validere EIP som snor
        hvis typen(EIP) != st:
            hæve AttributeError("Venligst validere EIP ')

        log = åbent(selv.log).læse()

        hvis 'EIP ={0}'.format(EIP) i log:
            tilbage Sandt
        ellers:
            tilbage False


hvis __name__ == "__main__":
    # konstanter
    HEADER = '' '

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

           Exploit Pålidelighed System
                 Version: {0}

    '' '
.format(__version__)

    # finjustere disse værdier
    MAX_RUN = 10
    TIMEOUT = 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) + '.log'

    reliable_crash_count = 0
    pålidelighed = 0

    # print target detaljer
    print HEADER
    print '
Target EIP: {0}'.format(EIP)
    print '
Program: {0}\n'.format(os.path.basename(PROGRAM_PATH))

    # oprette instans af Exploit Pålidelighed
    # TestingSystem klasse
    Erts = ExploitReliabilityTestingSystem(CDB = CDB_PATH,
                                           log = LOG_PATH,
                                           program = PROGRAM_PATH,
                                           args = PROGRAM_ARGS)

    # køre programmet og tælle antallet af nedbrud
    for jeg i området(0, MAX_RUN):
        # køre målprogrammet
        erts.run(FILE_PATH = FILE_PATH, timeout = TIMEOUT)

        # nu kontrollere, om sammenbruddet er pålidelig
        hvis erts.is_crash_reliable(EIP EIP =):
            reliable_crash_count = 1

        # nu bestemme udnytte pålidelighed
        pålidelighed = (reliable_crash_count * 100) / MAX_RUN

        # udskrive status på skærmen
        sys.stdout.write("\r[{0}] Levende Pålidelighed Rating: {1}%& Quot; .format(Jeg + 1, pålidelighed))
        sys.stdout.flush()

    # slette logbiblioteket
    shutil.rmtree(sti = os.path.dirname(LOG_PATH))

    print '
\n'
    print '
Exploit Pålidelighed Vurdering: {0}%'.format(pålidelighed)

 

Disclaimer: Undlad venligst at bruge kildekoden leveres her. Den nyeste version kan altid findes på Github repository nedenfor.

 

I aktion

 

Exploit Pålidelighed Testing System Afsluttet
Exploit Pålidelighed Testing System Running

 

Exploit Pålidelighed Testing System på GitHub

 


Jeg håber, at dette kan være nyttigt at udnytte udviklere, der ønsker at teste pålideligheden af ​​deres bedrifter. Venligst rejse et spørgsmål, hvis du finder nogen fejl eller hvis du har nogen forslag forbedring.

12,425 samlede antal visninger, 20 visninger i dag

De følgende to faner ændre indhold under.

Ashfaq Ansari

Sikkerhed Forsker
Ashfaq Ansari er grundlægger af HackSys Team opkaldt kode "Panthera". Han er en sikkerhed forsker med erfaring i forskellige aspekter af Information Security. Han har forfattet "HackSys Extreme Sårbar driver" og "Shellcode of Death". Han har også skrevet og udgivet forskellige hvidbøger om software udnyttelse lavt niveau. Hans centrale interesse ligger i "Low Level Udnyttelse", "Reverse Engineering", "Program Analysis" og "Hybrid fnugdannelse". Han er en fanboy af kunstig intelligens og Machine Learning. Han er kapitlet føringen null Pune.

Seneste indlæg af Ashfaq Ansari (se alle)

Efterlad et svar

Din e-mail adresse vil ikke blive offentliggjort. Krævede felter er markeret *