美文网首页
栈溢出攻击理论分析

栈溢出攻击理论分析

作者: Sharkchilli | 来源:发表于2020-05-30 12:10 被阅读0次

栈溢出概述

栈溢出是比较常见的一个安全漏洞,因为程序员的一些粗心大意使用了一些被微软淘汰的函数如:strcpy、sprintf 等,特别是在字符串拷贝时。正常情况出现栈溢出时程序会跳到不可执行的内存中从而导致查询崩溃。但是如果这个字符串是由外界输入(用户界面等)那么这其中就可以做许多手脚,微软在防止栈溢出漏洞也做了许多努力(gs-security cookie,变量重排,地址随机化等等),特别是在高版本的vs中编译时不允许使用以上提到的不安全函数。但是依然有一些老的项目和老平台(XP)存在这些漏洞。

栈溢出的原因

我们先看一下在函数调用时,栈上的数据变化(如下图)


image.png

比如一个C函数void add(3,4);的函数调用

void add (int 3,int 4)
{
   char buf[10];
}

由于_cdecl 是C和C++默认的调用约定

  • 所以系统先将参数从右到左依次入栈:
image.png
  • 然后再将eip入栈(这个就是函数的返回地址),再将ebp入栈:
image.png
  • 最后将局部变量入栈(因为局部变量是在栈中):

    字节对齐后栈的变化如下:

image.png

此时栈顶指针距离我们的eip为16个字节

以上便是函数调用时栈的变化情况

试想一下当我们使用strcpy往局部变量拷贝数据大于16字节时,将eip覆盖成shellcode代码的地址,便可以完成一次栈溢出攻击

基于这个变化我们下一章将使用OD对一个栈溢出漏洞进行逆向调试分析

相关文章

  • 栈溢出攻击理论分析

    栈溢出概述 栈溢出是比较常见的一个安全漏洞,因为程序员的一些粗心大意使用了一些被微软淘汰的函数如:strcpy、s...

  • Canary机制及绕过策略-格式化字符串漏洞泄露Canary

    Canary主要用于防护栈溢出攻击。我们知道,在32位系统上,对于栈溢出漏洞,攻击者通常是通过溢出栈缓冲区,覆盖栈...

  • buuctf

    level2: 简单的栈溢出,覆盖返回地址 ez_pz_hackover_2016 泄露栈地址,ida分析绕过,r...

  • 浅说iOS为什么会上栈溢出

    简介 本文介绍了如下内容 栈的概念 为什么会发生栈溢出 栈溢出的几种栗子 怎么预防和发现栈溢出。 什么是栈? 从数...

  • 栈溢出简易指南

    栈 pwn 主题: 基本栈溢出 针对缓存区溢出防护的对策 shellcode 栈溢出的最终目的是执行shellco...

  • 栈溢出漏洞OD调试分析

    前言 上一章对栈溢出漏洞进行了理论分析,在OD中我们可以清楚的看到堆栈的数据变化和CPU的执行流程,所以现在我们就...

  • 栈溢出攻击及防护方法简介

    0. 引言 如果你学的第一门程序语言是C语言,那么下面这段程序很可能是你写出来的第一个有完整的 “输入---处理-...

  • JVM

    1、一般什么情况会发生栈溢出、堆溢出 栈溢出(StackOverflowError) 1、栈是线程私有的,他的生命...

  • 2019-04-06 递归函数

    栈溢出

  • JVM内存溢出场景及案例

    1、元空间内存溢出 案例: 解决方案:设置jvm参数打印gc日志,并使用mat工具进行分析 2、虚拟机栈内存溢出 ...

网友评论

      本文标题:栈溢出攻击理论分析

      本文链接:https://www.haomeiwen.com/subject/gxmczhtx.html