elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Mensajes
Páginas: 1 2 3 4 [5]
41  Seguridad Informática / Bugs y Exploits / Re: Error en Buffer Overflow en: 2 Marzo 2014, 17:37 pm
Me parece que te hacen falta 76 Aes justo para pisar el return, pruébalo y comenta el resultado, si te quita la función Aes de la pila etc. Paciencia ya saldrá.

Abro Olly parcheado
Arguments -> 76As
Restart
Pongo un BP en el CALL a strcpy (00401032). Pero una pregunta, si yo hago Search for --> Name in all modules, busco strcpy y le pongo un breakpoint, me pone un breakpoint a 7C90248D, no a 0040120D. Entonces, ¿cómo supiste que tenía que hacer un breakpoint a 0040120D a partir del breakpoint a la otra dirección?
RUN
Entro al CALL strcpy y se pushea 0012FF1C - RET ADDRESS 00401037
Continúo ejecutando el CALL
Se ponen todas las As en la pila y llego al JE SHORT que no coge el salto:



Ahora llegamos a JE SHORT 00401140, y entro a ver qué ocurre dentro
Ejecuto la primera instrucción, que era un MOV, y ahora los dos ASCII "AAAA..." que había en la pila tienen la misma longitud
Ejecuto algunas instrucciones hasta llegar a una instrucción RET, entonces la ejecuto y el RET ADDRESS 00401037 se quita de la pila.
Ahora estoy así:


Ejecuto ADD ESP,8
y desaparecen los dos ASCII "AAAA..." que había en la pila

Entro al último CALL (CALL 0040120D), continúo ejecutando y llega SUB ESP,328
lo ejecuto y desaparecen todos los 41414141 de la pila :/


Salimos del CALL y unos cuantos CALLs e instrucciones después salimos del programa con nuestro querido ExitCode C0000409
42  Seguridad Informática / Bugs y Exploits / Re: Error en Buffer Overflow en: 1 Marzo 2014, 20:40 pm
De nada para eso estamos. Me refería a la pila no al desensamblado, me interesa más que enseñes la pila. Justo cuando te pares en la función strcpy antes de entrar saca imagen para ver el buffer disponible que te queda para pisar el return, etc..

43  Seguridad Informática / Bugs y Exploits / Re: Error en Buffer Overflow en: 1 Marzo 2014, 17:33 pm
Primero que nada, muchas gracias por la ayuda que me estáis dando. Me quiero dedicar a la seguridad pero nunca he podido completar ningún exploit por cosas de estas...

Hecho:
1. Jumps'n'calls coloreados (pero me refería a que no veía ningún call que ponga a la derecha strcpy funtion, como pasa con las otras funciones de las DLLs de Windows).
2. Destildadas todas las excepciones (sólo tenía tildada la opción "ignore memory access violations in KERNEL32").

¿Compilado con alguna opción extraña? Qué raro... sólo lo compilé como código C (cl.exe /TC vuln1.c).
Aunque con gcc creo que va bien, el problema es compilar con MCV++.

Respecto a esto:
Código:
| call to strcpy
| src = 00331274
| dst = 0012FF28
¿Te refieres al desensamblado, no a la pila, verdad?
Bueno, abro vuln1.exe en el OllyDbg parcheado contra IsDebuggerPresent, pongo un breakpoint en strcpy y F9.
Vale, ahora se detiene el programa en:  00401032 - CALL 0040150
F7 (entro en el CALL)
Ejecuto algunas instrucciones y entro en el bucle donde se copian los carácteres (podríamos decir que está ejecutando la función strcpy)
Ejecuto unas cuantas veces el bucle y esta esto es lo que veo

Continúo ejecutando el bucle --> Continúa sobreescribiéndose la pila

Continúo ejecutando el bucle hasta el JE SHORT 004010E9 que esta vez NO coge, y si yo he introducido 90 As, en la pila veo 22 valores 41414141 en la pila (aunque 90As/4Bytes=22.5 direcciones con 41414141, no sólo 22, pero bueno). Imagen de donde me encuentro ahora:


Continúo ejecutando y ya se llena el 0.5 que faltaba en la pila (byte,byte,41,41). Me encuentro en  00401041 - CALL 0040120D
Lo cojo! Entro al call a ver qué pasa ;)
Veo muchos MOVs de registros a direcciones que me quitan mis 41414141 de la pila, sigo ejecutando, hago un F8 (ejecutar sin entrar) al CALL de IsDebuggerPresent y sigo ejecutando instrucciones.
Bien, me veo un CALL, y después POP ECX y PUSH 0, luego SetUnhandlerExceptionFilter, luego UnhandledExceptionFilter,ExitCode=C0000409, luego GetCurrentProcess y TerminateProcess, así que entro a ese call a ver qué pasa.
Ese CALL contenía un AND y una instrucción RET, pues nada, sigo ejecutando y termina el programa.


¿Y ahora qué? :/
44  Seguridad Informática / Bugs y Exploits / Re: Error en Buffer Overflow en: 28 Febrero 2014, 23:32 pm
Pon un bp en 00401032 y aprieta run y sacale imagen cuando pare. Te pongo aqui este ollydbg parcheado para que no detecte el IsDebuggerPresent (No me acuerdo si era el parcheado 4 o 5 si eso avisa) por ir eliminando posibilidades. Aunque este DEP activado debería parar en strcpy y ya después se ve. Si, deberias destildar todas las excepciones, puedes mirar la pestaña L log para ver que ha pasado también.

http://ricardonarvaja.info/WEB/OTROS/HERRAMIENTAS/L-M-N-O-P/Parcheado%204.rar


Lo que no sé es por qué Olly no me coloreaba y marcaba dónde estaba la llamada a strcpy.

Lo que me pediste:




He entrado al CALL y creo que hace un loop muchas veces para comparar muchas veces, y luego se va a IsDebuggerPresent y continua normal y tal, pero luego presiono run y me  sale el exitcode C0000409 (termina), y la pila no la he visto con muchos 41414141 (no he visto ningún 41)...
45  Seguridad Informática / Bugs y Exploits / Re: Error en Buffer Overflow en: 28 Febrero 2014, 23:17 pm
En cuanto a la compilación, desactivaste GS?, DEP está desactivado para tal ejecutable?, desmarcaste todos los saltos de excepciones el el debugger?, ya que si no los quitas, el depurador intentará saltarlos y así no podrás percatarte de donde se ha producido el error (que valor toma EIP), más tarde le echaré una mirada, saludos.

Whaaat? ¿Desmarqué? ¿Cómo hago todo eso? No me importa leerme todo lo que me pases, quiero aprender.

He buscado por "desmarcar saltos debugger", "desmarcar jmp debugger" (también en inglés) y no sale nada que me pueda servir.

Y perdón, ahora estoy en SP3, pensé que no se activaría solo... Ya está DEP desactivado.
46  Seguridad Informática / Bugs y Exploits / Re: Error en Buffer Overflow en: 28 Febrero 2014, 22:59 pm
Tiene que aparecerte la función strcpy, mira en la pestaña B si tienes el breakpoint a strcpy. O si no search for -> names in all modules. Puedes enseñarme el call justo antes del 00401041?

Vaya, aparece :P.

BP strcpy --> mirar Pestaña B
Código:
7C90248D ntdll Always PUSH EDI

Colocado :D

Presiono run (F9) y --> exitcode C0000409, y termina el programa. Quizá alguna protección de software me lo bloquee...


Click derecho --> Search  for --> Name in all modules
Código:
7C90248D  ntdll  .text  Export  strcpy

Imagen antes del CALL 00401041
47  Seguridad Informática / Bugs y Exploits / Re: Error en Buffer Overflow en: 28 Febrero 2014, 10:31 am
Has pasado la función strcpy traceando? me parece que si, pon una imagen justo en el call del olly antes de entrar a la función strcpy.

Es lo que te comentaba, no aparece la función como una llamada, no sé si es que se implementa en el ejecutable como código o qué...

Sólo he encontrado interesante la  función kernel32.LCMapStringA.

Click derecho --> Search for --> All intermodular calls
Código:
Found intermodular calls
Address    Disassembly                               Destination
00401437   CALL vuln1.0040390C                       (Initial CPU selection)
00408A40   CALL DWORD PTR DS:[<&KERNEL32.CloseHandl  kernel32.CloseHandle
00409306   CALL ESI                                  kernel32.CloseHandle
004092E3   CALL DWORD PTR DS:[<&KERNEL32.CreateFile  kernel32.CreateFileA
00402642   CALL DWORD PTR DS:[<&KERNEL32.ExitProces  kernel32.ExitProcess
0040734C   CALL DWORD PTR DS:[<&KERNEL32.FlushFileB  kernel32.FlushFileBuffers
00403076   CALL DWORD PTR DS:[<&KERNEL32.FreeEnviro  kernel32.FreeEnvironmentStringsA
0040308D   CALL DWORD PTR DS:[<&KERNEL32.FreeEnviro  kernel32.FreeEnvironmentStringsA
00403033   CALL DWORD PTR DS:[<&KERNEL32.FreeEnviro  kernel32.FreeEnvironmentStringsW
00404255   CALL DWORD PTR DS:[<&KERNEL32.GetACP>]    kernel32.GetACP
0040137A   CALL DWORD PTR DS:[<&KERNEL32.GetCommand  kernel32.GetCommandLineA
00406D57   CALL DWORD PTR DS:[<&KERNEL32.GetConsole  kernel32.GetConsoleCP
00406D3B   CALL DWORD PTR DS:[<&KERNEL32.GetConsole  kernel32.GetConsoleMode
00408BFA   CALL DWORD PTR DS:[<&KERNEL32.GetConsole  kernel32.GetConsoleOutputCP
00404001   CALL DWORD PTR DS:[<&KERNEL32.GetCPInfo>  kernel32.GetCPInfo
004042DB   CALL DWORD PTR DS:[<&KERNEL32.GetCPInfo>  kernel32.GetCPInfo
00408FB2   CALL ESI                                  kernel32.GetCPInfo
00408FCB   CALL ESI                                  kernel32.GetCPInfo
0040221F   CALL DWORD PTR DS:[<&KERNEL32.GetCurrent  kernel32.GetCurrentProcess
004025DB   CALL DWORD PTR DS:[<&KERNEL32.GetCurrent  kernel32.GetCurrentProcess
0040394D   CALL DWORD PTR DS:[<&KERNEL32.GetCurrent  kernel32.GetCurrentProcessId
00403577   CALL DWORD PTR DS:[<&KERNEL32.GetCurrent  kernel32.GetCurrentThreadId
0040383C   CALL DWORD PTR DS:[<&KERNEL32.GetCurrent  kernel32.GetCurrentThreadId
00403955   CALL DWORD PTR DS:[<&KERNEL32.GetCurrent  kernel32.GetCurrentThreadId
00403045   CALL DWORD PTR DS:[<&KERNEL32.GetEnviron  kernel32.GetEnvironmentStringsA
00402F83   CALL EDI                                  kernel32.GetEnvironmentStringsW
004031C7   CALL DWORD PTR DS:[<&KERNEL32.GetFileTyp  kernel32.GetFileType
00403263   CALL DWORD PTR DS:[<&KERNEL32.GetFileTyp  kernel32.GetFileType
00408F44   CALL DWORD PTR DS:[<&KERNEL32.GetLocaleI  kernel32.GetLocaleInfoA
0040298B   CALL DWORD PTR DS:[<&KERNEL32.GetModuleF  kernel32.GetModuleFileNameA
00402ED8   CALL DWORD PTR DS:[<&KERNEL32.GetModuleF  kernel32.GetModuleFileNameA
00402613   CALL DWORD PTR DS:[<&KERNEL32.GetModuleH  kernel32.GetModuleHandleA
0040335D   CALL DWORD PTR DS:[<&KERNEL32.GetModuleH  kernel32.GetModuleHandleA
004033C9   CALL DWORD PTR DS:[<&KERNEL32.GetModuleH  kernel32.GetModuleHandleA
00403474   CALL DWORD PTR DS:[<&KERNEL32.GetModuleH  kernel32.GetModuleHandleA
004036D9   CALL DWORD PTR DS:[<&KERNEL32.GetModuleH  kernel32.GetModuleHandleA
00405403   CALL DWORD PTR DS:[<&KERNEL32.GetModuleH  kernel32.GetModuleHandleA
00404232   CALL DWORD PTR DS:[<&KERNEL32.GetOEMCP>]  kernel32.GetOEMCP
00402623   CALL DWORD PTR DS:[<&KERNEL32.GetProcAdd  kernel32.GetProcAddress
0040336D   CALL DWORD PTR DS:[<&KERNEL32.GetProcAdd  kernel32.GetProcAddress
004033D9   CALL DWORD PTR DS:[<&KERNEL32.GetProcAdd  kernel32.GetProcAddress
0040349D   CALL EBX                                  kernel32.GetProcAddress
004034AD   CALL EBX                                  kernel32.GetProcAddress
004036FB   CALL ESI                                  kernel32.GetProcAddress
00403708   CALL ESI                                  kernel32.GetProcAddress
00403715   CALL ESI                                  kernel32.GetProcAddress
00403722   CALL ESI                                  kernel32.GetProcAddress
00405413   CALL DWORD PTR DS:[<&KERNEL32.GetProcAdd  kernel32.GetProcAddress
004054F7   CALL ESI                                  kernel32.GetProcAddress
0040129B   CALL EBX                                  kernel32.GetProcessHeap
004030B1   CALL DWORD PTR DS:[<&KERNEL32.GetStartup  kernel32.GetStartupInfoA
00402A5B   CALL DWORD PTR DS:[<&KERNEL32.GetStdHand  kernel32.GetStdHandle
00403251   CALL DWORD PTR DS:[<&KERNEL32.GetStdHand  kernel32.GetStdHandle
00407932   CALL DWORD PTR DS:[<&KERNEL32.GetStringT  kernel32.GetStringTypeA
004077CE   CALL DWORD PTR DS:[<&KERNEL32.GetStringT  kernel32.GetStringTypeW
004078BD   CALL DWORD PTR DS:[<&KERNEL32.GetStringT  kernel32.GetStringTypeW
00403941   CALL DWORD PTR DS:[<&KERNEL32.GetSystemT  kernel32.GetSystemTimeAsFileTime
0040395D   CALL DWORD PTR DS:[<&KERNEL32.GetTickCou  kernel32.GetTickCount
004012BF   CALL DWORD PTR DS:[<&KERNEL32.GetVersion  kernel32.GetVersionExA
004038C3   CALL DWORD PTR DS:[<&KERNEL32.HeapCreate  kernel32.HeapCreate
004038F9   CALL DWORD PTR DS:[<&KERNEL32.HeapDestro  kernel32.HeapDestroy
004053AE   CALL DWORD PTR DS:[<&KERNEL32.Initialize  kernel32.InitializeCriticalSection
00403642   CALL DWORD PTR DS:[<&KERNEL32.Interlocke  kernel32.InterlockedDecrement
004041C0   CALL DWORD PTR DS:[<&KERNEL32.Interlocke  kernel32.InterlockedDecrement
004044A6   CALL DWORD PTR DS:[<&KERNEL32.Interlocke  kernel32.InterlockedDecrement
0040455D   CALL DWORD PTR DS:[<&KERNEL32.Interlocke  kernel32.InterlockedDecrement
004047C1   CALL EDI                                  kernel32.InterlockedDecrement
004047CE   CALL EDI                                  kernel32.InterlockedDecrement
004034CF   CALL DWORD PTR DS:[<&KERNEL32.Interlocke  kernel32.InterlockedIncrement
004041EB   CALL DWORD PTR DS:[<&KERNEL32.Interlocke  kernel32.InterlockedIncrement
004044CB   CALL EDI                                  kernel32.InterlockedIncrement
00404737   CALL EDI                                  kernel32.InterlockedIncrement
00404744   CALL EDI                                  kernel32.InterlockedIncrement
004021F0   CALL DWORD PTR DS:[<&KERNEL32.IsDebugger  kernel32.IsDebuggerPresent
00407662   CALL ESI                                  kernel32.LCMapStringA
00407721   CALL DWORD PTR DS:[<&KERNEL32.LCMapStrin  kernel32.LCMapStringA
004073EC   CALL DWORD PTR DS:[<&KERNEL32.LCMapStrin  kernel32.LCMapStringW
00407512   CALL ESI                                  kernel32.LCMapStringW
0040754B   CALL ESI                                  kernel32.LCMapStringW
004075AF   CALL DWORD PTR DS:[<&KERNEL32.LCMapStrin  kernel32.LCMapStringW
004054D8   CALL DWORD PTR DS:[<&KERNEL32.LoadLibrar  kernel32.LoadLibraryA
0040748A   CALL ESI                                  kernel32.MultiByteToWideChar
00407845   CALL ESI                                  kernel32.MultiByteToWideChar
00408CD9   CALL DWORD PTR DS:[<&KERNEL32.MultiByteT  kernel32.MultiByteToWideChar
00408D47   CALL DWORD PTR DS:[<&KERNEL32.MultiByteT  kernel32.MultiByteToWideChar
00403969   CALL DWORD PTR DS:[<&KERNEL32.QueryPerfo  kernel32.QueryPerformanceCounter
0040129E   CALL DWORD PTR DS:[<&KERNEL32.HeapAlloc>  ntdll.RtlAllocateHeap
00405BF2   CALL DWORD PTR DS:[<&KERNEL32.HeapAlloc>  ntdll.RtlAllocateHeap
00405FC9   CALL DWORD PTR DS:[<&KERNEL32.HeapAlloc>  ntdll.RtlAllocateHeap
004068B4   CALL DWORD PTR DS:[<&KERNEL32.HeapAlloc>  ntdll.RtlAllocateHeap
004069F1   CALL DWORD PTR DS:[<&KERNEL32.HeapAlloc>  ntdll.RtlAllocateHeap
00403B63   CALL DWORD PTR DS:[<&KERNEL32.DeleteCrit  ntdll.RtlDeleteCriticalSection
00401540   CALL DWORD PTR DS:[<&KERNEL32.EnterCriti  ntdll.RtlEnterCriticalSection
00401563   CALL DWORD PTR DS:[<&KERNEL32.EnterCriti  ntdll.RtlEnterCriticalSection
00403EC5   CALL DWORD PTR DS:[<&KERNEL32.EnterCriti  ntdll.RtlEnterCriticalSection
00408EE3   CALL DWORD PTR DS:[<&KERNEL32.EnterCriti  ntdll.RtlEnterCriticalSection
004012CF   CALL DWORD PTR DS:[<&KERNEL32.HeapFree>]  ntdll.RtlFreeHeap
004012F5   CALL DWORD PTR DS:[<&KERNEL32.HeapFree>]  ntdll.RtlFreeHeap
00403ADB   CALL DWORD PTR DS:[<&KERNEL32.HeapFree>]  ntdll.RtlFreeHeap
00405F0C   CALL DWORD PTR DS:[<&KERNEL32.HeapFree>]  ntdll.RtlFreeHeap
00405FFA   CALL DWORD PTR DS:[<&KERNEL32.HeapFree>]  ntdll.RtlFreeHeap
00402F97   CALL DWORD PTR DS:[<&KERNEL32.GetLastErr  ntdll.RtlGetLastWin32Error
00403519   CALL DWORD PTR DS:[<&KERNEL32.GetLastErr  ntdll.RtlGetLastWin32Error
00403AEC   CALL DWORD PTR DS:[<&KERNEL32.GetLastErr  ntdll.RtlGetLastWin32Error
00404C2B   CALL DWORD PTR DS:[<&KERNEL32.GetLastErr  ntdll.RtlGetLastWin32Error
00406A8F   CALL DWORD PTR DS:[<&KERNEL32.GetLastErr  ntdll.RtlGetLastWin32Error
00406B1C   CALL DWORD PTR DS:[<&KERNEL32.GetLastErr  ntdll.RtlGetLastWin32Error
00407118   CALL DWORD PTR DS:[<&KERNEL32.GetLastErr  ntdll.RtlGetLastWin32Error
00407163   CALL DWORD PTR DS:[<&KERNEL32.GetLastErr  ntdll.RtlGetLastWin32Error
00407356   CALL DWORD PTR DS:[<&KERNEL32.GetLastErr  ntdll.RtlGetLastWin32Error
004073FE   CALL DWORD PTR DS:[<&KERNEL32.GetLastErr  ntdll.RtlGetLastWin32Error
004077E0   CALL DWORD PTR DS:[<&KERNEL32.GetLastErr  ntdll.RtlGetLastWin32Error
00407D6D   CALL DWORD PTR DS:[<&KERNEL32.GetLastErr  ntdll.RtlGetLastWin32Error
00408A4A   CALL DWORD PTR DS:[<&KERNEL32.GetLastErr  ntdll.RtlGetLastWin32Error
00408BDA   CALL DWORD PTR DS:[<&KERNEL32.GetLastErr  ntdll.RtlGetLastWin32Error
00401592   CALL DWORD PTR DS:[<&KERNEL32.LeaveCriti  ntdll.RtlLeaveCriticalSection
004015B5   CALL DWORD PTR DS:[<&KERNEL32.LeaveCriti  ntdll.RtlLeaveCriticalSection
00403DD2   CALL DWORD PTR DS:[<&KERNEL32.LeaveCriti  ntdll.RtlLeaveCriticalSection
00408F1B   CALL DWORD PTR DS:[<&KERNEL32.LeaveCriti  ntdll.RtlLeaveCriticalSection
00405F93   CALL DWORD PTR DS:[<&KERNEL32.HeapReAllo  ntdll.RtlReAllocateHeap
00406A48   CALL DWORD PTR DS:[<&KERNEL32.HeapReAllo  ntdll.RtlReAllocateHeap
00406AC9   CALL DWORD PTR DS:[<&KERNEL32.HeapReAllo  ntdll.RtlReAllocateHeap
0040358F   CALL DWORD PTR DS:[<&KERNEL32.SetLastErr  ntdll.RtlSetLastWin32Error
00405465   CALL DWORD PTR DS:[<&KERNEL32.SetLastErr  ntdll.RtlSetLastWin32Error
00408411   CALL DWORD PTR DS:[<&KERNEL32.HeapSize>]  ntdll.RtlSizeHeap
00404F0E   CALL <JMP.&KERNEL32.RtlUnwind>            ntdll.RtlUnwind
00408017   CALL <JMP.&KERNEL32.RtlUnwind>            ntdll.RtlUnwind
00407D60   CALL DWORD PTR DS:[<&KERNEL32.SetFilePoi  kernel32.SetFilePointer
004032BB   CALL DWORD PTR DS:[<&KERNEL32.SetHandleC  kernel32.SetHandleCount
00408DC6   CALL DWORD PTR DS:[<&KERNEL32.SetStdHand  kernel32.SetStdHandle
004021FA   CALL DWORD PTR DS:[<&KERNEL32.SetUnhandl  kernel32.SetUnhandledExceptionFilter
004025B4   CALL DWORD PTR DS:[<&KERNEL32.SetUnhandl  kernel32.SetUnhandledExceptionFilter
0040850D   CALL DWORD PTR DS:[<&KERNEL32.SetUnhandl  kernel32.SetUnhandledExceptionFilter
004039BD   CALL DWORD PTR DS:[<&KERNEL32.Sleep>]     kernel32.Sleep
00403A05   CALL DWORD PTR DS:[<&KERNEL32.Sleep>]     kernel32.Sleep
00403A50   CALL DWORD PTR DS:[<&KERNEL32.Sleep>]     kernel32.Sleep
00402226   CALL DWORD PTR DS:[<&KERNEL32.TerminateP  kernel32.TerminateProcess
004025E2   CALL DWORD PTR DS:[<&KERNEL32.TerminateP  kernel32.TerminateProcess
004033F3   CALL DWORD PTR DS:[<&KERNEL32.TlsAlloc>]  kernel32.TlsAlloc
00403772   CALL DWORD PTR DS:[<&KERNEL32.TlsAlloc>]  kernel32.TlsAlloc
00403451   CALL DWORD PTR DS:[<&KERNEL32.TlsFree>]   kernel32.TlsFree
00403331   CALL ESI                                  kernel32.TlsGetValue
00403348   CALL ESI                                  kernel32.TlsGetValue
0040339D   CALL ESI                                  kernel32.TlsGetValue
004033B4   CALL ESI                                  kernel32.TlsGetValue
00403402   CALL DWORD PTR DS:[<&KERNEL32.TlsGetValu  kernel32.TlsGetValue
00403532   CALL DWORD PTR DS:[<&KERNEL32.TlsGetValu  kernel32.TlsGetValue
0040341F   CALL DWORD PTR DS:[<&KERNEL32.TlsSetValu  kernel32.TlsSetValue
00402204   CALL DWORD PTR DS:[<&KERNEL32.UnhandledE  kernel32.UnhandledExceptionFilter
004025BF   CALL DWORD PTR DS:[<&KERNEL32.UnhandledE  kernel32.UnhandledExceptionFilter
00402AE0   CALL DWORD PTR DS:[<&KERNEL32.UnhandledE  kernel32.UnhandledExceptionFilter
00402B30   CALL DWORD PTR DS:[<&KERNEL32.UnhandledE  kernel32.UnhandledExceptionFilter
00408517   CALL DWORD PTR DS:[<&KERNEL32.UnhandledE  kernel32.UnhandledExceptionFilter
00405FE3   CALL DWORD PTR DS:[<&KERNEL32.VirtualAll  kernel32.VirtualAlloc
0040606E   CALL DWORD PTR DS:[<&KERNEL32.VirtualAll  kernel32.VirtualAlloc
00405E9F   CALL ESI                                  kernel32.VirtualFree
00402FF8   CALL EDI                                  kernel32.WideCharToMultiByte
00404C0D   CALL DWORD PTR DS:[<&KERNEL32.WideCharTo  kernel32.WideCharToMultiByte
00406E0D   CALL DWORD PTR DS:[<&KERNEL32.WideCharTo  kernel32.WideCharToMultiByte
004070DE   CALL DWORD PTR DS:[<&KERNEL32.WideCharTo  kernel32.WideCharToMultiByte
004075D2   CALL DWORD PTR DS:[<&KERNEL32.WideCharTo  kernel32.WideCharToMultiByte
00408C01   CALL DWORD PTR DS:[<&KERNEL32.WideCharTo  kernel32.WideCharToMultiByte
00409093   CALL DWORD PTR DS:[<&KERNEL32.WideCharTo  kernel32.WideCharToMultiByte
004090B9   CALL EBX                                  kernel32.WideCharToMultiByte
00408C1D   CALL DWORD PTR DS:[<&KERNEL32.WriteConso  kernel32.WriteConsoleA
00408BC7   CALL DWORD PTR DS:[<&KERNEL32.WriteConso  kernel32.WriteConsoleW
00402A86   CALL DWORD PTR DS:[<&KERNEL32.WriteFile>  kernel32.WriteFile
00406E30   CALL DWORD PTR DS:[<&KERNEL32.WriteFile>  kernel32.WriteFile
00406E71   CALL DWORD PTR DS:[<&KERNEL32.WriteFile>  kernel32.WriteFile
00406F8B   CALL DWORD PTR DS:[<&KERNEL32.WriteFile>  kernel32.WriteFile
0040702E   CALL DWORD PTR DS:[<&KERNEL32.WriteFile>  kernel32.WriteFile
00407105   CALL DWORD PTR DS:[<&KERNEL32.WriteFile>  kernel32.WriteFile
0040714D   CALL DWORD PTR DS:[<&KERNEL32.WriteFile>  kernel32.WriteFile

P.D.: He tenido que actualizar a WinXP SP3, aunque no importa, ya que el resultado es el mismo (las imágenes y todos los datos que he puesto son con el SP3).
48  Seguridad Informática / Bugs y Exploits / Re: Error en Buffer Overflow en: 27 Febrero 2014, 23:01 pm
Tienes que dar más datos, que observas en la pila, esta el buffer de Aes por algun lado? Pon un bp en strcpy y tracea.

Vale, hay un problema aquí:
Abro Olly
Pongo 90 As y Restart
A debuggear!

CommandBar -> BP strcpy (no da ningún error)
Pero no encuentro por el ejecutable la llamada a msvcrt.strcpy o a user32.strcpy, en cambio, cuando compilaba con GCC (Cygwin) sí que me saltaba a una biblioteca suya y a la función strcpy.





Pero bueno, vayamos a la ejecución de código:
Le doy a run y sale esto , PUES NADA, a debuggear paso por paso.

Sigo ejecutando y salen en la pila las As: , sigo ejecutando y me encuentro con esto: , aunque luego en la pila sólo están las 90 que yo puse). Ya estoy más cerca. Pero sigo ejecutando y me encuentro con que ya no están en la pila las As y con IsDebuggerPresent!! pues como no veo saltos condicionales después del call, sustituyo la función por NOPs y continuo ejecutando, y ahora se pushea el ExitCode y se llama a TerminateProcess, y finaliza con el ExitCode que posteé en la entrada del tema (C0000409),

Salu2
49  Seguridad Informática / Bugs y Exploits / Error en Buffer Overflow en: 27 Febrero 2014, 17:43 pm
Buenas gente.

Verán, estaba siguiendo el tutorial de Rojodos sobre buffer overflow (http://www.todopsp.com/foros/showthread.php?t=23953  , hay que darle a "Premum Download" y se descarga), y... claro, sé ensamblador y entiendo lo que dice, pero a la hora de poner muchas AAAAAAs (90 As por ejemplo) con el CMD y darle a "más detalles", el offset no es "41414141",  y no entiendo el porqué. He probado a ejecutarlo en un Win8 físico y en una máquina virtual con WinXP Professional SP1 (que no tiene ni siquiera el DEP, al ser SP1), y a debuggearlo con OllyDbg 1.10 y con Immunity Debugger, pero me da el mismo resultado.

En concreto, cuando intento debuggear con Olly sin argumentos, el exit code es 0, y cuando le pongo 90 As y le doy a F9 (run), el exit code es C0000409

He compilado el código fuente desde la consola de MVC++ 2005 (cl.exe /TC vuln1.c).
Subo el ejecutable por si queréis echarle un vistazo: http://bayfiles.net/file/17EMR/HuI4La/vuln1.exe


El código compilado es el siguiente:
Código
  1. /* vuln1.c por Rojodos */
  2.  
  3. #include <stdio.h> // librería stdio.h, funciones básicas de Entrada/Salida
  4.  
  5. int main (int argc, char **argv) // La función "principal" del programa función
  6. {
  7. char buffer[64]; //Declaramos un array con 64 bytes de espacio
  8.  
  9. if (argc < 2) // Si los argumentos son menores que 2...
  10. {
  11. printf ("Introduzca un argumento al programa\n"); //Printeamos
  12. return 0; // y retornamos 0 a la función main, y el programa acaba
  13. }
  14.  
  15. strcpy (buffer, argv[1]); // Aqui es donde esta el fallo.
  16.  
  17. return 0; // Devolvemos 0 a main, y el programa acaba.
  18. }


He probado a seguir el tutorial de Coreland, y con el programa ya compilado del PDF nº 1 sí me funciona lo de modificar el EIP, pero si lo compilo yo no, y no sé por qué.

Gracias de antemano :)
Páginas: 1 2 3 4 [5]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines