今天继续学习PWN的攻击方式。
之前学习的攻击方式,都是在理想环境下实现的。比如,系统会提供一个现成的system或者execv函数来实现劫持。
那么换到实际的环境中,应该如何操作呢。
其实,如果我们拿到libc中函数的地址,我们可以直接调用libc中的函数,然后传递参数,使用call 函数调用。
接下来问题就在如何传参了。
思考:如果是直接move然后+call 的话,那就相当于是ret2shellcode,在还没法写shellcode代码的情况下,我们需要考虑别的办法。
后来我也不知道怎么做,学习其他博主的博客才略微知道一点:
考虑这种形式的栈溢出:将返回地址覆盖为这样一段代码:pop rdi ret --- /bin/sh地址-----system。
这种思路的话就是:函数到放回地址,首先执行pop rdi ret ,此时栈帧到了/bin/sh地址,它就会pop出来给到rdi,rsp到了system ,然后ret ,跳转到system,相当于是在/bin/sh地址执行了system函数。
这样就借助这个ret的操作实现了system的执行(不知道我这么理解对不对)。
这部分难了起来,进度慢了不少。我自己慢慢体会吧。