Protección de la pila desactivada pero aún no se puede sobrescribir EIP

0

Al compilar con:

gcc -m32 -fno-pie -no-pie -g bof.c -fno-stack-protector -z execstack -o bof32

Puedo sobrescribir la dirección de retorno con casi cualquier valor, excepto una dirección de retorno válida.

Cuandointentoutilizarunadirecciónderetornoválida,elúltimobytesesobrescribeconalgodiferente,como0xffffd8fe,obtengounadirecciónincorrecta...

Entonces,loqueestoypreguntandoesqueaunquehayacerradolaproteccióndelapila,latartadeapagadoylaejecuciónhabilitadadelapila,tambiénpuseelASLRdelkernela0,¿hayalgunaotrarazónporlaqueestopodríacausarunerrorparacontrolarcompletamenteelEIP?

AquíestáelCódigo.Noteestoypidiendoqueresuelvasestopormí,soloteestoypidiendounconsejosobreporquéestoactúadelamaneraenquelohace.

#include<stdio.h>#include<stdlib.h>#include<string.h>voidvalidate(char*pass){if(strcmp(pass,"[REDACTED]") == 0) {
        printf("ACCESS GRANTED!");
        printf("Oh that's just idio... Oh my god!\n");
    } else {
        printf("Damn it, I had something for this...\n");
    }
}

int main(int argc, char** argv) {
    char password[200];
    printf("C:/ENTER PASSWORD: ");
    scanf("%s", password);
    validate(password);
    return 0;
}

Nota: en caso de que esto importe mi sistema es x86_64 y compilé el binario como x86, este programa tiene badchars que son "\ x09 \ x0a \ x0b \ x0c \ x0d \ x20", y la estructura de la carga útil es la siguiente . payload="A" * 132 + ret + 28byteshellcode + "A" * 44.

    
pregunta zeroskilz 11.02.2018 - 17:22
fuente

1 respuesta

1

Su segundo ejemplo muere debido a que 0xffffd8fe apunta a una instrucción ilegal. Parece una dirección incorrecta para un ciego ret o jump esp pivot en su código de shell (debe estar en el binario 0x0804xxxx). También parece una dirección pobre para su código de shell, ya que debería estar ubicada en algún lugar más cercano a 0xbfff0000. Intente poner un punto de interrupción en la dirección con la que está sobrescribiendo el EIP antes de ejecutar la carga útil. De esa manera puede confirmar la ejecución (golpe de punto de interrupción) e inspeccionar las instrucciones.

    
respondido por el wireghoul 11.02.2018 - 21:01
fuente

Lea otras preguntas en las etiquetas