浅谈溢出问题

在c语言或是c++中有一类很典型的问题,那就是溢出。

如果说溢出对程序有什么危害的话,好像就是在编译的时候会报错,运行的时候会崩溃。但是当有了研究安全的人之后,安全性问题就会随之出现了。

在开发的阶段,由于各种压力的迫使之下,往往开发团队都是拼命地赶工期,先把功能实现了,后期再慢慢地打补丁完善,这就容易造成很多问题没有得到充分的考虑。在众多溢出类型中,我觉得的最容易理解的应该是数组的溢出。说白了,就是在调用数组成员的时候超出下标了,这就是数组的溢出。总之,在有涉及到数据的边界问题上,就可能会发生溢出的情况。

为了避免反汇编界面太过于让人头大,所以就先写一小段代码来打印一下内存里面数据的存储情况。

这个程序运行结果是这样的。
从结果里可以看到,在内存里(指的是程序运行的虚拟内存而非物理内存),短整型变量a,b和数组c之间的距离还是很近的。
下面是产生越界的代码
在利用指针实现输出之前,有对数组c的成员赋值成666的操作,至于要给多少个c的成员赋值,这个和用户的输入n有关系。
先输入个2,看输出还是正常的
当输入3时,可以看到b的值被覆盖成了666
当输入变成5的时候,a,b都被覆盖了
要说明的一点是,现在写代码基本不用担心这个问题,因为像visual studio这样的编译器会自动检查有没有越界,我的这个程序之所以能够越界是因为我把visual studio里面有关安全检查的选项全给关了。
我这个是直接覆盖变量的值,对于程序的走向还没有什么影响。假如,精心构造一段输入,使变量指针的值被覆盖,就完全可以改变程序的走向,甚至使其指向一段恶意函数的地址,那么在使用该指针时候,就会导致恶意代码的执行,从而导致非常严重的安全问题。
除了数组溢出之外,还有整数溢出,缓冲区溢出,栈溢出,字符串溢出等等。整数溢出在Linux服务器上经常被黑客拿来进行提权。在一些存在内核溢出漏洞的Linux系统里,他们可以通过专门的提权exp来对gid和uid进行溢出,将用户id的gid和uid权限设置为0,从而获得超级管理员权限。
要解决这一类问题也很简单,就是程序一定要做溢出检查,还有就是尽量不要用像scanf(),strcpy()这样的C语言内置的函数,它们都有一个缺陷,就是不做溢出检查,很可能会导致各种各样的溢出,建议是替换成带有_s后缀的安全函数,即scanf_s(),strcpy_s()。这些都是是微软自己写的,安全性有很大提升。但缺点是,安全函数只在visual studio下能用,别的编译器识别不了。所以说,安全也是要付出代价的。

值得注意的是,漏洞的危害性也不在于漏洞本身,而是在于利用它的方法。同样的漏洞,在不同人看来利用的方式也不同,所带来的危害也程度也不尽相同。只有赶在攻击者之前,不断地发现漏洞,修补漏洞,才能最大程度上避免安全问题。

本文作者:Mr Six

(0)

相关推荐

  • 一个小小指针,竟把Linux内核攻陷了!

    来自公众号:编程技术宇宙 怎样攻进操作系统内核? 这是一个很有意思也很硬核的问题. 黑客通过应用程序的漏洞(如Java.PHP.Apache.IE.Chrome.Adobe.office等)获得执行代 ...

  • Java开发工程师最新面试题库系列——Java基础部分(附答案)

    JAVA基础 如果你有更好的想法请在评论区留下您的答案,一起交流讨论 面向对象有哪些特征? 答:继承.封装.多态 JDK与JRE的区别是什么? 答:JDK是java开发时所需环境,它包含了Java开发 ...

  • 浅谈乡村治理模式发生了哪些变化?

    随着乡村现代化的发展,越来越多的乡村走上了建设数字乡村的道路,从传统的乡村治理到使用互联网数字化治理的模式,乡村的风貌和农民的生活也发生了巨大的变化,接下来就让我们一起来了解一下乡村治理模式到底发生了 ...

  • 汽车是怎么开发出来的?浅谈汽车开发流程

    许良  汽车话题下的优秀答主你知道汽车是怎么开发出来的吗?你的脑海中很可能浮现出来这样一个画面:一个非常有艺术气息的设计师,在草图上帅气的描绘着看起来非常犀利的线条.对,但不全对.对于汽车工程师的我而 ...

  • 浅谈办公室装修的发展前景和趋势

    未来办公室装修的发展趋势会是怎样的?这是这个行业未来前景的重要话题.在这样一个新时代里,所有的事物都会以最新颖的方式出发.科技的发展也让每个行业都转遍了方向,同时对行业的要求和品质也有了更高的要求. ...

  • 颧骨浅谈

    ​骨过高 颧骨过于发达的人,单从脸部看上去就给人以高傲的感觉.而他们也得确有这种个性,常固执已见,虚张声势或显得自负是他们的特色.在工作上,也不愿意接受他人的忠告,总认为自己的就是最好的,这一点不利于 ...

  • 浅谈地龙在治疗咳喘中的运用

    浅谈地龙在治疗咳喘中的运用 笔者从事中医临床工作十多年来,在运用地龙治疗痰湿壅肺型.肺络瘀阻型.心肺两虚型.肾不纳气型的咳喘上有了一些心得,现介绍如下.   咳喘是现代医学中呼吸系统.心血管系统疾病的 ...

  • [鉴史释疑]曹操是英雄还是汉贼 浅谈曹操的英雄之处

    时间:2021-04-16 08:30:03    来源:本站(吾爱诗经网)整理       作者:魁哥说历史 在不同人眼里,曹操的形象和品格都是不一样的.有人觉得曹操是汉贼,但也有人说曹操是英雄,其 ...

  • 油车的教学真能开电车? 从驾校角度浅谈电动汽车事故

    可能是因为电动汽车正处汽车变革的"风口"中,所以因为电动汽车造成的事故在今年都能成为热搜榜的常客,刨去产品本身的原因不谈,在驾校的培训体系中有没有需要提升的部分? 我们都知道目前驾 ...

  • ​浅谈中医:心、肝、脾、肺、肾五脏异常会出现这些症状【推荐好文】

    在中医里,心.肝.脾.肺.肾这五脏不仅仅是身体器官,更是人体养生的最终落脚点.在繁忙的社会环境中,五脏承受了许多本不应该承受的负担,一些不良的习惯往往在潜移默化中伤害着五脏以及我们的身体健康.那么在这 ...

  • 瓷器鉴定基础知识(3):浅谈瓷器鉴定的基本方法

    古代瓷器,是历史的产物,其上会有历史的烙印.它们犹如文学作品一样,有其产生的时代背景,因此,鉴定一件瓷器就如同鉴赏一本书籍,需要从它的内容去进行解读和分析.瓷器的内容,不以文字形式呈现,而是以它的造型 ...