电话:0731-83595998
导航

整型溢出的原理及三个实例

来源: 2017-12-25 19:42

 

一、前言

  因为最近几年一直都在跟踪网络安全领域的新漏洞,所以特别强烈的感觉到出现的系统漏洞有越来越难利用的趋势。以IIS的溢出漏洞为例,从前几年的.htr映射的溢出漏洞、.printer映射的溢出以及后来的.ida/idq溢出,一直到去年的.asp溢出,真的是一次比一次难以利用了,攻击成功的概率越来越小。究其原因,就是因为软件厂商的安全意识越来越强,像用strcpy直接拷贝buffer造成溢出的这种低级漏洞几乎是再也不可能出现了 即使是这样,也并不意味着以后再也不会出现漏洞了,因为攻击技术也是在不断发展的。像最近整型溢出又是比较热门的东西,因为最近一些比较严重的漏洞都是由于整型溢出造成的,例如IIS ASP溢出、Apache分块编码溢出、openssh响应机制溢出等等。虽然这种溢出本身并没有什么高深之处,但是也有必要进行总结,因为今后在这方面很可能会产生相当多的漏洞。

二、整型溢出与传统溢出的共性和区别

  首先应该明确所谓"溢出"的概念,根据我的理解,应该是程序外部的数据大小超出了原数据类型所能表达的范围,造成某些错误的操作。这里所提到的数据类型不仅仅是字符串类型,也包括整型、无符号整型甚至布尔类型等一切由程序外部所提供的数据。从这个角度来说,格式化字符串漏洞应该不属于溢出的范围。

  传统的溢出一般都是发生在字符串类型数据上面,用户提交的数据超出程序分配的字符串大小,造成覆盖系统数据结构,最终导致程序流程改变。而整型溢出顾名思义,就是由用户提交的整型数据超出程序内部对整型数的安全要求,造成违反原来的程序限制,导致其他类型的溢出。一般来说,整型溢出并不能直接导致改变程序流程,它是由整型溢出造成字符串类型的溢出,从而导致覆盖系统数据结构,改变程序流程 值得注意的就是程序内部对整型数的安全数据范围要求,而不是仅仅字符串数据范围的要求,这是整型溢出的根本原因,下面将详细介绍。

三、什么是整型数溢出

1.计算机中的整数概念

  在计算机中,整型的概念就是一个特定的变量类型。在不同的CPU系统上被编译处理后,整型和指针的尺寸一般是相同的。例如,在32位的系统中,比如x86,一个整数是32位;而在64位的系统中,比如SPARC,一个整数是64位长。本文中所谈到的例子是在32位的系统环境和32位的整数,并且用10进制来表示它 但是仅仅是这样还不够,因为这样还无法表示负数,所以就需要一种机制仅仅用位来代表负数,通过一个变量的最高位来决定正负。如果最高位置1,这个变量就被解释为负数;如果置0,这个变量就解释为正整数。因此通常的高级语言中都有有符号整型(int)和无符号整型(unsigned int)之分,下面我们就要讨论这两种整型数所带来的安全问题。

2.对整型数的安全要求

  一般程序员写程序,对于整型数仅仅考虑使用范围,而不考虑它的安全要求。对于不同用途的整型数,其安全要求也不相同。例如最容易出问题的是由用户提交的用作长度变量的整型数,对其他部分数据的安全要求往往集中在上面。用作长度的变量一般要求使用无符号整型数。在32位系统中,无符号整型数(unsigned int)的范围是从0-0xffffffff。不仅要保证用户提交的数据在此范围内,还要保证对用户数据进行运算并存储后仍然在此范围内。

四、整型数溢出的成因分类

  整型数溢出从造成溢出原因的角度来说可以分为三大类:存储溢出、计算溢出和符号问题。下面就分别来谈谈他们之间的共性和区别

1.存储溢出

  存储溢出是最简单的一类,也很容易理解。简单说就是使用不同的数据类型来存储整型数造成的。例如下面程序所示:
short len2 = len1;
看到这里读者可能会想,只要不把长类型的变量赋给短类型变量就行了。其实并不是那么简单,把短类型变量赋给长类型变量同样存在问题,例如如下代码:
int len1 = len2;

编辑推荐:

下载Word文档

温馨提示:因考试政策、内容不断变化与调整,长理培训网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准! (责任编辑:长理培训)

已有 22658 名学员学习以下课程通过考试

网友评论(共0条评论)

请自觉遵守互联网相关政策法规,评论内容只代表网友观点!

精品课程

更多
10781人学习

免费试听更多

相关推荐
图书更多+
拼团课程更多+
热门排行
  • 长理培训微信公众号
    每日推送精彩考试资讯
    长按二维码识别
    微信搜索“ 长理培训
  • 加入QQ群一起来考国网!
    QQ群号:223940140
    点击进入

长理培训客户端 资讯,试题,视频一手掌握

去 App Store 免费下载 iOS 客户端