Il fuzzer causa crash. Ora cosa?

5

Qualcuno può indicarmi la direzione di alcuni buoni tutorial su come identificare il tipo di vulnerabilità come riportato da! exploitable e dove andare da lì?

Essenzialmente sono un piccolo laboratorio di fuzzing e sto cercando di ampliare le mie conoscenze sulla ricerca e lo sviluppo degli exploit. Quindi ho un'app che si blocca,! Report sfruttabili come EXPLOITABLE e una violazione di accesso in scrittura. Il mio problema a questo punto è che non sono sicuro di quale tipo di problema stia accadendo e come procedere.

Un sacco di esercitazioni di exploit là fuori, tranne che dimostrano tutti i buffer overflow .... Non sono sicuro che si tratti di un buffer overflow. L'apertura del file fuzzed che causa l'arresto anomalo in Immunity Debugger causa lo stesso arresto nello stesso indirizzo di memoria del report! Exploitable. Ho confrontato il file pulito con il file fuzzed in un'applicazione bindiffer e ho visto il cambiamento esadecimale esatto che causa l'arresto anomalo, ma potrei usare qualche consiglio su come procedere da qui per iniziare a mettere insieme il codice exploit. Ho allegato la lettura "sfruttabile" nel caso in cui qualcuno possa fornirmi ulteriori informazioni su di esso e su come raccogliere informazioni significative da esso.

(834.b7c): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=7fffffff ebx=00726afc ecx=0000c9f0 edx=02adc080 esi=02957b18 edi=00000000
eip=005ec57f esp=0187f810 ebp=0187f978 iopl=0         nv up ei pl nz ac pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010216
*** WARNING: Unable to verify timestamp for image00400000
*** ERROR: Module load completed but symbols could not be loaded for image00400000
image00400000+0x1ec57f:
005ec57f c704ca00000000  mov     dword ptr [edx+ecx*8],0 ds:0023:02b41000=????????
0:000> r;!exploitable -v;q
eax=7fffffff ebx=00726afc ecx=0000c9f0 edx=02adc080 esi=02957b18 edi=00000000
eip=005ec57f esp=0187f810 ebp=0187f978 iopl=0         nv up ei pl nz ac pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010216
image00400000+0x1ec57f:
005ec57f c704ca00000000  mov     dword ptr [edx+ecx*8],0 ds:0023:02b41000=????????
HostMachine\HostUser
Executing Processor Architecture is x86
Debuggee is in User Mode
Debuggee is a live user mode debugging session on the local machine
Event Type: Exception
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for ntdll.dll - 
Exception Faulting Address: 0x2b41000
First Chance Exception Type: STATUS_ACCESS_VIOLATION (0xC0000005)
Exception Sub-Type: Write Access Violation

Exception Hash (Major/Minor): 0x00020e6f.0x435e5a76

Stack Trace:
image00400000+0x1ec57f
image00400000+0x1ebe05
image00400000+0x1eb966
image00400000+0x1eb7f3
image00400000+0x64405
image00400000+0x63eae
image00400000+0x63d2f
image00400000+0x41ca5
image00400000+0x39022
image00400000+0x5d9fa
image00400000+0x5e63f
image00400000+0x38862
image00400000+0x3032
image00400000+0x11d91
Instruction Address: 0x00000000005ec57f

Description: User Mode Write AV
Short Description: WriteAV
Exploitability Classification: EXPLOITABLE
Recommended Bug Title: Exploitable - User Mode Write AV starting at    
image00400000+0x00000000001ec57f (Hash=0x00020e6f.0x435e5a76)

User mode write access violations that are not near NULL are exploitable. 
quit:
    
posta Stev0 14.10.2013 - 07:25
fonte

1 risposta

5

Corelan ha un paio di buoni articoli sull'attacco allo sfruttamento:

link e link

La loro metodologia sembra essere il caso di guardare il file seme originale che è stato usato per generare il messaggio fuzzed e lentamente cambiarlo nel messaggio fuzzed per identificare quale cambiamento provoca l'arresto.

Avendo fatto, è quindi il caso di determinare che cosa fa l'applicazione che lo causa in modo anomalo eseguendolo con un debugger collegato e osservando dove il cambiamento influenza il comportamento del programma. Dopodiché, stai cercando di vedere quali registri puoi raccogliere (In definitiva, provi a sovrascrivere EIP). Oppure, se si tratta di un crash basato su heap, puoi sovrascrivere alcuni puntatori di funzione in modo da poterli indirizzare al tuo payload.

    
risposta data 14.10.2013 - 18:04
fonte

Leggi altre domande sui tag