zoukankan      html  css  js  c++  java
  • 缓冲区溢出漏洞实验

    缓冲区溢出漏洞实验

    • 实验原理:缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写。

    1.实验准备

    输入命令安装一些用于编译 32 位 C 程序的软件包:

    sudo apt-get update
    sudo apt-get install -y lib32z1 libc6-dev-i386 lib32readline6-dev
    sudo apt-get install -y python3-gdbm gdb
    
    • Ubuntu 和其他一些 Linux 系统中,使用地址空间随机化来随机堆(heap)和栈(stack)的初始地址,这使得猜测准确的内存地址变得十分困难,而猜测内存地址是缓冲区溢出攻击的关键。因此本次实验以下命令关闭这一功能:
    • ubuntu系统的shell还有一个保护措施,即使在溢出后,也让shell没有高级权限,所以需要将这个措施关闭,使用删除现有的sh二进制文件,改为使用较早的zsh实现使用

    2.漏洞程序

    • 在 /tmp 目录下新建一个 stack.c 文件,写入代码并执行以下命令:

    sudo su
    gcc -m32 -g -z execstack -fno-stack-protector -o stack stack.c
    chmod u+s stack
    exit
    进行代码编译

    3.攻击程序

    • 在 /tmp 目录下新建一个 exploit.c 文件,写入代码,这个代码的目的是攻击刚才的漏洞程序,并通过攻击获得 root 权限。使用以下命令进入 gdb 调试:
    gdb stack
    disass main  
    


    esp中的就是str的起始地址,所以我们在地址 0x080484ee 处设置断点。最后获得的这个 0xffffcd60 就是 str 的地址。计算 shellcode 的地址为 0xffffcdc4。再写入exploit.c 文件中。

    4.攻击结果

    • 编译exploit.c程序,运行漏洞程序stack。
  • 相关阅读:
    INTZ DX format
    多线程渲染
    BindVertexbuffer
    Lock flag DX
    Triple buffering and vsync
    可迭代对象和迭代器
    装饰器
    闭包函数
    名称空间和作用域
    函数对象
  • 原文地址:https://www.cnblogs.com/zhangwenying/p/15487769.html
Copyright © 2011-2022 走看看