关于整数安全漏洞的一点点小记

前言:关于整数安全漏洞的一点点小小的整理。

我自己随便写了,写到那里就是那里吧,东西也是写给我自己看的。

1.为什么会产生整数安全漏洞
整数安全的三种类型:

  • 溢出:有符号数才会产生溢出,当两正和两符相加的时候,会有可能导致溢出,溢出的数据会覆盖掉符号位,从而是两个很大的正数相加变成负数,两个很大的负数相变成正数,溢出标志位of可以检测是否有溢出产生。另外溢出分为上溢出和下溢出。
  • 回绕:回绕是对于无符号整数的,例如对于一个unsigned char(unsigned int_8)的数据,当你赋值给他256的时候,就会回绕变为0,超过了上限,也是超过了8个bit,进位到9bit,导致存储的数据丢了。
  • 截断:截断是把一个比较大宽度数存放在宽度比较小的操作数当中,导致高位发生了截断。

常常产生问题的就有什么呢?就有整数转换,也就是显式和隐式两种把,具体我就不说了,比如你把int类型给char类型。
另外还有的就是整数提升,(这个最早听到概念的话是在《c专家编程》上面),也是一种两个宽度不一样的数据操作的时候,会自动的把宽度小的转换成宽度大的,具体的如何我也不知道云云。

另外还要说一句我一直感觉很有趣的话:

在计算机中的数据,在于你如何解释,你让它是地址,他就是地址,你让他是unsigned就是unsigned,是signed,他就是signed。

下面我稍微的演示一下:
在这里插入图片描述
可以看到负数在这里变成了很大很大的数,那我们都知道数据在计算机中是补码形式存储,所以-4在计算机中应该是。
在这里插入图片描述

那对于这个32bit的数据计算机这个时候把他当成int类型解读得到的就是-4,那我们再看看按照unsigned解读呢?
在这里插入图片描述

我们可以看到得到了我们想要的结果,也就是我们编程得到的结果,所以说负数整数提升变成无符号的整数会变成一个特别大的数据。

2.关于利用。
常见有size_t形式的参数 函数有:
memcpy();
strncpy();
3.多的也就不说了,这个漏洞是一个很小的点。

posted @ 2021-10-21 20:36  写不完作业还要玩  阅读(130)  评论(0编辑  收藏  举报