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]; } int main(int argc, char *argv[]) { if (argc != 2) { 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 } int main() { // Crear un payload que contiene el código malicioso char payload[100]; // 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 // 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]; 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
```