安全测试 - 缓冲区溢出

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

示例

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

   ...
   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

Preventive机制

  • 代码审查

  • 开发人员培训

  • 编译工具

  • 开发安全功能

  • 定期扫描