美文网首页CTF-PWN网络安全
PWN入门第三课(Off-By-One 漏洞)

PWN入门第三课(Off-By-One 漏洞)

作者: Magicknight | 来源:发表于2018-04-10 20:48 被阅读77次

    详情见大神的博客:https://sploitfun.wordpress.com/2015/06/07/off-by-one-vulnerability-stack-based-2/

    漏洞程序:

    //vuln.c
    #include <stdio.h>
    #include <string.h>
    
    void foo(char* arg);
    void bar(char* arg);
    
    void foo(char* arg) {
     bar(arg); /* [1] */
    }
    
    void bar(char* arg) {
     char buf[256];
     strcpy(buf, arg); /* [2] */
    }
    
    int main(int argc, char *argv[]) {
     if(strlen(argv[1])>256) { /* [3] */
      printf("Attempted Buffer Overflow\n");
      fflush(stdout);
      return -1;
     }
     foo(argv[1]); /* [4] */
     return 0;
    }
    

    漏洞程序当输入的字符串等于256的时候,从bar函数可以知道,字符串的截断字符\0会覆盖掉ebp,导致ebp的最低有效位为00.


    栈空间

    从栈空间我们知道,返回ip的地址为ebp+4。需要计算返回地址填充的位置。

    使用gdb -q vuln3调试:

    解释:-q参数表示不显示gdb版本信息。


    diasa main

    我们看下发生拷贝字符函数的汇编代码


    disas bar
    从这里可以看出,buff偏离ebp 0x100。现在要计算出此时的ebp。
    在拷贝处,下断点进行调试。
    下断点调试,获取ebp的值

    从寄存器看到此时的ebp=0xffff020。

    那么当ebp返回时,由于最低有效位被填充00,其ebp的值为0xffff000,而返回地址从栈空间可以看出来为0xffff004.


    gdb调试获取ebp的值

    那么返回地址前的填充长度=0xffff004-(0xffff020-0x100)=0xe4

    按照大神博客里面填充,我的shellcode放不下,放到前面发现获取不到shell。猜测是因为esp=0xffff008,放前面没有栈空间了。


    屏幕快照 2018-04-10 下午9.26.46.png 屏幕快照 2018-04-10 下午8.34.01.png

    相关文章

      网友评论

        本文标题:PWN入门第三课(Off-By-One 漏洞)

        本文链接:https://www.haomeiwen.com/subject/hninhftx.html