设法泄漏将函数地址放在libc中,但无法获取其他函数的地址



我目前正在学习二进制开发。现在我正在使用一个容易受到堆栈缓冲区溢出影响的二进制文件(Linux)(启用了 ASLR 和 NX,并且通过网络与二进制进行交互),并且我开发了一个 2 阶段漏洞,第一阶段泄漏了 libc 中puts函数的地址(从 GOT 并通过调用puts发送地址来泄漏), 第二阶段使用泄露的地址来计算几个 ROP 小工具的地址和用于获得远程代码执行的execve函数。

问题是:

我在 IDA 中调试二进制文件并找到putsexecve的地址,这样我就可以计算execve的偏移量puts。假设此偏移量为x.然后,当使用该漏洞时,阶段 1 泄漏puts的地址,然后由puts + x找到execve的地址。这个漏洞在我安装的 Linux 上工作得很好,但我注意到在其他版本的 Linux 中,libc 中 put -> execve 的偏移x是不同的(假设因为它是 libc 的不同版本)。所以我的问题是,如何使用泄露的libc地址找到另一个函数的地址,以获得具有未知偏移量的不同Linux风格。

这个漏洞在我的Linux安装上工作得很好,但我注意到在其他版本的Linux中,libc中放置->execve的偏移量x是不同的(假设因为它是libc的不同版本)。

正确:地址将根据确切的 GLIBC 源、使用的编译器和链接器的确切版本、编译标志等而变化。

简而言之,您可以知道特定 Linux 发行版中特定版本的libc6包的偏移量,但在任何给定日期都有 100 种不同的变体常用。

所以我的问题是,如何使用泄露的libc地址找到另一个函数的地址,以获得具有未知偏移量的不同Linux风格。

你不能。

你唯一能做的就是

  • 下载通用发行版的通用版本的 GLIBC,计算每个发行版的偏移量,并逐个尝试,或者
  • 猜测系统之间的偏移量差异不大(您可以通过执行上述步骤确认这是否确实如此),然后只需尝试[x - N, x + N]之间的所有值(其中N是可能偏差的猜测最大值)。

最新更新