`

缓冲区的非法操作

阅读更多
本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业用途。
msn: yfydz_no1@hotmail.com
来源:http://yfydz.cublog.cn

1. 前言
本文所描述的缓冲区可以是静态的,如通过数组方式定义;也可以是动态的,如通过malloc等函数分配的。

2. 非法操作
对缓冲区的非法操作分以下几种:
2.1 越界访问
最常见的错误操作就是数据越界,就是访问了缓冲区之外的数据,对于读操作,或许还能好点,但对写操作基本就出大问题了。对于数组方式,如果超过不多的话程序也许不会崩溃,但会发现其他数据被改写,如果过多覆盖了函数返回地址的话会造成程序崩溃,如果写入的数据是特殊的shellcode的话(缓冲溢出攻击),会使攻击者获取程序属主的权限;对于动态分配的缓冲区,越界后基本程序立即崩溃了。

数据越界问题是引起程序崩溃最常见的问题,但也是最隐蔽的,尤其在对一定大小的缓冲区进行内容分析处理时很容易出错,如果不随时与缓冲区结束地址进行比较的话,仅凭缓冲区内容是很容易出错的。

2.2 非法字符串操作
字符串的结束标志是“\0”字符,各种字符串操作函数,如strlen,strchr,strrchr,strstr等等都是以此为根据进行操作的,对于缓冲区,不要想当然的一定会在缓冲区中有“\0”字符,如内核网络编程中的一个数据包处理,即使你知道处理的协议是字符协议,如 ftp,telnet等,系统只保证在实际数据区包含了相关的数据内容,但实际数据区外的缓冲区(如果有的话)中的内容是不确定的,并不保证有“\0”字符,因此不要轻易在包的数据区中使用这些函数,除非你明确在缓冲区中某个地方设置了“\0”,否则带来的结果将就是越界访问而造成系统崩溃。
提示:使用字符串操作函数一定要确定缓冲区内有“\0”字符。
2.3 非初始化即使用
在函数中定义的静态缓冲区和用malloc分配的动态缓冲区内的初始数据内容都是随机的,不能直接使用,否则很容易出错。

举例,下面的小程序同时犯了上面所说的三种的错误:
void a(void)
{
 char buf[10];
 if(buf[strlen(buf)-1]=='\n')
  buf[strlen(buf)-1]=0;
}
提示:
在对缓冲区操作前,最好用memset()函数对其内容清零;动态分配内存可以用calloc函数代替malloc函数。

2.4 sizeof的误用

数组的大小是可以用sizeof()操作符计算出来的,但如果将数组地址作为参数传递到其他函数后,就不能再对该参数使用sizeof()操作了,这时候编译器就只将其作为一个普通指针,计算出来的值就始终是4(32位操作系统)或8(64位操作系统)。
举例:
void a(int *p)
{
 printf("sizeof(p)=%d\n", sizeof(p)); /* */
}
void main(void)
{
 int buf[10];
 printf("sizeof(buf)=%d\n", sizeof(buf)); /* 10*sizeof(int) */
 a(buf);
}
在32位操作系统下,程序运行结果为:
sizeof(buf)=40
sizeof(p)=4

而对于动态分配的缓冲区,则永远不能用sizeof()计算缓冲区大小,缓冲区大小必须自己记住。
 
3. 容易引发非法操作的函数

容易引发非法操作的函数主要是那些没有长度参数的缓冲区操作函数,如 gets,scanf,sprintf,strcpy,strcat等,对这些函数的使用要非常注意,最好能形成条件反射式地拒绝使用这些函数。一般需要使用其相应的带“n”的对应函数,如fgets,snprintf,strncat,strncpy等,这方面的安全编程讨论已经很多,任何buffer overflow相关文件都会涉及。

值得注意的是strncpy函数,是很容易出错的,其他字符串操作函数执行完后会自动在目的串结尾添加“\0”结束符,但strncpy不会,需要自己显式添加“\0”。
 
4. 结论

缓冲区是系统分配出了一块内存区,原则上可以在该内存区内进行任何操作,可以将其视为字符串,也可以视为数据,这都是无所谓,但一定要随时保证进行操作的所有数据地址一定是在缓冲区内才是安全的。
分享到:
评论

相关推荐

    《网络安全技术》大作业:缓冲区溢出实验报告

    缓冲区溢出是因为在程序执行时数据的长度超出了预先分配的空间大小,导致覆盖了其他数据的分配区域,从而执行非授权指令,获取信息,取得系统特权进而进行各种非法操作导致程序运行失败、系统宕机、重新启动等后果。...

    stm32串口缓冲区源码

    指向列队头的指针(Head)是缓冲区可读的数据,指向列队尾的指针(Tail)是缓冲区可写的数据,通过移动这两个指针(Head) &(Tail)即可对缓冲区的数据进行读写操作了,直到缓冲区已满(头尾相接),将数据处理完,可以释放...

    缓冲区溢出攻击

    缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击,可以导致程序运行...更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。

    缓冲区溢出介绍.

    缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击,可以导致程序运行...更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。

    缓冲区溢出编程小助手.7z

    缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击,可以导致程序运行失败...更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作

    DOS功能调用---------

    0A 键盘输入到缓冲区 DS:DX=缓冲区首地址 (DS:DX)=缓冲区最大字符数 (DS:DX+1)=实际输入的字符数 0B 检验键盘状态   AL=00 有输入 AL=FF 无输入 0C 清除输入缓冲区并 请求指定的输入功能 AL=输入功能号 (1,6,7,8,A)...

    WH-500 Programmer for USB 51单片机编程器

    2.9“写电子盘”用于把缓冲区数据和设置信息写入电子盘。 2.10“校验电子盘”用于校验缓冲区数据和电子盘数据。 2.11“读电子盘”用于读出电子盘数据到缓冲区。 3状态指示 3.1 发光二极管慢闪,表示正常。指示拷贝...

    网络安全论文.doc

    6 3.5 DDoS攻击新技术——反弹技术 7 3.6 DDoS攻击下的防御 7 4 缓冲区溢出攻击与防御 8 4.1 缓冲区溢出攻击简介 8 4.2缓冲区溢出攻击 9 4.3缓冲区溢出的防御 10 5 一个基于Netbios的攻击实例 11 5.1 攻击步骤 11 ...

    网络安全论文(1).doc

    6 3.5 DDoS攻击新技术——反弹技术 7 3.6 DDoS攻击下的防御 7 4 缓冲区溢出攻击与防御 8 4.1 缓冲区溢出攻击简介 8 4.2缓冲区溢出攻击 9 4.3缓冲区溢出的防御 10 5 一个基于Netbios的攻击实例 11 5.1 攻击步骤 11 ...

    [详细完整版]操作系统原理.pdf

    为每个终端配臵缓冲区,暂存 用户键入的命令或数据。针对及时处理问题,应使所有的用户作业都 直接进入内存,并且为每个作业分配一个时间片,允许作业只在自己 的时间片内运行,这样在不长的时间内,能使每个作业都...

    网络安全保障方案.doc

    (四) 入侵防范 5) 排查网络边界处及服务器是否具备监视木马攻击、拒绝服务攻击、缓冲区溢出攻击 、IP 碎片攻击和网络蠕虫攻击等的能力,在发生严重入侵事件时应提供报警,且能够 记录入侵的源 IP、攻击时间

    网络安全保障方案.docx

    网络安全保障方案 一、网络安全自查 (一) 身份鉴别 针对网络设备、... 排查网络边界处及服务器是否具备监视木马攻击、拒绝服务攻击、缓冲区溢出攻击、IP 碎片攻击和网络蠕虫攻击等的能力,在发生严重入侵事件时应提供

    网络安全重要性.doc

    通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从 而破坏程序的堆栈,使程序转而执行其他的指令,如果这些指令是放在root权限的内存 中,那么一旦这些指令得到了运行,黑客就以root权限控制了系统,达到...

    数据库安全性设计.doc

    数据库管理员可以依据数据库实际运行状况根据需要调整数据库系统 全局区(SGA区)的数据库缓冲区、共享池和日志缓冲区的大小。只有合理设置这些内存 缓冲区,才可很大加快数据的查询速度,只要所使用的内存区足够大...

    预防XSS攻击和SQL注入XssFilter

    对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击“,而JavaScript是新型的“ShellCode”。 二、XSS漏洞的危害 (1)网络钓鱼,包括盗取各类用户账号; (2)窃取用户cookies资料,从而获取...

    宁夏公共地理框架数据库管理系统.doc

    缓冲区选择 对选择范围设置缓冲区半径,在该范围内的实体均被选中。 撤销选择 撤销实体选择操作。 选择属性设置 设置被选中要素的线宽、颜色等属性配置。 缩放到选择集 将选中的实体缩放到整个视图窗口中,是常用的...

    Windows 系统错误代码简单分析

     1022 通知的更改请求已经完成,并且返回信息还没有被送到调用者的缓冲区中。调用者需要列举所有文件以找到改动的内容。  1051 已将停止控制发送给与其他运行服务相关的服务。  1052 所要求的控制对此服务...

    网络安全技术概述.docx

    2.1.2缓冲区溢出攻击 程序员在编程时会用到一些不进行有效位检查的函数,可能导致黑客利用自编写程序来进一步打开安全豁口然后将该代码缀在缓冲区有效载荷末尾,这样当发生缓冲区溢出时,从而破坏程序的堆栈,使...

Global site tag (gtag.js) - Google Analytics