关于缓冲区溢出攻击原理的简单例子(C语言编写)
一、什么是缓冲区溢出?
缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量,使得溢出的数据覆盖在合法数据上,通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,造成程序崩溃或使程序转而执行其它指令,以达到攻击的目的。
二、程序的简单说明
执行过程:
void fun()函数中buf只分配了8字节的空间,通过写超出其长度的字符串ss,并传入void fun()函数对buf赋值,使调用fun()函数时的堆栈溢出,覆盖了返回地址,令构造的ss输入部分恰巧使覆盖返回地址部分的内容正好指向haha()函数入口,这样程序就不会返回之前的步骤(也就是主函数中调用fun()函数下边的指令),而是进入了haha()函数,同时执行haha()函数中的printf("\nOK!success")指令,在屏幕上打印出OK!success
寻找待构造的ss值:
首先通过定义一个全局变量k,它代表传入的ss和buf之间内存地址(彼此相对的地址)的距离,然后在主函数中首先定义一个任意ss(经测试,传入什么ss并不影响ss和buf之间的距离),调用fun(),这样可以得到在本机上二者地址相差的距离,然后用go记录haha()的代码段地址,这里需要说明一点:当调用一个函数的时候,首先是参数入栈,然后是返回地址。并且,这些数据都是倒着表示的,因为返回地址是4个字节,所以实际上返回地址就是:buf[k-1]*256*256*256+buf[k-2]*256*256+buf[k-3]*256+buf[k-4]。将go拆分成4部分后赋给ss相应位置,得到的ss就是我们所想要的可以令fun()函数执行后直接跳到haha()函数的字符串。
三、代码部分
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
int k;
void fun(const char* input)
{char buf[8];strcpy(buf,input);k=(int)&input-(int)buf;printf("%s\n", buf);
}void haha()
{printf("\nOK!success");
}int main(int argc, char* argv[])
{printf("Address of foo=%p\n",fun);printf("Address of haha=%p\n",haha);void haha();int addr[4];char s[]="FindK";fun(s);//printf("%d\n", k);int go=(int)&haha;//由于EIP地址是倒着表示的,所以首先把haha()函数的地址分离成字节addr[0]=(go << 24)>>24; addr[1]=(go << 16)>>24; addr[2]=(go << 8)>>24; addr[3]=go>>24;char ss[]="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";for(int j=0;j<4;j++){ss[k-j-1]=addr[3-j];}//fun(argv[1]);fun(ss);return 0;
四、运行结果
关于缓冲区溢出攻击原理的简单例子(C语言编写)相关推荐
- 缓冲区溢出攻击原理、方法及防范(一)
由于C/C++语言本身没有数组越界检查机制,当向缓冲区里写入的数据超过了为其分配的大小时,就会发生缓冲区溢出. 攻击者可以利用缓冲区溢出来窜改进程运行时栈,从而改变程序的正常流向.在分析缓冲区溢出攻击 ...
- 缓冲区溢出攻击原理分析
<缓冲区溢出攻击实践>以实践者角度介绍了初级缓冲区溢出攻击方法,本文从原理上对该方法做原理性介绍. 函数帧结构 现在高级语言C(或者C++),在函数开头的几指令要建立好函数帧结构,而函数返 ...
- 计算机缓冲器原理,缓冲区溢出攻击原理-信息安全工程师知识点
信息安全工程师知识点:缓冲区溢出攻击原理 缓冲区是计算机内存中的一个连续块,保存了给定类型的数据.当进行大量动态内存分配而又管理不当时,就会出现问题.动态变量所需要的缓冲区,是在程序运行时才进行分配的 ...
- “缓冲区溢出攻击”原理分析及实例演示
一.原理分析 缓冲区溢出是一种非常普遍.非常危险的漏洞,在各种操作系统.应用软件中广泛存在.利用缓冲区溢出攻击,可以导致程序运行失败.系统宕机.重新启动等后果.更为严重的是,可以利用它执行非授权指令, ...
- linux缓冲区攻击实验报告,linux 下缓冲区溢出攻击原理及示例
一.溢出目标 无论是在windows下还是在linux下,溢出攻击基本上都是以控制计算机的执行路径为目标,而x86下执行哪条指令是由eip寄存器来控制的,所以如果能够修改eip寄存器的值,就可以修改计 ...
- 游戏安全03:缓冲区溢出攻击简单解释
文章目录 一.举例具体体现 二.缓冲区溢出攻击原理 (1)栈帧基础原理 (2)函数调用约定 (3)溢出攻击原理 (4)缓冲区溢出攻击分类和举例 1)没有保证足够的存储空间存储复制过来的数据 2)整数溢 ...
- 网络攻防实验之缓冲区溢出攻击
这个实验是网络攻防课程实验中的一个,但是目前我还没有完全搞懂代码,以后有机会来补.也欢迎大佬指点 一.实验目的和要求 通过实验掌握缓冲区溢出的原理,通过使用缓冲区溢出攻击软件模拟入侵远程主机理解缓冲区 ...
- 实验8 缓冲区溢出攻击实验
实验8 缓冲区溢出攻击实验 缓冲区溢出是目前最常见的一种安全问题,操作系统以及应用程序大都存在缓冲区溢出漏洞.缓冲区是一段连续内存空间,具有固定的长度.缓冲区溢出是由编程错误引起的,当程序向缓冲区内写 ...
- 计算机系统实验五:缓冲区溢出攻击
参考教材:计算机系统基础 第二版 袁春风 机械工业出版社 参考慕课:计算机系统基础(四):编程与调试实践 https://www.icourse163.org/learn/NJU-1449521162 ...
最新文章
- java实现简单的约瑟夫环问题(二)
- Flink 在爱奇艺广告业务的实践
- 约瑟夫环问题(链表 + 公式)
- 元素内容必须由格式正确的字符数据或标记组成_Blockly Fields积木表单元素
- javaweb + websocket实现客户端
- java 导出表 sql_java中把SQL数据库中的表导出到excel中.怎么实现
- java监听表变化_「Java Web开发」Filte(过滤器)、Listener(监听器)
- python入门经典100例-【python】编程语言入门经典100例--25
- 在html种颜色的代码,html颜色代码生成器
- Luogu4114 Qtree1
- MySQL数据库如何建立视图
- 程序员应该写文档吗?
- python将.tif格式图批量转化为.jpg格式图
- web文件管理系统_实用开源项目,基于Web的文件管理系统——DocSys
- DLP 3D打印技术有什么优点
- reverse-for-the-holy-grail-350 攻防世界
- uniApp 实现微信小程序和app视频播放flv格式视频监控
- 合同节水服务认证国内怎么申请?
- [ipsec][crypto] 什么是AEAD加密算法中的AAD 及aad length
- U盘显示文件或目录损坏且无法读取(U盘提示无法访问解决方法)