Я использую 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?Как это отключить?
Примечание: это не домашняя работа.