Я только начал изучать, как работают атаки переполнения буфера, и попытался смоделировать атаку на Windows 7 с помощью Visual C 2010. Атака переполнения буфера очень хитрая, она просто перезаписывает адрес возврата на адрес локальной переменной "buffer". Буфер содержит строку шеллкода.
Независимо от того, запускаю я программу в Visual Studio 2010 Debug или нет, программа перейдет к шелл-коду и почти начнет его выполнение, но я получаю сообщение об ошибке нарушения прав доступа, и программа не будет продолжать выполнение шеллкод.
Почему я получаю эту ошибку? Это какая-то защита от переполнения буфера в Windows?
Как вам заставить программу выполнять шелл-код в буфере?
изменить:
Ганс (ответ) правильный. Это обсуждается в главе «Безопасность» Windows Internals 5th, и причиной ошибки является реализация Microsoft исполняемого файла Executable. Защита космоса.
Если этот вопрос кому-то помог, любые голоса будут оценены.
void execute_my_shellcode()
{
char buffer[24];
memcpy(buffer, "\x6A\x21\xFF\x15\x40\x62\x40\x00\x83\xC4\x04\x6A\x0A\xFF\x15\x40\x62\x40\x00\x83\xC4\x04\xC3", 24);
printf("current return address: %p\n", *(int*)((char*)&buffer + 24 + 4));
*(int*)((char*)&buffer + 24 + 4) = (int)&buffer;
printf("return address is now : %p\n\n", (int*)*(int*)((char*)&buffer + 24 + 4) );
}