先编写test.c

#include <stdio.h>
#include <string.h>
void function2(){
    printf("Execution flow changed\n");
}
void function1(char *str){
    char buffer[5];
    strcpy(buffer,str);
}
void main(int argc,char *argv[])
{
    function1(argv[1]);
    printf("Executed normally\n");
}

安装完整的gcc编译包

sudo apt-get install gcc-multilib

用32位编译test.c, -fno-stack-protector:关闭堆栈保护机制. -z execstack:打开堆栈可执行机制

gcc -m32  -g -fno-stack-protector -z execstack -o bufferoverflow test.c

运行测试:
运行测试
安装gdb

sudo apt-get install gdb

进入gdb调试

gdb bufferoverflow

在第9行下断点,即当function1函数退出时,找到返回地址,用function2的起始地址覆盖掉返回地址
gdb调试
控制返回地址



re      栈溢出 逆向

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!