Quale tipo di attacco dovrebbe essere usato per passare questa autenticazione

0

Sto praticando il Astalavista Wargames e ho incontrato questa sfida La domanda è: Bob ha scritto un software ma la verifica della password non sembra funzionare. Devi trovare un modo per Accedere. Siamo stati in grado di recuperare parte della sorgente:

typedef struct {char pass[5],valid;} password;

int main(){
    password s;
    s.valid=0;
    scanf("%s",s.pass);
    verifypass(s);
    //if password is correct the value of s.valid will change to 1
    if(s.valid==1)login();
    else printf("Wrong passwordn");
    system("Pause");
    return 0;
}

Link al file eseguibile fornito originale nella domanda . Nota che la domanda non fornisce nient'altro accanto a questa parte di codice e file eseguibile.

Il mio pensiero iniziale era che questo dovrebbe essere fatto usando gli attacchi di overflow del buffer, quindi, proprio come un approccio comune sulla mia macchina x64, provo a inserire 1 per cambiare il bit valido su TRUE.

quando inserisco questo numero di 1 "111111111111111111111111111111" il programma mi consente di inserire nuovamente la password, MA non di accedere. Se inserisco meno, mostrerebbe la password sbagliata e uscirà e se inserirò di più verrebbe arrestato.

Come posso trovare una soluzione a questa sfida?

    
posta Erfan 21.02.2013 - 16:09
fonte

1 risposta

2

Saresti in grado di attaccarlo con un buffer overflow, ma non è necessario. Per ottenere un exploit di overflow del buffer, è necessario eseguire analisi dinamiche sul file exe, utilizzando uno strumento come OllyDBG . Avresti quindi eseguito il programma, passandogli lunghe stringhe fino a farlo cadere. Il tipo di incidente che stai cercando è il controllo su eip . Normalmente passeresti solo un'intera stringa di AAAAAA e controllerai i registri della CPU quando il programma si blocca, se vedi eip 0x41414141 o simili, vinci e sono a pochi passi dalla violazione del codice.

Tuttavia, attaccherei questo in un modo molto diverso. La password è memorizzata nel file exe , ma è oscurata - è generata moltiplicando e ruotando una serie di valori come 0x55555556 e 0x66666667 . Quindi confronta la tua password con il valore generato e si dirama in un modo o nell'altro a seconda che corrispondano. Tutto ciò che devi fare è sovvertire questa condizione di ramificazione. Questo può essere ottenuto molto facilmente con un editor esadecimale.

Per un indizio; il comando che desideri modificare risiede su 0x4013b3 (_main+58) .

    
risposta data 21.02.2013 - 16:25
fonte

Leggi altre domande sui tag