缓冲区溢出实验#
实验简介##
缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写。
实验过程##
进入32位环境###
关闭地址空间随机化这一功能###
设置zsh程序###
linux系统中,/bin/sh实际是指向/bin/bash或/bin/dash的一个符号链接。为了重现这一防护措施被实现之前的情形,我们使用另一个shell程序(zsh)代替/bin/bash。下面的指令描述了如何设置zsh程序:
添加stack.c文件###
把以下代码保存为“stack.c”文件,保存到 /tmp 目录下。代码如下:
设置SET-UID###
找到shellcode在内存中的地址###
计算shellcode的地址:0Xffffd460 + 0X64 = 0Xffffd4c4
添加exploit.c文件###
把以下代码保存为“exploit.c”文件,保存到 /tmp 目录下。代码如下:
发起攻击###
先运行攻击程序exploit,再运行漏洞程序stack,观察结果:
可以看到获取了root权限