预备知识
在上一节,我们学习了GOT、PLT表,Linux的延迟绑定机制。
1、那么,延迟绑定对我们的学习有什么不一样的启示呢
GOT表
- 一个绝佳的攻击目标
- 包含libc函数真实地址,用于泄漏地址
- 覆盖新地址到GOT表,劫持函数流程
PLT表
- 不用知道libc函数真实地址,使用PLT地址即可调用函数
2、Libc
- Libc就是Linux下的C函数库,其中包含着各种常用的函数,在程序执行时才被加载到内存中
- Libc一定可执行,跳转到Libc中的函数可以绕过NX保护
3、ret2libc的使用条件
- 泄漏Libc函数地址的条件:程序有输出函数,如puts、printf、write;要输出函数的目的是要泄漏地址
- 实现:设置好输出函数的参数为某函数GOT表地址;GOT表中保存已调用过的函数的真实地址
4、ret2libc的内存布局,这块要好好理解,理解好了下面才好写Exp
这里的内存布局,参数1、2、3都是write()函数的参数,刚接触的话,难理解的是这个预留返回地址,其余的布局我们都很熟悉了
这里通过一个例子来理解预留返回地址