• 内存攻击原理


    内存攻击:是指攻击者利用软件安全漏洞,构造恶意输入,导致软件在处理数据流是出现非预期错误,将输入数据写入内存中的某些特定位置,从而劫持软件控制流,转而执行外部输入的指令代码,造成目标系统被获取远程控制权限或者被拒绝服务

    内存攻击的表面原因:软件编写错误,如过滤输入的条件设置缺陷、变量类型转换错误、逻辑判断错误、指针引用错误等。

    根本原因:没有在内存中严格区分数据和指令

    缓冲区溢出:程序缺乏对缓冲区的边界条件检查而引起的一种异常行为。通常是程序向缓冲区中写数据,但是内容超过了程序员设定的缓冲区边界,从而覆盖了相邻的内存区域,造成覆盖程序中的其他变量甚至影响控制流的敏感数据,造成程序的非预期行为。

    一般根据缓冲区溢出的内存位置不同,将缓冲区溢出分为栈溢出 (Stack Overflow)堆溢出 (Heap Overfolw)

    栈区 (Stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。是用操作系统创建和维护的。

    函数代码执行完后会通过 ret 指令从栈中弹出返回地址,装载到 EIP 指令寄存器,从而继续程序的执行。程序向栈中的内存地址写数据时,当写入的数据长度超过栈分配给缓冲区的空间时,就会造成栈溢出。

    覆盖函数返回地址利用方式,栈溢出前后栈空间内存布局:

    堆区 (Heap):一般由程序员分配释放,若程序员不释放,程序结束时由 OS 回收。堆是程序运行时动态分配的内存,用户通过 malloc、new 等函数申请内存,通过返回的起始地址指针对分配的内存进行操作,使用完以后要通过 free、delete 等函数释放。

    待续。。。。。。

  • 相关阅读:
    vue项目架构
    vue.js 视频播放
    Intellij使用"easyexplore"
    ScrollView嵌套GridView不显示顶部
    Android开发日志统一管理
    Android带弹性的View
    Mysql数据库乱码
    为Activity生成桌面快捷方式
    二维码扫描ZXing简化
    减少XML文件数
  • 原文地址:https://www.cnblogs.com/liuxgcn/p/11172487.html
Copyright © 2020-2023  润新知