安全测试 - 缓冲区溢出


当程序试图在临时数据存储区域(缓冲区)中存储比预期容纳的数据更多的数据时,就会出现缓冲区溢出。由于缓冲区被创建为包含有限数量的数据,因此额外的信息可能会溢出到相邻的缓冲区中,从而破坏其中保存的有效数据。

例子

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

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

动手

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

缓冲区溢出

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

缓冲区溢出1

步骤 3 - 现在我们在名称和房间号字段中发送输入。我们还尝试在房间号字段中注入一个相当大的数字。

缓冲区溢出2

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

缓冲区溢出3

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

缓冲区溢出4

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

缓冲区溢出4

预防机制

  • 代码审查
  • 开发者培训
  • 编译工具
  • 开发安全功能
  • 定期扫描