每个目录的环境变量地址不同

时间:2015-12-15 11:07:37

标签: bash shell memory makefile libc

我写了一个返回libc的攻击。我的脚本检索system(),exit()和shell地址,如下所示(它是一个调用某些c程序的sh脚本):

为xh shell创建环境变量:     export egg=/bin/xh

检索xh shell的地址:printf("%p\n", getenv("egg"));

获取system()的地址:void (*system_addr)(int) = dlsym(RTLD_NEXT, "system");

获取exit()的地址:void (*exit_addr)(int) = dlsym(RTLD_NEXT, "exit");

然后我使用正确数量的填充符+ system() +地址exit() +地址/bin/xh溢出缓冲区。

当我运行我的漏洞利用(./exploit.sh)时,xh shell被正确删除。问题是当我创建一个简单的Makefile来运行我的脚本时,我遇到了分段错误。 Makefile看起来像这样:

all:
./exploit8.sh

我的猜测是环境变量的地址取决于调用程序的名称,如this answer中所述。这是真的,因为我测试了更改易受攻击程序的名称,我必须提供的地址取决于名称的(长度)。

我需要一种方法来找到egg的正确地址,该地址独立于易受攻击程序的名称。有没有一种优雅的方法来执行此操作而不是强制执行直到xh shell被删除?

我还读到system()exit()的地址随make变化,但我不认为这是我的问题,因为我是动态的加载我的漏洞利用中的地址。

修改

我只是试图打印egg的地址然后通过检查附近的所有256 * 256地址来强制强制,但没有地址到达现场。使用egg时,make的地址似乎完全不同。

0 个答案:

没有答案