• 缓冲区溢出漏洞实验 20199321


    缓冲区溢出漏洞实验

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

    缓冲区溢出漏洞实验的实验楼环境有问题,使用格式化字符串漏洞实验环境,并额外安装gdb。

    实验准备

    • 输入命令安装一些用于编译 32 位 C 程序的软件包
    sudo apt-get install gdb
    sudo apt-get update
    sudo apt-get install -y lib32z1 libc6-dev-i386
    sudo apt-get install -y lib32readline-gplv2-dev
    
    • 关闭使用地址空间随机化来随机堆(heap)和栈(stack)的初始地址功能
    sudo sysctl -w kernel.randomize_va_space=0
    
    • 设置 zsh 程序
    sudo su
    cd /bin
    rm sh
    ln -s zsh sh
    exit
    
    • 输入命令“linux32”进入32位linux环境,输入“/bin/bash”使用bash

    漏洞程序

    • 在 /tmp 目录下新建一个 stack.c 文件,程序会读取一个名为“badfile”的文件,并将文件内容装入“buffer”。
    • 编译该程序,并设置 SET-UID。
    sudo su
    gcc -m32 -g -z execstack -fno-stack-protector -o stack stack.c
    chmod u+s stack
    exit
    

    攻击程序

    • 在 /tmp 目录下新建一个 exploit.c 文件

    • 我们要得到 shellcode 在内存中的地址,输入命令

    • 设置断点

    • 根据 strcpy(buffer + 100,shellcode); 修改 exploit.c 程序,然后编译

    • 先运行攻击程序 exploit,再运行漏洞程序 stack,观察结果

    • 攻击失败,提示”段错误“,发现地址需要自己根据实际情况自行计算

    • 重新计算地址,更改exploit.c文件重新编译。计算 shellcode 的地址为 0xffffcdd0(十六进制) + 0x64(100的十六进制) = 0xffffce34(十六进制)

    • 重新进行攻击,成功

    实验总结

    据语句 strcpy(buffer + 100,shellcode); 我们计算 shellcode 的地址。际操作中的地址和实验楼实例的地址可能不一样,需要根据实际输出的结果来计算。一般情况下,缓冲区溢出会造成程序崩溃。在程序中,溢出的数据覆盖了返回地址。而如果覆盖返回地址的数据时另一个地址,那么程序就会跳转到该数据指定的地址,如果该地址存放的是一段精心设计的代码用于实现其他功能,这段代码就是shellcode。Set-UID是Unix系统中的一个重要的安全机制。当一个Set-UID程序运行的时候,它被假设为拥有者的权限。

  • 相关阅读:
    IEE754算法
    EQ控制卡二次开发(火凤凰、蓝精灵异步单双色控制卡卡)
    康耐德C2000开关量采集
    初次了解MVC框架模式
    jQuery常用事件
    jQuery做一个小小的移动图片的位置
    jQuery关于复选框的基本小功能
    WebRequest类: WebRequest类是.NET.Framework的请求/响应模型的抽象基类,用于访问Internet数据
    .net与三层的异同
    mvc基础
  • 原文地址:https://www.cnblogs.com/20199321zjy/p/12021584.html
Copyright © 2020-2023  润新知