Рандомизация адресов переменных среды - PullRequest
2 голосов
/ 16 октября 2011

Я использую Bash.Я отключил ASLR в Ubuntu 11.04, используя

#sysctl -w kernel.randomize_va_space=0

И я экспортировал переменную из оболочки, используя

$ export MYSHELL=/bin/sh

Я написал программу на C, чтобы получить адрес MYSHELL:

void main(){
char* shell = getenv("MYSHELL");
if (shell)
    printf("0x%x\n", (unsigned int)shell);
}

Выплюнул 0xbffffe82.Когда я использовал его как часть моей атаки на ret-to-libc, адрес меняется (хотя и с очень небольшим смещением). Почему это происходит?

Также, когда я изменяю имя файла двоичного файла и использую ранее успешный адрес, он не будет работать, и он был перемещен на другой адрес.Зачем?Другими словами, Какое отношение имеют двоичные имена и адреса переменных среды? Является ли это защитой от bash?Как это отключить?

Примечание: это не домашняя работа.

1 Ответ

1 голос
/ 16 октября 2011

Расположение стека при запуске программы задокументировано здесь .Должно быть очевидно, почему изменение названия программы (действительно длины) меняет компоновку.

...