为缓冲区溢出攻击查找/bin/bash的地址

为缓冲区溢出攻击查找/bin/bash的地址,bash,buffer-overflow,Bash,Buffer Overflow,我正在尝试ret-to-libc攻击,并使用以下代码获取环境变量/bin/bash的地址 #include <unistd.h> int main(void) { printf("bash address: 0x%lx\n", getenv("SHELL")); return 0; } #包括 内部主(空) { printf(“bash地址:0x%lx\n”,getenv(“SHELL”); 返回0; } 当我使用gdb的x命令检查此代码返回的地址是否正确时,它会在第一次

我正在尝试ret-to-libc攻击,并使用以下代码获取环境变量/bin/bash的地址

#include <unistd.h>
int main(void)
{

  printf("bash address: 0x%lx\n", getenv("SHELL"));
 return 0;
}
#包括
内部主(空)
{
printf(“bash地址:0x%lx\n”,getenv(“SHELL”);
返回0;
}

当我使用gdb的x命令检查此代码返回的地址是否正确时,它会在第一次正确显示。但是当执行其他程序时,此地址会自动更改。我应该如何保持此环境变量的地址不变?我使用此地址进行缓冲区溢出,但由于每次运行时它都会不断变化,因此攻击永远不会成功。有什么建议吗?

您必须禁用ASLR才能不更改地址

echo 0 | tee /proc/sys/kernel/randomize_va_space

简单地说,你不能。没有什么能保证环境变量的地址是固定的。Wtf是“环境变量
/bin/bash
”?啊,我明白了。但是使用一些未知的
$SHELL
不会比使用自己的常量
“/bin/sh”
更好。