这个实验是缓冲区溢出实验的进阶版,目的是攻破不可执行栈机制
经典的缓冲区溢出,存放恶意代码的位置在栈帧中,由于不可执行栈机制即使return到了恶意代码的正确位置,由于栈是不可执行的,恶意代码仍然无法被正确执行
如果将返回地址改成c库的system函数所在位置,就可以通过system函数执行自己想执行的恶意代码
本来这个实验还有execve版本的,由于本人太菜就没做了。。。
一.环境准备
1.关闭防御措施
关闭地址随机化
sudo sysctl -w kernel.randomize_va_space=0
将/bin/sh改为指向zsh
sudo ln -sf /bin/zsh /bin/sh
2.构建漏洞程序
以下程序有缓冲区溢出漏洞
创建以下程序retlib.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#ifndef BUF_SIZE
#define BUF_SIZE 12
#endif
int bof(char *str)
{
char buffer[BUF_SIZE];
unsigned int *framep;//栈帧指针
// 将栈帧指针拷贝到framep指针中
asm("movl %%ebp, %0" : "=r" (framep));
/* print out information for experiment purpose */
printf("Address of