Ret2libc

来源:互联网 发布:哪里购买域名比较好 编辑:程序博客网 时间:2024/05/28 23:22

昨晚同学问了关于ret2libc时参数布置的问题,今天在此记录
假设熟悉stack overflow
Ps:ret2libc是为了对抗DEP/NX产生

栈的布置

在说明ret2libc之前,栈的布置需要提前说明一下,以以下简单代码为例

#include <stdio.h>int trap(int x){    int y=0;    y+=x;    return y;}int main(int argc,char **argv){       int z=5;    trap(5);    return 0;}

在执行trap(5)之后的栈布局就像是这样

ebp

注意5是在ebp+8这个位置的。

为了对抗DEP/NX,覆盖后的ret-addr必须是可以执行的内存位置,所以引入了ret2libc。

在libc.so中,有一个system()函数,如果我们能把ret-addr覆盖到这里就好了,system需要一个参数,常见的有”/bin/bash”,这个参数又该放在哪里?

假如我们现在成功的覆盖为system,考虑现在的esp和ebp位置
9

当下一步pop eip执行之后,我们就会进入到system()
而system()内执行的是

push ebpmov ebp,esp...

所以,ebp会指向上方的over flow,所以,在str-addr就是我们要放置”/bin/bash”的地方啦~(ebp+8)

而下方的overflow我们会放置exit()的地址,因为system()执行完毕后,下一个pop eip的就是这里了

既然都说到了ret2libc,那么ROP也不远啦~有空再来说说ROP

详细ret2libc资料,请参考此pdf

0 0
原创粉丝点击