字符串漏洞

简单的说字符串漏洞就是字符数组越界问题,也叫作缓冲区溢出,所以这里先科普一个计算机名词定义

缓冲区溢出

官方定义:当向为某个特定数据结构分配的内存空间边界之外写入数据时,会发生缓冲区溢出。如图2.3.1,本来只申请了12个字节的内容,但你却偏要把16个字节的数据复制进去,这样就造成了缓冲区溢出。

缓冲区溢出是一个比较严重的问题:

  1. 假如图2.3.1中其他内存是其他某变量的内存空间,那就是把别的空间的数据改了,可能会发生意想不到的错误
  2. 造成了内存数据垃圾
  3. 可能直接导致程序崩溃
图2.3.1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string.h>

bool isPasswdOkay()
{
    char Passwd[12];
    gets(Passwd);
    return strcmp(Passwd, "goodpass") == 0 ? true : false;
}

int main(int argc, char *argv[])
{
    puts("Enter passwd:");
    bool status = isPasswdOkay();
    if(!status) {
        puts("Access denied.");
        exit(-1);
    }
    else {
        puts("Access granted.");
    }
    return 0;
}

运行结果:在运行图2.3.2时,当输入字符串远超定义的数组长度时程序崩了,可在运行图2.3.3时,同样越界了,程序却能正常运行

图2.3.2
图2.3.3

小结:

在使用指针或者数组时需要特别注意边界问题。

字符串漏洞》有1个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注