【问题标题】:Randomization of environment variable addresses环境变量地址的随机化
【发布时间】:2011-10-16 00:02:15
【问题描述】:

我正在使用 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的保护特性吗?如何关闭此功能?

注意:这不是家庭作业。

【问题讨论】:

    标签: linux bash environment-variables memory-address


    【解决方案1】:

    程序启动时的堆栈布局记录在here。为什么更改程序的名称(实际上是长度)会改变布局,这应该是显而易见的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-31
      • 2016-10-10
      • 1970-01-01
      • 2010-09-23
      • 1970-01-01
      • 2014-10-14
      相关资源
      最近更新 更多