堆栈溢出(计算机术语)

更新时间:2025-01-06 16:34:06 阅读: 评论:0

堆栈溢出(计算机术语)

堆栈溢出 (计算机术语) 次浏览 | 2022.08.06 11:52:07 更新 来源 :互联网 精选百科 本文由作者推荐 堆栈溢出计算机术语

堆栈是一个在计算机科学中经常使用的抽象数据类型。堆栈溢出就是不顾堆栈中分配的局部数据块大小,向该数据块写入了过多的数据,导致数据越界,覆盖了老的堆栈数据。或者解释为在长字符串中嵌入一段代码,并将过程的返回地址覆盖为这段代码的地址,这样当过程返回时,程序就转而开始执行这段自动编译这段代码了。堆栈溢出一般在递归中产生。堆栈溢出很可能由无限递归(Infinite recursion)产生,但也可能仅仅是过多的堆栈层级。

中文名

堆栈溢出

技术

过程和函数

应用学科

计算机科学

内存

连续内存

地址

固定地址

类别

高级语言

领域

计算机安全

堆栈

堆栈是一个在计算机科学中经常使用的抽象数据类型。堆栈中的物体具有一个特性:最后一个放入堆栈中的物体总是被最先拿出来,这个特性通常称为后进先处(LIFO)队列。堆栈中定义了一些操作,两个最重要的是PUSH和POP。PUSH操作在堆栈的顶部加入一个元素。POP操作相反,在堆栈顶部移去一个元素,并将堆栈的大小减一。

为什么使用堆栈

现代计算机被设计成能够理解人们头脑中的高级语言。在使用高级语言构造程序时,最重要的技术是过程(procedure)和函数(function)。从这一点来看,一个过程调用可以象跳转(jump)命令那样改变程序的控制流程,但是与跳转不同的是,当工作完成时,函数把控制权返回给调用之后的语句或指令。这种高级抽象实现起来要靠堆栈的帮助。堆栈也用于给函数中使用的局部变量动态分配空间,同样给函数传递参数和函数返回值也要用到堆栈。

堆栈区域

堆栈是一块保存数据的连续内存。一个名为堆栈指针(SP)的寄存器指向堆栈的顶部。堆栈的底部在一个固定的地址。堆栈的大小在运行时由内核动态地调整。CPU实现指令PUSH和POP,向堆栈中添加元素和从中移去元素。堆栈由逻辑堆栈帧组成。当调用函数时逻辑堆栈帧被压入栈中,当函数返回时逻辑堆栈帧被从栈中弹出。

解决措施

能够监视malloc,memt,memcpy,free这四个函数的行为(栈就不检测了,一般栈溢出的情况比较少,也好查。另外new和delete由于水平有限,无法对其监视)。如果发现越界操作,打印出来,继续执行。也就是说该检测工具不影响程序的行为。

堆栈溢出攻击利用JMPESP的方式

其利用格式是NNNNNNRSSSSS,这里N=NOP,R=RET(jmpesp的地址),S=ShellCode。就是把缓冲区一直覆盖成NOP(空指令,什么都不做),直到原来的EIP位置时,我们填入系统中某个核心dll中的jmpesp的地址,紧跟后面才是我们的ShellCode。

正常情况下,函数返回时,执行RET指令,这等于POP EIP,会把保存的原来程序的EIP的值恢复,从而完成中断的返回。但在这里,我们把保存的EIP的值覆盖了,改写成了jmp esp的地址。这样,POPEIP后,EIP=jmp esp的地址,而堆栈指针ESP会往下走,指向ShellCode的开始。程序继续执行,此时EIP里的内容是jmp esp,系统执行jmp esp,就正好就跳到我们的ShellCode的地方了。

如果ShellCode是开个端口,那我们就可以远程连上去;如果ShellCode是下载执行,那我们就可以让目标机在网页上下个文件并执行,只要你想到达的功能,都可以想办法实现。

利用JMPEBX的方式

其利用格式是NNNNNJESSSSSS。这里N=NOP,J=Jmp04,E=jmpebx的地址,S=ShellCode。这里的J和E的位置是关键,E是在出错处理的入口位置,而J在其前面。在第一种方式中,我们知道将返回地址覆盖成另一个地址。但如果是个无效的地址呢?那里指向的数据或许不能读,或许不能执行,那会怎么样呢?其实相信大家都遇到过,那就是系统会弹出个对话框报错,我们点确定,就会终止运行。

这是因为作为一个系统级的程序,内部有健全的出错处理机制。简单的说,如果运行时有错误产生,windows就会跳到一个专门处理错误的地方,对应不同的错误,执行不同的代码。上面执行的代码就是弹出个对话框报错。

所以这里我们故意把返回的地址覆盖成一个错误的地址。这样出错时,windows就会跳到处理错误的入口,而ebx指向入口前4个字节的地方!那我们把错误入口处覆盖为jmpebx的地址,就会跳到前4个字节,怎么跳到ShellCode呢?在这里我们写入jmp04,哈哈,往后跳4个字节,正好跳过覆盖值,达到我们的ShellCode。

相关报道

算法安全是AI安全的一个重要组成部分,360AI安全研究院研究员刘昭认为,如果要建立完整的AI安全体系,我们还需要关注AI算法所依赖的基础设施安全。AI关键基础设施存在容易被忽视的安全问题,如堆栈溢出、未授权访问、任意文件上传等,这些安全问题将会导致严重后果,如恶意代码执行、敏感信息泄露、服务不可用等。[1]

参考资料

本文发布于:2023-06-04 00:05:41,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/zhishi/a/92/192545.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:堆栈溢出(计算机术语).doc

本文 PDF 下载地址:堆栈溢出(计算机术语).pdf

标签:堆栈   术语   计算机
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 实用文体写作网旗下知识大全大全栏目是一个全百科类宝库! 优秀范文|法律文书|专利查询|