缓冲区溢出
缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写。
实验过程
启动云主机
使用实验楼平台的云主机,是一个Ubuntu系统的云主机。开启系统后需要安装实验使用的软件包。
配置实验环境
Ubuntu系统使用地址空间随机化来随机堆和栈的初始地址,使得猜测准确的内存地址变得困难,提高了系统安全性。为完成实验目的,本实验先使用命令sudo sysctl -w kernel.randomize_va_space=0
关闭了这一功能。
同时,ubuntu系统的shell还有一个保护措施,即使在溢出后,也让shell没有高级权限,所以需要将这个措施关闭,使用删除现有的sh二进制文件,改为使用较早的zsh实现使用,使用ln指令相当于是创建了一个链接(符号链接:类似win下快捷方式)
使用vim编写漏洞程序和攻击程序
程序会读取一个名为“badfile”的文件,并将文件内容装入“buffer”。
编辑攻击程序。
进入调试
获得str的地址
根据所得的地址计算应填入的地址
修改地址
进行攻击
进行攻击并获得结果:
我们发现通过攻击已经获得了root权限。
缓冲区溢出练习
1、通过命令 sudo sysctl -w kernel.randomize_va_space=2 打开系统的地址空间随机化机制,重复用 exploit 程序攻击 stack 程序, 无法获得root权限.
2、将/bin/sh重新指向/bin/bash,重复攻击,无法获得root权限