La protezione dello stack è disattivata ma non è possibile sovrascrivere l'EIP

0

Durante la compilazione con:

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

Sono in grado di sovrascrivere l'indirizzo di ritorno con qualsiasi valore tranne un indirizzo di ritorno valido.

Quandoprovoausareunindirizzodiritornovalidol'ultimobytevienesovrascrittoconqualcosadidiversocome0xffffd8feottengounindirizzoerrato..

Quindiquellochestochiedendoèanchesehospentolaprotezionedellostack,latortadishutoffeabilitatol'esecuzionedellostack,hoanchesettatoilkernelASLRa0,cisonoaltrimotivipercuiquestopotrebbecausarel'impossibilitàdicontrollarecompletamenteEIP?

Eccoilcodicechenontistochiedendodirisolvereperme,stosolochiedendounconsigliosulperchèquestoagiscecomefa!

#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: nel caso questo sia importante il mio sistema è x86_64 e ho compilato il binario come x86, questo programma ha badchars che sono "\ x09 \ x0a \ x0b \ x0c \ x0d \ x20", e la struttura del carico utile è la seguente . payload="A" * 132 + ret + 28byteshellcode + "A" * 44.

    
posta zeroskilz 11.02.2018 - 17:22
fonte

1 risposta

1

Il secondo esempio muore a causa di 0xffffd8fe che punta a un'istruzione illegale. Sembra un indirizzo scarso per un retino cieco o un salto nel codice shell (dovrebbe essere nel binario 0x0804xxxx). Sembra anche un indirizzo scadente per il tuo shellcode, in quanto dovrebbe trovarsi da qualche parte vicino a 0xbfff0000. Prova a inserire un punto di interruzione sull'indirizzo che stai sovrascrivendo EIP con prima di eseguire il payload. In questo modo puoi confermare l'esecuzione (hit del punto di interruzione) e ispezionare le istruzioni.

    
risposta data 11.02.2018 - 21:01
fonte

Leggi altre domande sui tag