Ultima modifica:
Ciao a tutti!
Sono tornato a studiare sul libro ""The art of exploitation", ma mi sono bloccato sul problema citato nel titolo.
Spiego meglio:
io ho decompilato questo sorgente
e il risultato in ASM è il seguente:
Come posso, una volta uscito dalla call <check_auth> saltare subito all'ultima print (lea rdi,[rip+0xf3])?
Nel libro fanno un esempio differente, però volevo provare a stampare solo una riga di quelle 3 che vengono stampate.
Il problema principalmente è il fatto che l'indirizzo a cui voglio saltare contiene dei nullbyte (0x00).
Di conseguenza, il comando
non va bene poichè 0x00 viene ignorato e gli indirizzi non vengono sovrascritti con 0x00...
C'è un modo? O quando ci si trova con un NullByte è game over?
Sono tornato a studiare sul libro ""The art of exploitation", ma mi sono bloccato sul problema citato nel titolo.
Spiego meglio:
io ho decompilato questo sorgente
C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int check_auth(char *psw){
int auth_fl = 0;
char psw_buffer[16];
strcpy(psw_buffer, psw);
if (strcmp(psw_buffer, "brilling") == 0)
auth_fl = 1;
if (strcmp(psw_buffer, "outgrabe") == 0)
auth_fl = 1;
return auth_fl;
}
int main(int argc, char *argv[]){
if (argc < 2){
printf("Usage: %s <password>\n", argv[0]);
exit(0);
}
if (check_auth(argv[1])){
printf("\n==================\n");
printf("Access Granted.\n");
printf("==================\n");
}else{
printf("\nAccess Denied.\n");
}
return 0;
}
Come posso, una volta uscito dalla call <check_auth> saltare subito all'ultima print (lea rdi,[rip+0xf3])?
Nel libro fanno un esempio differente, però volevo provare a stampare solo una riga di quelle 3 che vengono stampate.
Il problema principalmente è il fatto che l'indirizzo a cui voglio saltare contiene dei nullbyte (0x00).
Di conseguenza, il comando
Codice:
./auth_overflow $(perl -e ' print "\xe6\x06\x40\x00" x12;')
C'è un modo? O quando ci si trova con un NullByte è game over?