《0day安全学习笔记》——ChapterII——覆盖返回地址
来源:互联网 发布:大数据修炼 编辑:程序博客网 时间:2024/06/05 15:23
strcpy存在变量覆盖漏洞
通过输入的字符串,顺着栈一路覆盖至函数的返回地址,将恶意代码的入口地址覆盖到返回地址上。
这次的目的是将通过验证的入口地址覆盖返回地址:)
栈帧的分布情况,返回地址前有16个字节的数据,返回地址有四个字节,前16字节的数据随意覆盖,返回地址用入口地址覆盖。开搞:P
查找成功认证函数的入口地址
IDA查看函数逻辑,cmp后,zf位如果为0就会跳转到 loc_401120位置的函数,这就是我们想要函数跳转到地方。
获得我们需要的入口地址,构建输入的payload。
由于地址十六进制对应的ASCII码键盘是打不出的,所以要先用十六进制编辑器写好payload,以读文件的方式输入程序,修改一下程序:
#include<stdio.h>#include<string.h>#define PASSWORD "1234567"int verify_password(char *password){ int authenticated; char buffer[8]; //add local buff to be overflowed authenticated=strcmp(password,PASSWORD); strcpy(buffer,password); //over flowed here! return authenticated;}int main(){ int valid_flag=0; FILE *fp; if(!(fp=fopen("password.txt","rw+"))) { return(0); } char password[1024]; printf("please input password: "); fscanf(fp,"%s",password); valid_flag = verify_password(password); if(valid_flag) { printf("no no no no!\n\n"); } else { printf("yes yes yes!\n"); } fclose(fp); return 0;}
好了,我们已经知道入口地址为00401113。
用Winhex编辑,前16字节随便填,最后4个字节逆序输入地址,注意x86汇编采用小端序方式。
将字符串保存在password.txt中
emmmm,成功跳转到了验证字符串输出的地址,也成功输出了正确的字符串,程序崩溃是因为到程序最后返回时,栈平衡被打破,找不到返回到dos的地址,因此崩溃。
用OD查看覆盖的地址
可以看到,返回地址已经被入口地址覆盖
在返回的时候,成功读取了错误的返回地址。
思考一下
emmm,如果大家复制了我上面提供的代码,在32位的vc6.0中编译,最后是覆盖不了返回地址的:P
这个入口地址到底出了问题:)
好吧,其实是因为十六进制的20是空格,fscanf %s 遇到空格就会截断,因此后边的114000是穿不进去的:P
阅读全文
0 0
- 《0day安全学习笔记》——ChapterII——覆盖返回地址
- 《0day安全学习笔记》——ChapterII——变量覆盖详解
- 0day安全——第四章小实验学习笔记
- 《从零开始学Swift》学习笔记(Day 21)——函数返回值
- 《从零开始学Swift》学习笔记(Day 21)——函数返回值
- 【C++学习笔记】返回桌面等特系统殊路径地址 —> SHGetSpecialFolderPath
- 安全学习笔记0day,凯文·米特尼, 社会工程学
- ios学习day—1
- iOS7—Day by day
- 学习笔记——安全测试
- secdrv.sys任意kernel地址覆盖漏洞浅析(0day)
- 精确覆盖问题学习笔记(二)——基本算法
- 【0Day】栈溢出漏洞基础——简单输入漏洞 & 修改返回函数
- Second Day——python学习
- Second Day——Python 学习
- 《从零开始学Swift》学习笔记(Day 1)——我的第一行Swift代码
- 《从零开始学Swift》学习笔记(Day 2)——使用Web网站编写Swift代码
- 《从零开始学Swift》学习笔记(Day 3)——Swift 2.0之后增加的关键字
- 解决小米手机Android Studio安装app 报错的问题It is possible that this issue is resolved by uninstalling an existi
- 判断js中的数据类型
- this指向
- 写给自己的JAVA工程师之路-异常
- qdu 26 —— 康拓展开
- 《0day安全学习笔记》——ChapterII——覆盖返回地址
- 内存释放五大内存分区
- 利用python进入数据分析之Numpy基础知识
- 关于”#”操作符在lua中table的运用
- Spring Data redis序列化的比较
- 解决wordpress不能上传图片的权限限制问题,亲测有效
- 支付宝花呗不推荐使用,因为我已经帮你算好账了
- 作业.找出汉字“你“”我“”他”的位置
- 链表--面试