我在禁用ASLR的Linux机器上。在二进制文件上运行ldd会得到以下结果:我正在尝试为旧的CTF挑战构建ROP链,我想从库中获取小工具。我想知道该库的基地址,以便可以将其添加到小工具的偏移量中。

评论

如果您仅出于娱乐目的而创建ROP,则可以仅使用-static选项编译二进制文件。它将把libc静态链接到可执行文件,从而大大增加了潜在小工具的数量。

@blahfish:不值得自己回答,但是看看这个

#1 楼

实际上,ldd正在动态加载库以列出所需的库。因此,在此运行中,您可以说libc.so.6已加载到0xb7e5c000,但您不能保证总是如此。即使没有ASLR,它也主要取决于库的加载顺序,这可能因一次运行而有所不同。无论如何,它很可能是第一个加载的库,您可以放心地假设它大部分时间将在此地址加载。

#2 楼

是的,该二进制文件的libc.so.6的基址应为0xb7e5c000。您可以在应用程序运行时通过选择/proc/<pid>/maps来对此进行验证。

评论


嗯这与恐怖的答案相矛盾。

–烛光
13年5月3日在16:31

恐怖显然给出了更详细的答案;当我输入我的信息时,他将其发布了,否则我会独自离开。 :)我看不出太多矛盾。如他所说,对于libc而不是ASLR,该地址应该相同。 ASLR之前的ret2libc和ROP漏洞通常依赖于libc的地址不变。

–devttys0
13年5月3日在16:44



@Mellowcandle:我同意devttys0,我们的两个答案都得出相同的结论。我只是试图更加准确地考虑要考虑的假设(以及原因)。

–恐怖
13年5月3日在20:46

我同意你的看法。删除我的评论...

–烛光
13年5月4日在5:27