простое переполнение буфера не работает, хотя я даю ему правильные байты в качестве входных данных в EIP - PullRequest
0 голосов
/ 26 апреля 2020

Я пробовал CTF, называемый переполнением буфера 1, из picoCTF, который по какой-то причине не работает. Я нашел смещение и ввел адрес, по которому должна выполняться функция, в качестве адреса возврата, однако он всегда указывает на другой адрес, я пробовал разные вещи, но, похоже, он не работает.

Код:

#define BUFFSIZE 64
#define FLAGSIZE 64

void flag() {
     char buf[FLAGSIZE];
     FILE *f = fopen("flag.txt","r");
     if (f == NULL) {
         printf("Flag File is Missing. please contact an Admin if you are running this on the shell 
           server.\n");
        exit(0);
  }

  fgets(buf,FLAGSIZE,f);
  printf(buf);
}

void vuln(){
  char buf[BUFFSIZE];
  gets(buf);

  printf("Woah, were jumping to 0x%x !\n", get_return_address());
}

int main(int argc, char **argv){

  setvbuf(stdout, NULL, _IONBF, 0);
  gid_t gid = getegid();
  setresgid(gid, gid, gid);
  puts("Give me a string and lets see what happens: ");
  vuln();
  return 0;
}

Когда программа запрашивает ввод:

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBCCCCDDDD\xe6\x85\x04\x08

Фактический адрес флага функции (), который я хочу вызвать:

0x080485e6
...