1. 进程的内存空间

但是不管什么样的操作系统、什么样的计算机架构,进程使用的内存都可以按照功能大致分成以下4个部分。
(1)代码区:这个区域存储着被装入执行的二进制机器代码,处理器会到这个区域取指并执行。
(2)数据区:用于存储全局变量等。
(3)堆区:进程可以在堆区动态地请求一定大小的内存,并在用完之后归还给堆区。动态分配和回收是堆区的特点。
(4)栈区:用于动态地存储函数之间的调用关系,以保证被调用函数在返回时恢复到母函数中继续执行。

在Windows平台下,高级语言写出的程序经过编译链接,最终会变成PE文件。当PE文件被装载运行后,就成了所谓的进程。

PE文件代码段中包含的二进制级别的机器代码会被装入内存的代码区(.text),处理器将到内存的这个区域一条一条地取出指令和操作数,并送入算术逻辑单元进行运算;如果代码中请求开辟动态内存,则会在内存的堆区分配一块大小合适的区域返回给代码区的代码使用;当函数调用发生时,函数的调用关系等信息会动态地保存在内存的栈区,以供处理器在执行完被调用函数的代码时,返回母函数。


程序中所使用的缓冲区可以是堆区、栈区和存放静态变量的数据区。缓冲区溢出的利用方法和缓冲区到底属于上面哪个内存区域密不可分。

2. 栈溢出

2.1 函数调用栈

  1. 在main函数调用func_A的时候,首先在自己的栈帧中压入函数返回地址,然后为func_A创建新栈帧并压入系统栈。
  2. 在func_A调用func_B的时候,同样先在自己的栈帧中压入函数返回地址,然后为func_B创建新栈帧并压入系统栈。
  3. 在func_B返回时,func_B的栈帧被弹出系统栈,func_A栈帧中的返回地址被“露”在栈顶,此时处理器按照这个返回地址重新跳到func_A代码区中执行。
  4. 在func_A返回时,func_A的栈帧被弹出系统栈,main函数栈帧中的返回地址被“露”在栈顶,此时处理器按照这个返回地址跳到main函数代码区中执行。


每一个函数独占自己的栈帧空间。当前正在运行的函数的栈帧总是在栈顶。
(1)ESP:栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶。
(2)EBP:基址指针寄存器(extended base pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部。

2.2 栈溢出

函数的局部变量在栈中一个挨着一个排列。如果这些局部变量中有数组之类的缓冲区,并且程序中存在数组越界的缺陷,那么越界的数组元素就有可能破坏栈中相邻变量的值,甚至破坏栈帧中所保存的EBP值、返回地址等重要数据。

2.3 代码植入(shellcode)

通过栈溢出让进程执行输入数据中植入的代码。

shellcode这个专用术语来通称缓冲区溢出攻击中植入进程的代码。这段代码可以是出于恶作剧目的的弹出一个消息框,也可以是出于攻击目的的删改重要文件、窃取数据、上传木马病毒并运行,甚至是出于破坏目的的格式化硬盘等。

shellcode往往需要用汇编语言编写,并转换成二进制机器码,其内容和长度经常还会受到很多苛刻限制,故开发和调试的难度很高。

2.4 exploit

expliot的核心是淹没返回地址,劫持进程的控制权,之后跳转去执行shellcode。与shellcode具有一定的通用性不同,exploit往往是针对特定漏洞而言的。

3. 用MetaSploit开发Exploit

漏洞利用技术有一些相对独立的过程:
(1)触发漏洞exploit:缓冲区有多大,第几个字节可以淹没返回地址,用什么样的方法植入代码?
(2)选取shellcode:执行什么样的shellcode决定了漏洞利用的性质。例如,是作为安全测试而弹出的一个消息框,还是用于入侵的端口绑定、木马上传等。
(3)重要参数的设定:目标主机的IP地址、bindshell中需要绑定的端口号、消息框所显示的内容、跳转指令的地址等经常需要在shellcode中进行修改。
(4)选用编码、解码算法:实际应用中的shellcode往往需要经过编码(加密)才能安全地送入特定的缓冲区;执行时,位于shellcode顶部的若干条解码指令会首先还原出原始的shellcode,然后执行。

MSF内置了常用的exploit/shellcode/encoder,把开发exploit的工作变成了做“填空题”的过程。

二进制漏洞利用原理--栈溢出相关推荐

  1. 二进制概述-0day漏洞利用原理(1)

    二进制利用基本原理,Lord PE的使用,凡是资源性的物质且可表达的皆可利用. 往期文章: 漏洞概述-0day漏洞利用原理(0)_luozhonghua2000的博客-CSDN博客 PE 文件格式 P ...

  2. 0day工具集(资源)介绍-0day漏洞利用原理(2)

    往期文章: 漏洞概述-0day漏洞利用原理(0)_luozhonghua2000的博客-CSDN博客 二进制概述-0day漏洞利用原理(1)_luozhonghua2000的博客-CSDN博客 上篇已 ...

  3. 漏洞poc和漏洞利用_带HTML的PowershellHTML空白空间隐写术和二进制漏洞利用交付[PoC]

    漏洞poc和漏洞利用 实用隐写术 (Practical Steganography) A few years ago I came across a very academic challenge: ...

  4. 二进制漏洞挖掘之栈溢出-开启RELRO

    二进制漏洞-栈溢出 github地址:https://github.com/ylcangel/exploits/tree/master/stack_overflow 你可以用于学习,但不能用于商用(如 ...

  5. Struts2漏洞利用原理

    概述: Struts2是apache项目下的一个web 框架,目前web框架中非常流行的都是mvc设计模式.经典例子例如:python的Django.Flask:java的ssm等.因为使用MVC设计 ...

  6. UAF漏洞利用原理分析

    UAF漏洞 Use After Free 利用原理 UAF漏洞是一块内存被释放后又被使用. 操作系统将新申请的内存的指针指向了已经被释放的内存且被释放的内存指针不为null,则会出现悬挂指针,在新申请 ...

  7. 漏洞概述-0day漏洞利用原理(0)

    0day专题对作者来说是一个很大的挑战,但无论有多难,作者会坚持进行大量的对新旧技术(精通二进制.汇编语言.操作系统底层的知识)实践并尽可能做到完善,最终利用技术发扬正能量. bug 与漏洞 随着现代 ...

  8. (21)【后端黑白名单绕过】【WEB 漏洞利用/原理】不懂原理都是没灵魂的方法躯壳?文件上传漏洞利用过程

    目录 后端黑名单绕过 特殊可解析后缀 原理:就是加上数字等,但是可以被当做原来的类型进行执行 利用过程: .htaccess解析 原理:上传.htaccess文件到指定的目录,重写当前目录下的解析规则 ...

  9. (23)【漏洞利用】【原理、利用过程】中间件解析漏洞、CMS漏洞、编辑器漏洞、CVE漏洞

    目录 解析漏洞: 原理: 变化因素: 熟知的中间件(解析漏洞) 0x01    IIS5.x-6.x解析漏洞: (1)目录解析漏洞(IIS6.0) 原理: 利用过程: (2)文件解析漏洞 原理: 利用 ...

最新文章

  1. 什么是GStreamer?
  2. 机器学习Python实践》——数据导入(CSV)
  3. oracle:sql查询
  4. understand软件使用教程
  5. 终于迎来大改变!iPhone 14全系标配120Hz高刷屏+6GB内存
  6. 删除链表的倒数第 N 个节点
  7. win10运行在哪里_原来win10还有LTSC版:10G大小+不强制更新,运行比win7更快!
  8. 虚拟机您的计算机无法启动,一键解决win10虚拟机无法启动的问题
  9. 《电子元器件的可靠性》——3.1节可靠性试验的意义
  10. IT与DT技术几点解释
  11. JSON.stringify(value[, replacer[, space]])中三个参数详解
  12. python实现对图片的一些简单处理
  13. 怎样开启成功的“数据分析师”职业生涯(R、Python、机器学习、通信和数据可视化、数据直觉)
  14. cad详图怎么画_施工图大样图都是怎么学的怎么画的cad 室内设计
  15. Mentor-dft 学习笔记 day24-Path Definition File
  16. python3不再区分整数和长整数_【判断题】Python3中不再区分整数和长整数,统一为int。...
  17. 2012最新超全个性签名,走过路过不要错过哦!
  18. 股票高频数据(分钟数据)的入门分析方法——已实现波动率的计算(含完整代码)
  19. PhpStorm + WampServer 开发环境配置
  20. java dos平台压缩_DOS命令行下使用HaoZip进行文件压缩的方法

热门文章

  1. redis set时间单位_SpringBoot+Redis分布式锁:模拟抢单
  2. 分布式与系统架构的演变
  3. 使用smo算法编写svm对CIFAR-10数据分类
  4. matlab背景点状,基于MATLAB的点状目标检测
  5. java 访问网络驱动器_尝试通过GitLab Runner脚本访问网络驱动器但收到错误
  6. 计算机关机键 自动重启,电脑按了关机键后电脑又自动重启了,怎么处理 啊
  7. bom实现方块移动_html5实现简单的拼图小游戏
  8. python做界面小软件_PySimpleGUI图形界面绘制及办公自动化小软件的制作
  9. oracle 循环继续,oracle – 是否可以继续从异常循环?
  10. 自然语言处理常用标识符<UNK>,<PAD>,<SOS>,<EOS>等