gpt4 book ai didi

linux - libc 函数位置在 fork 进程之间发生变化?

转载 作者:太空宇宙 更新时间:2023-11-04 09:59:31 25 4
gpt4 key购买 nike

在我得到的 CTF 风格练习中,有一个服务器使用 fork() 和一个 exec 函数为每个客户端连接运行二进制文件。我能够在二进制文件中找到一个漏洞,该漏洞允许我调用任意地址并泄露信息。我想我会用它来从进程的导入表中泄露一个 libc 函数(比如 printf)的地址,然后用它来找到系统的地址并运行它。我的假设——我在网上阅读的所有内容都强化了这一假设——ASLR 只随机化了 libc 在父进程中的位置,所有子进程都应该有相同的位置。所以我应该能够在一个连接中泄露地址并在另一个连接中使用它。但是我似乎每次都得到不同的 printf 地址。在本地运行我也可以使用 GDB 并确认地址每次都更改。那么这是怎么回事?

最佳答案

让你失望的不是 fork ,而是 exec。当进程执行 exec 时,它会获得一个全新的地址空间,从而丢失它已加载的所有动态库,包括 libc。动态链接器加载新程序需要的库,给它们新的地址。每位执行官都有机会再次随机化库地址。

关于linux - libc 函数位置在 fork 进程之间发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57509062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com