预备环境
- Ubuntu16.04
- 程序stack.c、exploit.py
预备知识
- strcpy()这个函数用于复制字符串,遇到字符’\0’时将停止复制,’\0’字符ASCII值为0.
- 缓冲区溢出攻击的目标在于覆盖函数返回地址,使其指向注入的恶意指令的地址。
开始实验
- 关闭地址空间随机化
- 地址空间随机化(ASLR)是针对缓冲区溢出攻击的防御措施之一,ASLR对程序内存中的一些关键数据区域进行随机化,包括栈的位置、堆和库的位置等,目的让攻击者难以猜测所注入的恶意代码在内存中的具体位置。
[07/06/20]seed@VM:~/code$ sudo sysctl -w kernel.randomize_va_space=0 kernel.randomize_va_space = 0
- 准备存在漏洞的程序stack.c
#include <stdlib.h> #include <stdio.h> #include <string.h> #ifndef BUF_SIZE #define BUF_SIZE 24 #endif int bof(char *str) { char buffer[BUF_SIZE]; /* The following statement has a buffer overflow problem */ strcpy(buffer, str); return 1; } int main(int argc, char **argv) { char str[517]; FILE *badfile; /* Change the size of the dummy array to randomize the parameters for this lab. Need to use the array at least once */ char dummy[BUF_SIZE]; memset(dummy, 0, BUF_SIZE); badfile = fopen("badfile"