我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:大丰收高手论坛 > 动态缓冲区 >

缓冲区溢出的保护机制

归档日期:06-04       文本归类:动态缓冲区      文章编辑:爱尚语录

  今天在研究liunx下栈溢出的时候发现自己对各种保护机制并不是特别了解,因此就这方面的知识在网上查找了一些资料并总结了一些心得和大家分享。

  操作系统提供了许多安全机制来尝试降低或阻止缓冲区溢出攻击带来的安全风险,包括DEP、ASLR等。在编写漏洞利用代码的时候,需要特别注意目标进程是否开启了DEP(Linux下对应NX)、ASLR(Linux下对应PIE)等机制,例如存在DEP(NX)的话就不能直接执行栈上的数据,存在ASLR的话各个系统调用的地址就是随机化的。

  checksec是一个脚本软件,也就是用脚本写的一个文件,不到2000行,可用来学习shell。

  一般来说,如果是学习二进制漏洞利用的朋友,建议大家使用gdb里peda插件里自带的checksec功能,如下:

  栈溢出保护是一种缓冲区溢出攻击缓解手段,当函数存在缓冲区溢出攻击漏洞时,攻击者可以覆盖栈上的返回地址来让shellcode能够得到执行。当启用栈保护后,函数开始执行的时候会先往栈里插入cookie信息,当函数真正返回的时候会验证cookie信息是否合法,如果不合法就停止程序运行。攻击者在覆盖返回地址的时候往往也会将cookie信息给覆盖掉,导致栈保护检查失败而阻止shellcode的执行。在Linux中我们将cookie信息称为canary。

  这个保护机制查了很久都没有个很好的汉语形容,根据我的理解它其实和栈保护都是gcc的新的为了增强保护的一种机制,防止缓冲区溢出攻击。由于并不是太常见,也没有太多的了解。

  我们可以看到gcc生成了一些附加代码,通过对数组大小的判断替换strcpy, memcpy, memset等函数名,达到防止缓冲区溢出的作用。

  NX即No-eXecute(不可执行)的意思,NX(DEP)的基本原理是将数据所在内存页标识为不可执行,当程序溢出成功转入shellcode时,程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令。

  gcc编译器默认开启了NX选项,如果需要关闭NX选项,可以给gcc编译器添加-z execstack参数。

  在Windows下,类似的概念为DEP(数据执行保护),在最新版的Visual Studio中默认开启了DEP编译选项。

  一般情况下NX(Windows平台上称其为DEP)和地址空间分布随机化(ASLR)会同时工作。

  可以防范基于Ret2libc方式的针对DEP的攻击。ASLR和DEP配合使用,能有效阻止攻击者在堆栈上运行恶意代码。

  设置符号重定向表格为只读或在程序启动时就解析并绑定所有动态符号,从而减少对GOT(Global Offset Table)攻击。

  文/H3C攻防研究团队现阶段的安全漏洞种类很多,包括大家熟悉的SQL注入漏洞、缓存溢出漏洞、XSS跨站脚本漏洞等。而栈溢出漏洞作为缓冲区溢出漏洞的一种特定的表现形式,在现实网络环境中比较普遍。本文将从...博文来自:wei.zhou的专栏

  Linux上最新GCC版本提供了三种对抗缓冲区溢出攻击的机制--1.栈随机化    攻击者对系统攻击时不但需要插入代码,还需要插入指向这段代码的指针,这个指针也是攻击字符串的一部分,而产生指针需要知道...博文来自:SCAU_Jimmy的专栏

  1、NX/DEP:堆栈不可执行,将数据所在的内存页标识为不可执行,当程序试图在数据页面执行指令时,cpu就会抛出异常绕过方法:ROPret2libc关闭NX:gcc-zexecstack-opwnpw...博文来自:zszcr的博客

  栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构从逻辑上讲,栈帧就是一个函数执行的环境:函数参数、函数的局部变量、函数执行完后返回到哪里…。实现上有硬件方式和软件方式(有些体系不支持...博文来自:hjxhjh的专栏

  概念:缓冲区——程序用来保存用户输入数据、程序临时数据的内存空间,本质为数组。缓冲区溢出攻击——攻击者利用程序漏洞,将自己的攻击代码植入有缓冲区溢出漏洞的程序执行体中,改变该程序的执行过程,来获取目标...博文来自:李洲谊

  缓冲区溢出攻击与防护转载请注明出处:缓冲区溢出的攻击大致分为以下几类: 1.栈溢出(stacksmashing)未检...博文来自:zdy0_2004的专栏

  1引言缓冲区溢出是C/C++语言种常见的一种攻击手段,主要是利用了C/C++语言中缺少对数组边界的检查机制。典型的一段代码如下所示:#defineN      256#definen      16v...博文来自:softee的专栏

  总结:ASLR不负责代码段以及数据段的随机化工作,这项工作由PIE负责。但是只有在开启ASLR之后,PIE才会生效。...博文来自:乱七八糟の中转站

  0x00前言众所周知,linux下开启了NX的以及windows下开启了DEP的程序堆栈是不可执行的,linux下的程序默认编译时是开启了NX的,故很久以前采用的通过jmpesp或者jmprsp跳板技...博文来自:parker的专栏

  本周心情异常不好。无聊之余,想弄一下缓冲区溢出实验,之前一直听说这个,也没有亲自动手做一下,发现真正弄起来的时候还是没那么简单的,其实学到的东西还是不少的。特此记下学习的过程。一、基础知识这一部分主要...博文来自:Venscor技术养成之路

  1.getint是什么getint函数将输入的字符流分解后才能整数,且每次调用得到一个整数。getint需要返回转换得到的整数,并且在到达输入结尾的时候返回文件结束标记2.什么是stdinstdout...博文来自:hauk

  最近用到了checksec,想整理整理一些Linux防溢出的保护措施,因为容易弄混。。Checksec是一个bash脚本,用于检查可执行文件的属性(如PIE,RELRO,PaX,Canaries,AS...博文来自:CHOOOU的博客

  实验环境:winxpsp3、vs201010.1GS的保护原理看图就明白了在vs2010中可通过以下选项选择是否开启GS,默认开启:以下情况不会进行GS保护:(1)函数不包含缓冲区(2)函数被定义为具...博文来自:I have a dream

  今天同样遇到了printf()不输出的情况,看来水很深,在网上找了找,将下面这些东西推荐给大家, 源连接:博文来自:有一种坚持就作不放弃

  真的很小白,从安装虚拟机开始主要参考Mr.Buffoon这篇文章,增加了一些遇到的问题和解决方案1.环境配置我用的是virtualbox,百度搜索从官网下就好了。然后从这里下载WindowsXPsp3...博文来自:MOLLMY的专栏

  实验目的本实验的目的在于加深对IA-32函数调用规则和栈结构的具体理解。实验的主要内容是对一个可执行程序”bufbomb”实施一系列缓冲区溢出攻击(bufferoverflowattacks),也就是...博文来自:我去

  实验内容:分析缓冲区溢出漏洞,利用CCProxy6.2的这个缓冲区溢出漏洞,利用ping命令向其发送一个长的字符串,溢出局部变量,覆盖RET的位置,从而实现程序跳转到自己想要让其执行的程序上去。 定...博文来自:liujiayu2的专栏

  实验内容:分析缓冲区溢出漏洞,利用CCProxy6.2的这个缓冲区溢出漏洞,利用ping命令向其发送一个长的字符串,溢出局部变量,覆盖RET的位置,从而实现程序跳转到自己想要让其执行的程序上去。 定...博文来自:Mr.Buffoon

  缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击,可以导致程序运行失败、系统宕机、重新启动等后果。更为严重的是,可以利用它执行非授权指令,甚至可以取得系...博文来自:4ct10n

  CCProxy远程缓冲区溢出分析luoluo[]CCProxy的缓冲区溢出攻击代码早已公布,但是我并没有能找到漏洞的相关说明,以下就对这个简单的缓冲区溢出漏洞...博文来自:执着我一生[F.S.T]

  Android系统提供了非常严格的多层次的安全保护措施,包括代码。为了防止恶意用户采用恶意软件进行缓冲区溢出***或者进行“越狱”操作,自Android4.0版本之后,内核就引入了ASLR技术来对代码...博文来自:weixin_33674976的博客

  1.什么是缓冲区溢出攻击? 举个例子,一个杯子里装水,装满后依旧不停继续装那就会溢出来,这就是缓冲区溢出。首先我们来看一段会有的缓冲区溢出问题的代码:#includelt;stdio.h&a...博文来自:的博客

  栈溢出主要是通过覆盖栈内保存的函数返回地址eip,然后在EIP处写入shellcode地址做的。对于栈溢出的保护有很多1使用栈保护比如linux上的-fstack-protectorwindows上的...博文来自:groundhappy的专栏

  注:本文属于个人原创,错误处请各位指正一、缓冲区溢出百度百科“缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击,可以导致程序运行失败、系统宕机、重新启动...博文来自:大头的博客

  最近一段时间,在网上搜索关于缓冲区溢出攻击的文章,实验了一下,成功实现了缓冲区溢出攻击,现在把过程记录下来。 #include#includevoidhello(){printf(hello\n)...博文来自:天元喜羊羊的博客

  C实战:CSAPP缓冲区溢出实验(上)下载实验工具,最新的讲义在这。网上能找到的实验材料有些旧了,有的地方跟最新的handout对不上。不过没有关系,大体上只是程序名(sendstring)或者参数名...博文来自:西代零零发

  一、寄存器ESP、EBP、EIPCPU的ESP寄存器存放当前线程的栈顶指针,EBP寄存器中保存当前线程的栈底指针。CPU的EIP寄存器存放下一个CPU指令存放的内存地址,当CPU执行完当前的指令后,从...博文来自:swartz_lubel的专栏

  smoke要求:构造攻击字符串作为目标程序输入,造成缓冲区溢出,使getbuf()返回时不返回到test函数,而是转向执行smoke思路:理解了getbuf栈的构成:开辟的空间[1][2][3]…[3...博文来自:leafdown_的博客

  一、缓冲区溢出的概念BO的概念很简单,就是你申请了一点内存,而你填入的数据超过了内容的大小,这样你填入的数据就会占用其他的内容,这种情况就是缓冲区溢出。voidcopy(char*info){char...博文来自:小太阳~

  GCC中的编译器堆栈保护技术以堆栈溢出为代表的缓冲区溢出攻击已经成为一种普遍的安全漏洞和攻击手段。本文首先对编译器层面的堆栈保护技术作简要介绍,然后通过实例来展示GCC中堆栈保护的实现方式和效果。最后...博文来自:程序员的修炼

  缓冲区溢出是漏洞利用中的重要一步。通过设置编译选项/gs会给可执行文件中添加一些特殊的代码,来防止缓存区的溢出。比如#include#include#defineBUF_LEN16unsignedch...博文来自:足球先生的专栏

  首发于:前言缓冲区溢出大家估计听了不少了,但是实践过就更好了为什么会出现缓存区溢出呢?(这里主要针对栈)简单来说,首先局部...博文来自:giantbranch的专栏

  使用的是全志H3的芯片,运行Debian Desktop系统的ARM版本Armbian,要控制外部几个IO口,可以使用很多种方法,如果对GPIO的操作速度有要求就需要使用直接操作内存寄存器的方式来控制...博文来自:欢迎光临

  一、图像内插-最近邻内插法 1、数学原理      当一幅二维数字图像从源图像N*M被放为(j*N) * (k*M)目标图像是,参照数学斜率计算公式      必然有: (X1 – Xmin)/...博文来自:清风似水流的专栏

  最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗! Docker的三大核心概念:镜像、容器、仓库 镜像:类似虚拟机的镜像、用俗话说就是安装文件。 容器:类似一个轻量...博文来自:我走小路的博客

  一个例子高斯混合模型(Gaussian Mixed Model)指的是多个高斯分布函数的线性组合,理论上GMM可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布的情况(或者是同一...博文来自:小平子的专栏

  docx4j官方提供了一些例子,本文只是其中一部分应用的简单例子。需要注意的地方是页眉和页脚,必须创建对应关系才能起作用。页眉和页脚添加图片的时候,第二个参数sourcePart是必须的,调用的cre...博文来自:偶尔记一下

  alpha:表示目前为止找到的最小数 beta:表示目前为止找到的最大数 1.极大层的上一层是极小层。一方面极大层找的是自己的子节点中的最大值,另一方面极大层的上一层找的是极大层们提供的节点中的最小一...博文来自:脚踏实地,仰望星空

  一般这个错误时不能打开应用程序进行写操作,有可能是该程序已经运行,不让写,所以会出现链接错误!打开任务管理器将其终止即可!!...博文来自:maokaijiang的专栏

  强连通分量: 简言之 就是找环(每条边只走一次,两两可达) 孤立的一个点也是一个连通分量   使用tarjan算法 在嵌套的多个环中优先得到最大环( 最小环就是每个孤立点)   定义: int Ti...博文来自:九野的博客

  jquery/js实现一个网页同时调用多个倒计时(最新的) 最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦! //js ...博文来自:Websites

  兄弟姐妹们,如需转载请标明出处:总目录 各位乡亲父老们!人工智能,马上就要爆发了。一旦爆发,将会如黄河泛滥一发不可收拾。...博文来自:床长的专栏

  :[reply][/reply] 是不是这个是您自己做的指纹识别程序? 那真正的Mysql 读取程序是不是在上一句就已经接结束了呢? 读取的blob数据存到了数组object[]了吗 ?

  :博主 我想问您一下 BIOKEY_DB_ADD这个函数是在哪里定义的 需要加什么头文件吗 ?

本文链接:http://quangdungfc.net/dongtaihuanchongqu/256.html