Адрес переменной среды изменяется каждый раз, когда она проверяется - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь узнать, как использовать переполнение буфера для изменения адреса в esp для запуска шелл-кода;и я определил переменную среды SHELLCODE для хранения выполнения шелл-кода, но всякий раз, когда я запускаю функцию getenv , чтобы получить адрес этой переменной среды, адрес меняется со временем;

Onurcans-MacBook-Air:ArtofExploitation onurcanbektas$ ./genenv_exp SHELLCODE
SHELLCODE is at 0x7fff507b9bd5
Onurcans-MacBook-Air:ArtofExploitation onurcanbektas$ ./genenv_exp SHELLCODE
SHELLCODE is at 0x7fff5fb4abd5
Onurcans-MacBook-Air:ArtofExploitation onurcanbektas$ ./genenv_exp SHELLCODE
SHELLCODE is at 0x7fff54ca5bd5
Onurcans-MacBook-Air:ArtofExploitation onurcanbektas$ ./genenv_exp SHELLCODE
SHELLCODE is at 0x7fff5d633bd5
Onurcans-MacBook-Air:ArtofExploitation onurcanbektas$ ./genenv_exp SHELLCODE
SHELLCODE is at 0x7fff50bedbd5
Onurcans-MacBook-Air:ArtofExploitation onurcanbektas$ ./genenv_exp SHELLCODE
SHELLCODE is at 0x7fff5d5f9bd5
Onurcans-MacBook-Air:ArtofExploitation onurcanbektas$ ./genenv_exp SHELLCODE
SHELLCODE is at 0x7fff5bc6ebd5
Onurcans-MacBook-Air:ArtofExploitation onurcanbektas$ ./genenv_exp SHELLCODE
SHELLCODE is at 0x7fff5589bbd5

В чем причина этого? И как можно предотвратить это?

1 Ответ

0 голосов
/ 28 января 2019

Кажется, что ваша программа скомпилирована для использования A ddress S pace L ayout R andomization (ASLR).При каждом выполнении вашей программы основные разделы памяти (такие как ваш код, глобальные переменные, стек и т. Д.) Отображаются в случайный адрес памяти.Таким образом, адрес «перемещается» каждый раз, когда вы выполняете свою программу.

Я бы посоветовал вам проверить, можно ли отключить ASLR для вашей программы, скомпилировав его для использования фиксированных адресов.Другим вариантом может быть временное отключение ASLR для вашего ПК (что не рекомендуется, поскольку пользователи обычно забывают включить его впоследствии).

Еще один прием, который я часто использую, поскольку это упражнение, заключается в том, чтобы "утечка "адрес, который вы хотите использовать вручную.Добавьте строку печати в вашу программу, чтобы напечатать нужный адрес, и только затем ждите ввода, который переполнит программу.Сделав параметрический эксплойт по адресу, вы сможете использовать упражнение (имитирующее случай реального слова, в котором вам нужна утечка памяти, чтобы ваша атака сработала).

Например (взято из тестамодуль разведчик ):

printf("The buffer is at address: %p\n", buffer);
printf("Press ENTER to continue\n");
fgetc(stdin);
...