我正在使用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的保护功能吗?如何关闭它?
注意:这不是作业。