一、实验题目

本实验的学习目标是让学生将从课堂上学到的有关缓冲区溢出漏洞的知识进行实践,从而获得有关该漏洞的第一手经验。缓冲区溢出是指程序试图将数据写入预先分配的固定长度缓冲区边界之外的情况。恶意用户可利用此漏洞改变程序的流控制,甚至执行任意代码。此漏洞是由于数据存储(如缓冲区)和控件存储(如返回地址)的混合造成的:数据部分的溢出会影响程序的控制流,因为溢出会改变返回地址。
本实验将提供四台不同的服务器,每台服务器运行一个带有缓冲区溢出漏洞的程序。实验任务是开发一个利用漏洞的程序,并最终获得这些服务器上的root权限。除了进行这些攻击实验之外,还将试验几种针对缓冲区溢出攻击的对策。学生需要评估这些计划是否有效,并解释原因。

二、实验步骤

Task1: Get Familiar with the Shellcod

  1. 对 shellcode_32.py 进行修改,使其能够删除文件
    在这里插入图片描述
  2. 新建 tmpfile 文件并运行 shellcode,此过程中需赋予shellcode_32.py和shellcode_64.py权限,过程和结果如下:
    在这里插入图片描述
  3. 执行完后,tmpfile 也被删除了。

Task2: Level-1 Attack

  1. 进入 server-code 文件夹下,执行命令
$ make
$ make install
  1. 然后返回其根目录,执行命令启动 docker
$ dcbuild
$ dcup

在这里插入图片描述
3. 进入 attack-code 文件夹,执行nc 10.9.0.5 9090
在这里插入图片描述
4. server显示
在这里插入图片描述
5. 修改exploit.py为下图并执行

在这里插入图片描述
在这里插入图片描述
6.得到
在这里插入图片描述

Task 3: Level-2 Attack

  1. 先用nc 10.9.0.4 9090建立连接
    在这里插入图片描述
  2. 修改exploit.py,其中ret 应当大于等于 0xffffd708+308,但应当保证 shellcode 都在 payload 内,offset 为 100-300 之间的某个值
    在这里插入图片描述
  3. 然后执行exploit.py,再执行nc 10.9.0.4 9090
    在这里插入图片描述
    在这里插入图片描述

Task 4: Level-3 Attack

  1. 进行连接
    在这里插入图片描述
  2. 修改 exploit.py,其中, shellcode 即为 shellcode_64.py 中的 shellcode
    start 设定为一个较小的值,可以直接取0
    ret = rbp + n \text{ret}=\text{rbp}+nret=rbp+n
    ebp 就是刚刚 echo hello 中得到的 rbp,因为关闭了地址随机化,所以每次都一样
    n ∈ [ buffer , buffer + start ] n\in[\text{buffer},\text{buffer}+\text{start}]n∈[buffer,buffer+start]
    在这里插入图片描述
  3. 执行exploit.py得到
    在这里插入图片描述

Task 5: Level-4 Attack

  1. 进行连接
    在这里插入图片描述
    在这里插入图片描述
  2. 修改 exploit.py,其中,ret 取一个较大的值:1200
    offset = \text{offset}=offset=0x00007fffffffe700− -−0x00007fffffffe6a0+8
    在这里插入图片描述
  3. 执行exploit.py得到
    在这里插入图片描述

查找域名并存入域名表

  1. 打开地址随机化
    在这里插入图片描述
  2. 各执行两次如下命令:
    在这里插入图片描述
    在这里插入图片描述
  3. 可以看到,每次地址都不相同,导致攻击困难。使用 Task2 中 reverse shell 的 exploit.py 代码,执行命令并打开终端进行监听
$ ./exploit.py
$ ./brute-force.sh

在这里插入图片描述
4. 执行十多万次后也并未获得权限
在这里插入图片描述

Tasks 7: Experimenting with Other Countermeasures

  1. 进入 server-code 文件夹,去除 -fno-stack-protector 编译 stack.c,并将 badfile 作为输入,可以看到检测到了 stack smashing
    在这里插入图片描述

  2. 进入 shellcode 文件夹,去除 -z execstack 编译 call_shellcode.c 并运行
    在这里插入图片描述
    可以看到,栈不再运行。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐