美文网首页
栈溢出 初级教学

栈溢出 初级教学

作者: Zero_0_0 | 来源:发表于2018-09-20 22:16 被阅读0次

    一.初探栈溢出

    1.1 在首先在文件夹里面创建一个c的程序 StackOF.c 内容如下图

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
        puts("SO plz qive me your shellcode");
            char buffer[256];
            memset(buffer,0,256);     #清除缓冲区数据
            read(0,buffer,256);        #输入
            vul(buffer);               #调用
            return 0;    
    
    }
    void vul(char *msg)
    {
        char buffer[64];
        memcpy(buffer,msg,128);
        return;
    
    }
    
    

    memset: 内存初始化
    buffer: 缓冲一般指指针或者数组
    vul:函数的调用
    strcpy
    1 strcpy只能复制字符串。
    2 strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束。
    3 strcpy不仅复制字符串内容,还会复制字符串的结束符。
    1.2 在终端 输入vim StackOF.c创建文件 使用gcc -c ./stackOF.c完成编译。和1.3中的编译是一个效果
    1.3 gcc编译:终端输入gcc -m32 -no-pie -fno-stack-protector -z execstack -o pwnme stackOF.c 将生成一个pwnme的组件

    图片.png
    1.4调试 在终端输入gdb pwnme
    1.5在vul函数下断点:breakpoint vulb vul
    进入汇编的窗口如下命令 图片.png
    1.6运行函数r或者run都也以 稍等一会会 输入ni单步进入找到函数的入栈口,和出栈口。计算栈的空间的大小。 图片.png 图片.png
    1.7使用命令查看汇编代码的地址i r edx查看入栈口的初地址和结束地址 用高字节-低字节得出 76
    图片.png 1.buffer的起始地址 = 0xffffd110
    2.buffer的终止地址 = 0xffffd15c
    buffer的差值为76

    二. 分析数据

    注:ldd +程序查看文件的偏移地址是否一直在发生变化
    1.加一条命令关闭系统的的地址随机化命令
    echo 0 > /proc/sys/kernel/randomize_va_space
    2.在终端运行pwnme文件试试

    图片.png
    3.查看漏洞开启的缓冲策略
    图片.png

    三.构建填充数据

    思路;当客户输入字符串,当字符串超出给定的空间就发生,数据溢出。
    我们可以可以构建一个数据段,让我们想要的数据安全的执行下来,libc文件就是我们需要查找的构建数据重要的参数。
    看看我偷瞄的图 嘻嘻

    图片.png

    构建完成如下 图片.png

    根据图我们可以知道,我们需要构建的一个可以填充的数据流
    注;buffer=填充字节+返回地址+shellcode

    四查找填充的数据的字节大小

    注:首先引入libc文件,这是c语言在编译的是候生成的一个内置文件
    1.怎么找到libc文件?
    注:先编译-下断点-运行-查找libc文件的位置
    2.gdb一种编译方法

    图片.png 图片.png

    相关文章

      网友评论

          本文标题:栈溢出 初级教学

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