ch2:栈溢出,修改邻接变量,修改函数返回地址
来源:互联网 发布:趣医网络 编辑:程序博客网 时间:2024/06/14 16:45
实验环境:
操作系统Windows7IDEVC 6.0build版本debug用于实验的C语言代码:
#include <stdio.h>#define PASSWORD "1234567"int verify_password(char * password){int authenticated;//add local buff to be overflowedchar buffer[8];authenticated=strcmp(password,PASSWORD);strcpy(buffer,password);return authenticated;}int main(){int valid_flag = 0;char password[1024];while(1){printf("please input password:");scanf("%s",password);valid_flag = verify_password(password);if(valid_flag){printf("incorrect password!\n\n");}else{printf("Congratulation! You have passed the verification!\n");break;}}return 0;}
下面,修改邻接变量:
而buffer是由password通过strcpy得到的。可能会造成buffer[8]数组越界,覆盖authenticated变量的值。
当输入为"qqqqqqq"时,上面所说的栈帧数据如图:
因为"qqqqqqq" > "1234567"
所以authenticated的值为1。
下面将输入的数据变为"qqqqqqqq",buffer[8]应该全部被'q'填满。而后面的authenticated原本的值0x00000001则被字符串password的结束符'\0'覆盖为0x00000000。
单步调试执行完strcmp时,栈帧数据:
单步调试执行完strcpy时,栈帧数据:
执行结果:
绕过了密码的验证!
下面,修改函数返回地址:
栈帧数据:
覆盖之前的栈帧数据;
覆盖之后的栈帧数据:
返回地址被覆盖。
继续执行,报错,地址0x00323334的数据并不是合法的指令。
修改函数返回地址成功!
0 0
- ch2:栈溢出,修改邻接变量,修改函数返回地址
- 栈溢出利用——修改邻接变量
- 堆栈函数返回地址的修改 堆栈溢出
- 堆栈函数返回地址的修改 堆栈溢出
- c++修改函数返回地址
- 做一回Haker,修改函数返回地址
- 【0Day】栈溢出漏洞基础——简单输入漏洞 & 修改返回函数
- ch2:栈溢出,代码植入
- 函数返回局部变量地址
- 函数返回局部变量地址
- ch2:栈溢出,控制程序执行流程
- gdb 修改函数返回值
- 局部变量与函数返回地址
- Spring AOP修改函数返回值
- 拦截API(修改函数地址方法)
- 无法修改返回值,因为它不是变量
- C语言函数不能返回局部变量的地址
- 局部变量与函数返回地址(大学课件整理)
- Android中利用泛型简化MVP
- android view构造函数研究
- 【PAT甲级】1036. Boys vs Girls (25)
- 搜索二叉树基本功能实现(源代码)
- delegate
- ch2:栈溢出,修改邻接变量,修改函数返回地址
- java读书笔记:List集合总结
- RPC原理及RPC实例分析
- 多线程儿
- mybatis问题锦集(一)
- jquery基础入门上篇
- 声明式事务管理
- JavaSE知识点框架图
- OpenGL ES 透视投影