• 缓冲区溢出实验要求&指导


    实验要求

    对一个可执行程序“bufbomb”实施一系列5个难度递增的缓冲区溢出攻击缓冲区溢出攻击(buffer overflow attacks)——
    即设法通过造成缓冲区溢出来改变该可执行程序的运行内存映像(栈帧
    例如将给定的字节序列插入到其本不应出现的内存位置。


    • 5个难度级:
      • smoke (level 0)
      • fizz (level 1)
      • bang (level 2)
      • boom (level 3)
      • kaboom (level 4)
    • smoke级最简单,kaboom级最困难


    实验资料

    • 实验数据包:bufferlab-handout.tar
    • 解压命令:tar xf bufferlab-handout.tar
    • 包含下列文件:
      • bufbomb:实验中实施缓冲区溢出攻击的目标程序
      • makecookie

        该程序基于命令行参数(用户号/学号)产生一个唯一的由8个16进制数字组成的字节序列(例如0x1005b2b7)
        称为“cookie”,用作实验中需要置入栈中的数据之一并区分不同学生的实验
        ./makecookie 你的学号,即可生成你的唯一的cookie

      • hex2raw:字符串格式转换程序


    目标程序介绍

    • bufbomb程序接受下列命令行参数:
      • userid

        以给定的用户ID“userid”(例如学号)运行程序。
        每次在运行程序时均应指定该参数
        因为bufbomb程序将基于userid决定内部使用的cookie值(同makecookie程序的输出)
        在bufbomb程序内部,一些关键的栈地址取决于userid所对应的cookie值。

      • -h:打印可用命令行参数列表

      • -n:以“Nitro”模式运行,专用于Level 4实验阶段(栈状态会不一样,自己体会)



    一个小小的演示

    实验前的准备

    攻击方法

    一点点关于字符串的说明

    设攻击字符串包含于文件Solution.txt中,
    可使用如下命令测试攻击字符串在bufbomb上的运行结果,并与相应难度级的期望输出对比,以验证通过与否
    cat solution.txt | ./hex2raw | ./bufbomb -u [userid]
    其中solution.txt是你的攻击字符串, hex2raw是将你的字符串由16进制状态转为文本然后输出到输入
    userid 请填 你的学号

    简而言之,你需要构造的是用十六进制表示的字符串(注意大端小端的区别)并用工具来输入

    Somke的演示


    准备工作

    首先进行的是前四关的分析,这时候。缓冲区的大小是确定的
    数组的首地址也是确定,因此先进行一些准备工作。
    我们首先进行代码的分析:

    可见在栈内为数组开辟的大小为50字节的内存。所以为了覆盖返回地址
    应该写入50+4+4也就是58个字节的数据,其中最后四个字节是要篡改的地址。

    • 首先在反汇编文件内找到smoke函数的首地址,也就是程序开始的地址


    可见,smoke的首地址是08048ba1,所以将这个值写在第55到58个字节就能实现攻击。

    • 考虑到小端排序,写出了以下攻击文件。

    • 运行检验程序,成功攻击


    温馨提示

    自己找找getbuf的传入参数等是什么
    过程调用的栈的状态自己看看

    感谢南大教学ppt, 23333

  • 相关阅读:
    EntityFramework
    在项目中整合log4net日志模块
    java Socket编程
    java动态代理
    多项式计算的Horner法则(秦九韶法则)
    1.6打印字符串排列
    1.5 输出整数N的二进制1的个数(递归)
    1.3输出任意实数
    Java super关键字调用父类的方法疑惑
    vs2010配置MPI
  • 原文地址:https://www.cnblogs.com/Crossea/p/14115773.html
Copyright © 2020-2023  润新知