• 缓冲区溢出实验(20191213兰毅达)


    实验名称:缓冲区溢出

    一、实验简介

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

    二、实验步骤

    1.实验准备
    输入命令安装一些用于编译 32 位 C 程序的软件包:



    关闭地址随机化后,linux 系统中,/bin/sh 实际是指向 /bin/bash 或 /bin/dash 的一个符号链接。为了重现这一防护措施被实现之前的情形,我们要使用另一个 shell 程序(zsh)代替 /bin/bash,并在32位环境中使用bash:

    3.漏洞程序
    在 /tmp 目录下新建一个 stack.c 文件并进行编译:
    编译该程序,并设置 SET-UID:

    4.攻击程序
    在 /tmp 目录下新建一个 exploit.c 文件:
    进行gdb调试并str 的起始地址:

    在地址 0x080484ee 处设置断点:

    最后获得的这个 0xffffd4c0 就是 str 的地址。
    根据语句 strcpy(buffer + 100,shellcode); 我们计算 shellcode 的地址为 0xffffd4c0 + 0x64 = 0xffffd524,再修改 exploit.c 文件,将 x??x??x??x?? 修改为计算的结果 x24xd5xffxff:
    5.攻击结果
    编译 exploit.c 程序,再运行攻击程序 exploit,再运行漏洞程序 stack:

    攻击成功,获得了root权限。

  • 相关阅读:
    Java:synchronized关键字引出的多种锁
    Java:Web Service初入门
    Java:HashMap原理与设计缘由
    Java:集合类的数据结构
    NoSQL数据库兴起
    Hadoop介绍与安装
    Java:泛型的理解
    《代码整洁之道》总结和笔记
    shell运算
    shell变量
  • 原文地址:https://www.cnblogs.com/1301cn/p/15472668.html
Copyright © 2020-2023  润新知