Shellcode no se ejecuta a pesar de la dirección correcta en EIP

1

Necesito producir una presentación sobre desbordamientos de búfer para una clase universitaria. Logré crear un desbordamiento de búfer simple donde inyecto la dirección de una función específica en el EIP y la función se ejecuta como se esperaba.

Luego, quiero mostrar el ejemplo más interesante donde inyecto el código de shell que se ejecuta. Ahí es cuando deja de funcionar. Emulé la forma en que la gente lo explicaba en varios sitios web, pero no funciona.

Independientemente del código shell que use ( Shellcode ), el problema es que el código que inyecté no se ejecuta . Así que el programa salta a la dirección correcta, luego se detiene sin ejecutar lo que sea que esté en la dirección.

Comopuedeverenlaseccióncentraldelaimagen,llamada"código", el programa accede a mi nop sled, en la dirección 0xbffff2e0 (el código de shell comienza 4 bytes a continuación), pero no sucede nada.

Luego, la salida de error dice que intentó acceder a 0xbffff2e0 pero no pudo encontrar nada (vea la parte inferior de la imagen: "0xbffff2e0 en ?? ()").

¿Tienes una idea de lo que está pasando?

¿Qué me estoy perdiendo?

Editar : estoy agregando el código utilizado en este ejercicio, según se le solicite

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

void secret(){
        printf("This is a secret message : you are Awesome!\n");
}

void denied(){
        printf("You don't have the permission to see the secret.\n");
}

int main(int argc, char *argv[]){
        char buf[20];

        strcpy(buf, argv[1]);
        printf("%s\n",buf);

        if(strcmp(buf, "myPassword") == 0){
                secret();
        }
        else{
                denied();
        }

        return 0;
}
    
pregunta Loïc N. 08.12.2016 - 04:05
fuente

2 respuestas

2

La pila probablemente no sea ejecutable. Compile el programa vulnerable como este para deshabilitar la protección:

gcc -z execstack -o program program.c
    
respondido por el rhodeo 08.12.2016 - 07:05
fuente
1

Aparte de las respuestas que ya se dieron aquí, es posible que desee verificar los caracteres incorrectos. Su código de shell puede contener algo que podría llevar al problema que está encontrando. También podría ser la razón por la que su sobrescritura de EIP no funciona según lo previsto, ya que uno (o más) byte (s) en la dirección que intenta inyectar es un mal carácter. Para empezar, 00, 0d y 0a son casi siempre caracteres malos.

    
respondido por el Link 05.01.2017 - 03:20
fuente

Lea otras preguntas en las etiquetas