ret2libc

libc基地址 + 函数偏移量 = 函数真实地址

问题是==怎么找libc基地址==呢?
=> 泄漏一个函数的真实地址

有时间了解一下 libc的延迟绑定技术 got表-plt表

泄漏一个函数的真实地址
=> 一般方法是采用==got表泄漏==
以puts函数为例
只要之前执行过puts函数,got表里存放着的就是puts函数的真实地址了,
我们==得到puts函数的got地址==后,可以把这个地址作为参数传递给puts函数,则会把这个地址里的数据,即puts函数的真实地址给输出出来
=> 得到了函数的真实地址

system地址 = 基地址 + system偏移量
“/bin/sh”地址 = 基地址 + “/bin/sh”偏移量


GOT

存放动态链接库函数地址的内存区域


PLT

负责跳转到GOT表


libc.so.6是共享库(shared library)
它不会在内存中固定加载,而是动态加载到某个随机地址(受ASLR影响)

1
2
libc = ELF("/lib/x86_64-linux-gnu/libc.so.6")
print(hex(libc.sym["puts"]))

这个值是putslibc.so.6文件中的固定偏移



ret2libc
http://example.com/2025/03/03/ret2libc-1/
作者
yvyvSunlight
发布于
2025年3月3日
许可协议