缓冲区溢出

 

缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写。

1.输入命令安装一些用于编译 32 位 C 程序的软件包:

缓冲区溢出_bash

 

 

2.初始设置
关闭地址随机化后,linux 系统中,/bin/sh 实际是指向 /bin/bash 或 /bin/dash 的一个符号链接。为了重现这一防护措施被实现之前的情形,我们要使用另一个 shell 程序(zsh)代替 /bin/bash,并在32位环境中使用bash:

缓冲区溢出_数据_02

 

 3.漏洞程序
在 /tmp 目录下新建一个 stack.c 文件并进行编译:

缓冲区溢出_缓冲区溢出_03

 

 编译该程序,并设置 SET-UID缓冲区溢出_bash_04

 

 4.攻击程序
在 /tmp 目录下新建一个 exploit.c 文件:

缓冲区溢出_符号链接_05

 

 进行gdb调试并str 的起始地址:

缓冲区溢出_bash_06

 

 

缓冲区溢出_缓冲区溢出_07

 

 缓冲区溢出_符号链接_08

 

缓冲区溢出_符号链接_09

 

 

 

 

5.攻击结果
编译 exploit.c 程序,再运行攻击程序 exploit,再运行漏洞程序 stack:

缓冲区溢出_bash_10