Dudas basicas con GDB y exploit

Iniciado por 0mega, Agosto 21, 2016, 01:36:17 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Agosto 21, 2016, 01:36:17 AM Ultima modificación: Agosto 21, 2016, 01:20:02 PM por Gabriela
Disculpen a ver si alguno puede ayudarme con esto creo q me meti en una complicada para mi level jejejej..

Estoy tratando de explotar una falla, estoy aprendiendo con gdb bajo un Debian y un codigo en C. Y estoy mareando tengo dudas existenciales ojala me den una mano.
Resumi el codigo a esto basico porque la logica es la misma y es mas comodo para ayudarme ustedes... supongamos q tengo el siguiente code:

(gdb) list
1   #include <stdio.h>
2   #include <string.h>
3   
4   int main (){
5   char stringPwd[20];
6   strcpy(stringPwd,"aaaac0de20x1\n");
7   printf("%s",stringPwd);
8   }

SI le hago un punto de ruptura en la funcion main, no logro llegar debuggueando al codigo de la variable stringPwd, y no entiendo porque se me pasa por alto (Repito, el codigo este es una adaptacion hiperbasica a lo que estoy haciendo, pero es exactamente el mismo concepto jejeje y no logro entenderlo).

Grax dsd ya.


No se que tipo de falla estaras buscando, pero creo que se hacia donde apuntas, aunque en este caso, el error que estas teniendo es con el manejo de DBG.

El problema de no rastrear ese codigo que parece ser importante el "aaaac0de20x1" en la funcion strcpy es porque justamente no estas traceandola.

Estas enfocando tu breakpoint a main, cosa que esta bien pero estas olvidandote de hacer un punto de ruptura en strcpy tambien. Veamos.. considero que estas en 32bits, voy a cambiar de arquitectura solo por vos jeje.

$> gdb -q a.out

(gdb) b 5
(gdb) b strcpy (aca es donde rompes en strcpy)
(gdb) b 7 (en el printf)
(gdb) b 8 (antes de finalizar)

(gdb) r

Para en el primer breakpoint en mi caso 0x80483c0.

(gdb) c

Breakpoint 5, 0xb7f074f2 in strcpy ()......


Aca es donde no habias llegado, y claramente como dice, se hizo la ruptura en strcpy, fijate bien que el breakpoint es distinto debido a que procede de una biblioteca cargada. Si probas con un backtrace..:

#0 0xb7f074f2 in strcpy ()..
#1 0x80483c0 in main ()...


Ahi te muestra como en la pila esta el strcpy arriba, luego cuando encuentre el RET vuelve al main().

x/15i $eip

(con esto ves las 15 instrucciones siguientes que va a recorrer $eip)

Y luego que encuentra el RET... de nuevo a:

#0 0x80483c0 in main ()...

Espero haberte ayudado.
Enjoy.



Security Researcher
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta