CTF|HITCON-Training-master lab4 writeup (ret2libc题型)
做题做题前先看看ctfwiki上对ret2libc的原理描述
原理
ret2libc 即控制函数的执行 libc 中的函数,通常是返回至某个函数的 plt 处或者函数的具体位置(即函数对应的 got表项的内容)。一般情况下,我们会选择执行 system("/bin/sh"),故而此时我们需要知道 system 函数的地址。
思路
总体思路就是我们遇到没有system没有"/bin/sh"的文件
我们考虑用以下方法获取system函数的位置
- system 函数属于 libc,而 libc.so 动态链接库中的函数之间相对偏移是固定的。
- 即使程序有 ASLR 保护,也只是针对于地址中间位进行随机,最低的12位并不会发生改变。所以如果
所以我们只要知道了libc中某一个函数的真实地址,我们就可以通过system函数和这个函数之间的地址偏移来得到system函数的真是地址。
而对于如何知道某一个函数的真实地址,我们一般常用的方法是采用 got 表泄露,即输出某个函数对应的 got 表项的内容。当然,由于 libc 的延迟绑定机制,我们需要泄漏已经执行过的函数的地址。
延迟绑定
所谓延迟绑定,就是当函数第一次被调用的时候才进行绑定(包括符号查找、重定位等),如果函数从来没有用到过就不进行绑定。基于延迟绑定可以大大加快程序的启动速度,特别有利于一些引用了大量函数的程序.
对于lab4 我们看到文件里面一个叫“see something”的函数可以返回有一个函数的真实