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

实验要求

对一个可执行程序“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

posted @ 2020-12-10 18:09  CrosseaLL  阅读(608)  评论(0编辑  收藏  举报