体验缓冲区溢出

缓冲区溢出:往程序的缓冲区写超出其长度的内容,也就是使用了申请之外的内存,会造成意想不到的结果。

来看一个很小的例子,这个例子来自这里:http://zhan.renren.com/ilovecrack?from=template

代码

#include<stdio.h>

void main()
{
	int i=0;
	int a[]={1,2,3,4,5,6,7,8,9,10};

	for(i=0;i<=10;i++)
	{
		a[i]=0;
		printf("Hello World!\n");
	}
} 

运行结果

分析

i=0~10,a[10]越界了,它越界到了哪里呢?地址是从小往大增长的,没错,它越界到了i的地址空间。于是a[10]=0就是i=0,下次循环时,i=0,满足循环条件,于是循环继续进行着。每当i==10的时候,循环体里的语句都将把i置为0,于是循环将永无止境地进行下去。

时间: 2024-08-10 02:00:15

体验缓冲区溢出的相关文章

堆栈 Cookie 检测代码检测到基于堆栈的缓冲区溢出

 报错:0x000CC3C9 处有未经处理的异常(在 image_opencv2.exe 中):  堆栈 Cookie 检测代码检测到基于堆栈的缓冲区溢出. 主要检查代码中有没有对数组的越界操作,就解决了这个bug. 其它的相关知识查后再补充.

关于对抗缓冲区溢出攻击

缓冲区溢出说白了就是因为内存中的非法访问而导致的一些状态的破坏. 这一点,C语言中的一些和数组有关的库函数最容易导致这类情况. 缓冲区溢出攻击,有很大一部分是通过数据的溢出,内存的非法访问来执行一些攻击代码,因为数据在栈中一旦溢出,那么他就会覆盖一些重要的状态,从而被攻击者操控. 那么关于对抗缓冲区溢出的攻击,有这样的几种方法 1.栈的随机化 在植入缓冲区溢出攻击的代码的时候,还要植入指向这段代码的指针,指针指向这段代码的栈的位置.因为执行这段代码是考指针进行跳转过去的.由于以前的操作系统程序的

kali实战-缓冲区溢出

我们之前可能都了解过自动化的程序,学习自动化程序的使用方法,但是在计算机领域有一个词语叫做"零日漏洞",这样的漏洞是如何发现的呢?有些漏洞通过远程就可以控制你的计算机,安装木马,达到这样的目的,他们是如何通过远程控制你的系统的呢?今天我们学习此类攻击中最主要一种:缓冲区溢出,通过缓冲区溢出我们就可以控制目标机器.基于本章的内容从原理上我们已经具备这样的方法可以自己去发现"零日漏洞",发现的原理和方法将在本章注意展开讲解. 加Q群交流kali Q群:108186516

缓冲区溢出笔记

首先得会内存.寄存器还有程序运行的规则. 存储知识: 文件地址(File Offset):数据在PE文件中的地址,文件在磁盘上存放时相对于文件开头的偏移: 虚拟内存地址:每个进程都有的4G虚拟空间: 物理内存地址: 这三个地址要层层映射 内存: 代码区:存放二进制代码 数据区:存储全局变量 堆区:动态内存空间(还没太明白用途) 栈区:存放函数调用关系(缓冲区溢出就在这里发生) 重点研究栈的结构: 栈帧:每个函数有自己的栈帧,只有被调用的函数才会在系统栈开辟栈帧,调用完毕将弹出栈帧 两个寄存器(用

缓冲区溢出漏洞实验 20125108 冯相国

练习1 一.实验描述 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况.这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段.这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写. 二.实验准备 系统用户名shiyanlou,密码shiyanlou 实验楼提供的是64位Ubuntu linux,而本次实验为了方便观察汇编语句,我们需要在32位环境下作操作,因此实验之前需要做一些准备. 此过程消耗了不少时间,学校的网速实在太渣. 三.实验步骤

实验一——缓冲区溢出漏洞实验

Linux实验一 —— 缓冲区溢出漏洞实验 20122137 一.实验描述 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况.这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段.这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写. 二.实验准备 系统用户名shiyanlou,密码shiyanlou 实验楼提供的是64位Ubuntu linux,而本次实验为了方便观察汇编语句,我们需要在32位环境下作操作,因此实验之前需要做一些准备. 1.

缓冲区溢出漏洞实验

一.实验过程及截图 输入命令安装一些用于编译32位C程序的东西: 进入32位linux环境.此时你会发现,命令行用起来没那么爽了,比如不能tab补全了,所以输入“/bin/bash”使用bash.使用地址空间随机化来随机堆(heap)和栈(stack)的初始地址,这使得猜测准确的内存地址变得十分困难,而猜测内存地址是缓冲区溢出攻击的关键. 把以下代码保存为“stack.c”文件,保存到 /tmp 目录下. 把以下代码保存为“exploit.c”文件,保存到 /tmp 目录下. 结果: 上面的代码

实验一缓冲区溢出漏洞实验

一.实验描述 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况.这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段.这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写 二.实验准备 系统用户名shiyanlou,密码shiyanlou 实验楼提供的是64位Ubuntu linux,而本次实验为了方便观察汇编语句,我们需要在32位环境下作操作,因此实验之前需要做一些准备. 1.输入命令安装一些用于编译32位C程序的东西: sudo apt-

缓冲区溢出基础知识

缓冲区理论学习PE文件(进程)装入内存:PE文件(进程)在内存中按照功能大致划分4个部分(1)代码区(程序段) .text 主要存储被装入执行的二进制代码,ALU会到这个取指令并执行,这个段通常是只读,对它的写操作是非法的.(2)数据区 .data 主要是存储的全局变量,主要存储静态数据.(3)堆区 程序在堆区可以动态的请求分配一定大小的内存,并在用完后归还给堆区,动态分配和回收是堆区的主要特点,主要存储动态数据.(4)栈区 用于动态的存储函数之间的调用关系,以保证被调用函数在返回时恢复到母函数