Sto cercando di imparare il binding ROP su una macchina Linux a 64 bit e ho riscontrato alcuni problemi. Sto usando il seguente codice per il buffer overflow (tratto da questo esercitazione ):
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
char *not_used = "/bin/sh";
void not_called() {
printf("Not quite a shell...\n");
system("/bin/date");
}
void vulnerable_function(char* string) {
char buffer[100];
strcpy(buffer, string);
}
int main(int argc, char **argv) {
vulnerable_function(argv[1]);
return 0;
}
Il problema che sto incontrando è che l'indirizzo del gadget ROP (da libc) è 0x7EFBF7B267DB che è l'indirizzo per un pop% rax; pop% rdi; chiama% rax ;. Tuttavia, se il mio carico utile è, ad esempio: \ x41 \ x41 \ x41 ..... \ x41 \ x41 \ xdb \ x67 \ xb2 \ xf7 \ xfb \ x7e \ x41 \ x41 \ x41 \ x41 \ x41 \ x41, quindi prova a chiamare 0x41417EFBF7B267DB invece di 0x7EFBF7B267DB. Non conosco alcun modo per aggirare questo. Qualche suggerimento?