zoukankan      html  css  js  c++  java
  • 内存攻击原理

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

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

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

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

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

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

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

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

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

    待续。。。。。。

  • 相关阅读:
    c#调用dll,::CoInitialize(NULL)出错
    使用 Anthem.NET 的常见回调(Callback)处理方式小结
    主题和皮肤学习
    得到任意网页源代码 (利用WebClient和WebRequest类)
    HTML marquee标签详解
    制作一个简单的天气预报
    CSS中的类class和标识id选择符(.和#号)
    String split '.'
    Map 的 clear() 方法会清空 Map对象
    sqLite 执行查询语句时报错__及SimpleCursorAdapter
  • 原文地址:https://www.cnblogs.com/liuxgcn/p/11172487.html
Copyright © 2011-2022 走看看