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 | |
这个值是puts在libc.so.6文件中的固定偏移
ret2libc
http://example.com/2025/03/03/ret2libc-1/