环境变量地址的随机化

时间:2011-10-16 00:02:16

标签: linux bash environment-variables memory-address

我正在使用bash。我已经使用

关闭了Ubuntu 11.04中的ASLR
#sysctl -w kernel.randomize_va_space=0

我已经使用

从shell导出了一个变量
$ 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 个答案:

答案 0 :(得分:1)

程序启动时的堆栈布局记录为here。很明显,为什么更改程序名称(确实是长度)会改变布局。