首页 > 其他分享 >实验七--缓冲区溢出实验 20221323侯冒祯

实验七--缓冲区溢出实验 20221323侯冒祯

时间:2022-12-15 13:13:08浏览次数:40  
标签:-- 代码 程序 侯冒祯 实验 缓冲区 堆栈 执行 溢出

缓冲区溢出漏洞实验报告

目录

  1. 实验指导书内容
  2. 缓冲区溢出的原理
  3. 缓冲区溢出的防范
  4. 实验成果

1.实验指导书内容

指导书籍:《计算机科学概论》

额外参考:《C语言程序设计(第4版)》

在网络黑客针对系统和程序自身存在的漏洞编写相应的攻击程序中,最常见的就是针对缓冲区溢出漏洞的攻击。世界上第一个缓冲区溢出攻击--Internet蠕虫曾造成全球多台网络服务器瘫痪。

对缓冲区溢出漏洞进行攻击的后果包括程序运行失败、系统崩溃和重新启动等。更为严重的是,可利用缓冲区溢出执行非授权指令,甚至取得系统特权,进而进行各种非法操作。

2.缓冲区溢出的原理

通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,造成程序崩溃或使程序转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。

3.缓冲区溢出的防范

防范缓冲区溢出的核心是防止指针越界。

完整性检查

在程序指针失效前进行完整性检查。虽然这种方法不能使得所有的缓冲区溢出失效,但它能阻止绝大多数的缓冲区溢出攻击。

非执行的缓冲区

通过使被攻击程序的数据段地址空间不可执行,从而使得攻击者不可能执行被植入被攻击程序输入缓冲区的代码,这种技术被称为非执行的缓冲区技术。在早期的Unix系统设计中,只允许程序代码在代码段中执行。但是Unix和MS Windows系统由于要实现更好的性能和功能,往往在数据段中动态地放入可执行的代码,这也是缓冲区溢出的根源。为了保持程序的兼容性,不可能使得所有程序的数据段不可执行。

但是可以设定堆栈数据段不可执行,这样就可以保证程序的兼容性。Linux和Solaris都发布了有关这方面的内核补丁。因为几乎没有任何合法的程序会在堆栈中存放代码,这种做法几乎不产生任何兼容性问题,除了在Linux中的两个特例,这时可执行的代码必须被放入堆栈中:

信号传递

Linux通过向进程堆栈释放代码然后引发中断来执行在堆栈中的代码来实现向进程发送Unix信号。非执行缓冲区的补丁在发送信号的时候是允许缓冲区可执行的。

GCC的在线重用

研究发现gcc在堆栈区里放置了可执行的代码作为在线重用之用。然而,关闭这个功能并不产生任何问题,只有部分功能似乎不能使用。
非执行堆栈的保护可以有效地对付把代码植入自动变量的缓冲区溢出攻击,而对于其它形式的攻击则没有效果。通过引用一个驻留的程序的指针,就可以跳过这种保护措施。其它的攻击可以采用把代码植入堆或者静态数据段中来跳过保护。

编写安全的代码

编写正确的代码是一件非常有意义的工作,特别像编写C语言那种风格自由而容易出错的程序,这种风格是由于追求性能而忽视正确性的传统引起的。尽管花了很长的时间使得人们知道了如何编写安全的程序,具有安全漏洞的程序依旧出现。因此人们开发了一些工具和技术来帮助经验不足的程序员编写安全正确的程序。
最简单的方法就是用grep来搜索源代码中容易产生漏洞的库的调用,比如对strcpy和sprintf的调用,这两个函数都没有检查输入参数的长度。事实上,各个版本C的标准库均有这样的问题存在。
此外,人们还开发了一些高级的查错工具,如fault injection等。这些工具的目的在于通过人为随机地产生一些缓冲区溢出来寻找代码的安全漏洞。还有一些静态分析工具用于侦测缓冲区溢出的存在。
虽然这些工具帮助程序员开发更安全的程序,但是由于C语言的特点,这些工具不可能找出所有的缓冲区溢出漏洞。所以,侦错技术只能用来减少缓冲区溢出的可能,并不能完全地消除它的存在。

4.实验成果

图片描述

标签:--,代码,程序,侯冒祯,实验,缓冲区,堆栈,执行,溢出
From: https://www.cnblogs.com/hmz-2004/p/16984746.html

相关文章

  • prometheus.yml自动发现配置记录
    正常安装普罗米修斯之后,静态配置不对方便后续添加,官方也提供了许多自动发现服务,这里采用了其中一种。在prometheus.yml同级目录下,创建一个node文件夹,用来存放后续想拉取的......
  • 新建了一个页面,如论如何也访问不了
    今天新建了一个页面,无论如何也访问不到。于是在router中写了redirect。然后发现竟然是我的路径填写错误。默认成了hashmode,带#的方式。修改mode为history ......
  • 高性能 Jsonpath 框架,Snack3 3.2.50 发布
    Snack3,一个高性能的JsonPath框架借鉴了Javascript所有变量由var申明,及Xmldom一切都是Node的设计。其下一切数据都以ONode表示,ONode也即Onenode之意,代表任何......
  • 安装客户服务中心等应用
    安装客户服务中心等应用前提请确保你有权限,如果不知道到有没有的话直接用"SYSTEMADMIN(域的)"1.登录PowerPlatformAdminCenter地址如下:https://admin.powerplatfor......
  • 【JVM故障问题排查心得】「内存诊断系列」Docker容器经常被kill掉,k8s中该节点的pod也
    背景介绍最近的docker容器经常被kill掉,k8s中该节点的pod也被驱赶。我有一个在主机中运行的Docker容器(也有在同一主机中运行的其他容器)。该Docker容器中的应用程序将会......
  • 查看mysql当前事务锁并kill
    执行如下SQL,查看当前事务:selectt.trx_mysql_thread_id,t.trx_started,t.trx_state,t.trx_tables_in_use,t.trx_tables_locked,t.trx_rows_locked,t......
  • ​原创 | AI顶会论文很多附带源代码?不少是假开源!
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • Python__03--二进制与字符编码
    1二进制与字符编码1.1二进制定义:二进制简单来说就是用两个不同的符号0和1来表示的以2为基数的一个计数系统,是一种机器语言,就是计算机可以看懂的(区别一下python,python......
  • jexus
       Jexus全称是"Jexus web server",它是一款基于.NET兼容环境,运行于Linux/unix操作系统上,以支持ASP.NET为核心功能和最大特色的,既强大又易用的WEB服务器。 在正式发布J......
  • 基于分水岭算法的图像分割-Matlab版本
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......