Hola a todos, haber tengo un programa en C compilado con el siguiente código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
int main(int argc,char **argv)
{
char string[16];
return 0;
}
Vale quiero hacer un stack overflow, para ello meto de argumentos :
AAAAAAAAAAAAAAAABBBBBBBBCCCCDDDD
Vale con estos argumentos el programa ya da error, uso windows 8 y al parecer no deja explorar los errores luego no puedo ver la dirección del return pues no hay opción de detallar los problemas a diferencia de win7.
Vale ahora abro inmunnity debugger, abro el ejecutable, lo corro y que tengo que hacer? Le puse también los mismo argumentos y ahora? como encuentro la dirección de return? y cuando la encuentre tendría que meter hay un payload no?
Ayuda y gracias.
Primero tenes que saber como fue compilado el codigo.¿Le agregaron alguna proteccion?Si no tiene ninguna , es tan simple como localizar la direccion donde se encuentra la variable , fijarse a cuanto esta el eip , y sobreescribir a la direccion que queres que salte.Creo que el gcc tiene proteccion por default , deberias indicar que no queres que tenga proteccion.
Tenes que saber algo basico como cuando se hace un call ,anteriormente se habian pusheados los argumentos de este y se pushea la direccion a donde se va a volver luego de la funcion llamada.Cada funcion crea un marco de pila, pushea ebp e iguala ebp con esp, despues reserva las variables locales.Si uno desborda una , sobreescribira todo lo de arriba , variables locales , ebp,eip , argumentos.
Si no entendes lo que te digo (se que soy medio medio explicando) , busca como funciona el tema de las funciones en asm,convenciones para limpiar la pila , etc.
No uses Inmunnity Debugger , usa IDA, ta mas lindo.En cuanto a tutoriales , entra a la pagina de ricardo narvaja , que tiene de todo, incluso subieron en español los tutes de corelan.
Para practicar
http://exploit-exercises.com/ , yo aprendi de ahi.Es orientado a GNU/Linux , pero la base es practicamente igual a windows.
Saludos.