C ++ ReadFile () из канала не работает, когда ASLR отключен? - PullRequest
0 голосов
/ 17 марта 2020

Я хотел продемонстрировать эксплойт переполнения стека. Для этого я написал этот код ошибки. Я знаю, что 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. Единственное, о чем я думал, это причины безопасности, но я так не думаю.

Надеюсь, я не буду здесь что-то контролировать

...