【问题标题】:Getting the memory address of a function in linux x86在linux x86中获取函数的内存地址
【发布时间】:2021-06-08 16:19:25
【问题描述】:
我已经看到了很多将函数/代码的内存地址写入 EIP 的漏洞,我想知道是否有一种方法(可能使用 gdb 或其他东西)可以用来确定某些 shellcode 的内存地址我在缓冲区溢出测试中使用并使用 python struct 库将其打包到返回指针中。
现在,我正在使用 gdb 检查堆栈并在我的代码中使用 NOPS 来找出函数的地址,但这实际上只是一个猜谜游戏。有谁知道我能做什么?
【问题讨论】:
标签:
linux
exploit
buffer-overflow
【解决方案1】:
在 GDB 中,您可以检查函数并从其符号名称中获取其地址:x myFun
然而,在你的漏洞利用中硬编码一个函数地址基本上是在押注二进制地址空间永远不会改变的可能性,ASLR 是一种保护,当你试图硬编码一个内存地址时会妨碍你,因为它会随机化某些段运行时的内存。
当我尝试使用 ret2shellcode 来利用二进制文件时,我通常会尝试用我自己的输入填充缓冲区并在该输入处设置一个断点,然后我尝试确定它在堆栈中的位置和大小,是否会是否适合我的 shellcode 取决于您的缓冲区大小。有时你可以把 shellcode 放在 EIP 之前,有时你可以把它放在后面。这一切都取决于您的二进制文件,并且假设有一个基本的 ret2shellcode 漏洞利用。