【发布时间】: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