安全测试 - 缓冲区溢出



当程序试图将超过其设计容量的数据存储到临时数据存储区(缓冲区)中时,就会发生缓冲区溢出。由于缓冲区被创建为容纳有限数量的数据,因此额外信息可能会溢出到相邻的缓冲区,从而破坏其中存储的有效数据。

示例

这是一个经典的缓冲区溢出示例。它演示了一个简单的缓冲区溢出,该溢出是由第一种情况引起的,该情况依赖于外部数据来控制其行为。无法限制用户输入的数据量,程序的行为取决于用户输入的字符数量。

   ...
   char bufr[BUFSIZE]; 
   gets(bufr);
   ...

动手操作

步骤1 - 我们需要使用用户名和房间号登录才能访问互联网。以下是场景快照。

buffer_overflow

步骤2 - 我们还将在Burp Suite中启用“显示隐藏表单字段”,如下所示:

buffer_overflow1

步骤3 - 现在我们在用户名和房间号字段中输入。我们还尝试在房间号字段中注入一个很大的数字。

buffer_overflow2

步骤4 - 隐藏字段显示如下。我们点击接受条款。

buffer_overflow3

步骤5 - 攻击成功,由于缓冲区溢出,它开始读取相邻的内存位置并显示给用户,如下所示:

buffer_overflow4

步骤6 - 现在让我们使用显示的数据登录。登录后,显示以下消息:

buffer_overflow4

预防机制

  • 代码审查
  • 开发者培训
  • 编译器工具
  • 开发安全函数
  • 定期扫描
广告