Estoy tratando de aprender el encadenamiento ROP en una máquina Linux de 64 bits y me he encontrado con algunos problemas. Estoy usando el siguiente código para el desbordamiento del búfer (tomado de este tutorial ):
#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;
}
El problema que estoy encontrando es que la dirección del gadget ROP (de libc) es 0x7EFBF7B267DB, que es la dirección de un pop% rax; pop% rdi; llamada% rax ;. Sin embargo, si mi carga útil es, por ejemplo: \ x41 \ x41 \ x41 ..... \ x41 \ x41 \ xdb \ x67 \ xb2 \ xf7 \ xfb \ x7e \ x41 \ x41 \ x41 \ x41 \ x41 \ x41, entonces intenta llamar a 0x41417EFBF7B267DB en lugar de 0x7EFBF7B267DB. No conozco ninguna manera de evitar esto. ¿Alguna sugerencia?