Я хотел продемонстрировать эксплойт переполнения стека. Для этого я написал этот код ошибки. Я знаю, что ReadFile генерирует переполнение, читая 1024 байта в буфере 500 байтов.
#include <iostream>
#include <Windows.h>
int main()
{
HANDLE ReadHandle;
char buffer[500];
DWORD read;
ReadHandle = GetStdHandle(STD_INPUT_HANDLE);
ReadFile(ReadHandle, buffer, 1024, &read, NULL);
std::cout << "Der eingegebene Text war:\n";
std::cout << buffer;
return 0;
}
Затем я могу передать шелл-код следующим образом в cmd:
echo helloworld | bufferoverflow_piped
Но Проблема в том, что я хочу запустить шеллкод с ним, и для простоты я отключил ASLR (Switch / DYNAMICBASE: NO), но когда я делаю это, ReadFile создает ошибку. Когда вы смотрите на код ошибки с помощью getLastError (), код равен 998, то есть ERROR_NOACCESS
Когда я включаю ASLR, он работает отлично. Это не имеет никакого смысла для меня. Я имею в виду, это не должно иметь никакого значения, если программа скомпилирована с или без ASLR. Единственное, о чем я думал, это причины безопасности, но я так не думаю.
Надеюсь, я не буду здесь что-то контролировать