一、题目
本实验的学习目标是让学生练习课堂上学到的缓冲区溢出漏洞的知识,从而获得漏洞的第一手经验。缓冲区溢出是指程序试图将数据写入预先分配的固定长度缓冲区边界之外的情况。恶意用户可以利用这个漏洞改变程序的流程控制,甚至执行任何代码。这个漏洞是由数据存储(如缓冲区)和控件存储(如返回地址)的混合引起的:数据部分的溢出会影响程序的控制流,因为溢出会改变返回地址。 本实验将提供四个不同的服务器,每个服务器运行一个带有缓冲区溢出漏洞的程序。实验任务是开发一个使用漏洞并最终获得这些服务器的程序root权限。除了这些攻击实验,缓冲区溢出攻击的几种对策也将被测试。学生需要评估这些计划是否有效,并解释原因。
二、过程
一、Level 1 Attack 1.准备: 在server-code在文件路径中打开命令线,输入make;make install;
执行dcbuild和dcup命令
关闭预防机制:memory randomization
2.两次打印的结果一致,输出地址为0xffffxxxx,则说明memory randomization已关闭
3.先尝试传输exploit.py文件,结果如图所示,可见失败
4.修改exploit.py文件: 编写shellcode如图:
利用ebp 和 Buffer address 计算地址ret和offset,修改如图:
5.运行后传输badfile,若出现(_) SUCCESS SUCCESS (_)这意味着成功。
6.修改exploit.py新建命令行窗口输入文件nc -l -p 7070打开监控,在另一个窗口向前server发送badfile文件、监听窗口获取以下内容,说明成功获取Revere Shell;
二、Level 2 Attack 1.输入新窗口echo hello | nc 10.9.0.6 9090
得到结果如图:
2.修改exploit2.py文件ret和s的值,不知道大小的处理 buffer。 解决方法由于不知offset一一尝试。
3.运行后传输文件,得到结果表示成功:
三、Level 3 Attack 1.输入新窗口echo hello | nc 10.9.0.7 9090连接如下图所示:
2.修改exploit3.py文件如下图所示,
4.运行后传输文件,得到结果表示成功:
四、Level 4 Attack 1.输入新窗口echo hello | nc 10.9.0.8 9090连接如下图所示:
2.修改exploit4.py文件如下图
3.运行后传输文件,得到结果表示成功:
五、level5 1.随机打开地址
2.执行nc -lnv 7070开启监听
3.更改exploit.py文件为reverse shell,总用时4秒。
4.监听窗成功后返回监听窗口shell
六、level6 进入 server-code 执行文件夹gcc -DBUF SIZE=100 -DSHOW_FP-z execstack -static -m32 -o stack-L1 stack.c。去除 -fno-stack-protector 编译 stack.c,并将 badfile 作为输入,可以看到检测到 stack smashing。 进入 shellcode 去除文件夹 -z execstack 编译call_shellcode.c 并且运行,可见栈不再可执行。