首页 > 其他分享 >三种栈溢出保护

三种栈溢出保护

时间:2023-04-24 21:35:57浏览次数:40  
标签:程序 PIE Canary gadgets 保护 地址 三种 ROP 溢出

Canary:

在系统中插入一个"Canary"值,即一个特定的随机数或标记。这个Canary值被放置在缓冲区(buffer)的末尾,用于检测缓冲区溢出(buffer overflow)攻击。

当攻击者试图修改缓冲区以达到控制系统的目的时,他们通常会尝试覆盖Canary值。由于Canary值是随机生成的,攻击者不知道正确的值是什么,所以如果Canary值被修改,系统就会立即检测到,并采取相应的防御措施,例如终止程序或警报管理员。

Canary bypass:img

PIE:

PIE技术是一个针对代码段(.text)、数据段(.data)、未初始化全局变量段(.bss)
等固定地址的一个防护技术,如果程序开启了PIE保护的话,在每次加载程序时都变
换加载地址,从而不能通过ROPgadget等一些工具来帮助解题

PIE bypass:img

如图为开了pie保护的程序,所有代码段的地址都只有最后三个数是已知的(代表了实际地址与程序加载地址的偏移量),这里有一点要知道的是,程序的加载地址一般都是以内存页为单位的,所以程序的基地址最后三个数字一定是0,这也就是说那些地址已知的最后三个数就是实际地址的最后三个数。知道这一点之后我们就有了绕过pie的思路,虽然我并不知完整的地址,但我知道最后三个数,那么我们是不是可以利用栈上已有的地址,只修改他们最后两个字节(最后四个数)即可。
所以对于绕过PIE保护的核心思想就是partial writing(部分写地址)

NX:

堆栈不可执行,即注入的SHELLCODE无法执行

NX bypass:

目前主要的是ROP(Return Oriented Programming)其主要思想是在栈缓冲区溢出的基础上,利用程序中已有的小片段(gadgets)来改变
某些寄存器或者变量的值,从而控制程序的执行流程。所谓gadgets就是以ret结尾的指令序列,通过这些指令序列,我们可以修改某些地址的内容,方便控制程序的执行流程。
之所以称之为ROP,是因为核心在于利用了指令集中的ret指令,改变了指令流的执行顺序ROP攻击一般得满足如下条件:
1.程序存在溢出,并且可以控制返回地址。
2.可以找到满足条件的gadgets以及相应gadgets的地址。
如果gadgets每次的地址是不固定的,那我们就需要想办法动态获取对应的地址了

ret2text即控制程序执行程序本身已有的的代码(.text)。其实,这种攻击方法是一种笼统的描述。我们控制
执行程序已有的代码的时候也可以控制程序执行好几段不相邻的程序已有的代码(也就是gadgets),这就
是我们所要说的ROP。

标签:程序,PIE,Canary,gadgets,保护,地址,三种,ROP,溢出
From: https://www.cnblogs.com/Sta8r/p/17350966.html

相关文章

  • 给电脑设置保护色
    向大家介绍一下怎样将电脑屏幕由刺眼的白色改为淡绿色,让大家在工作的同时,尽可能的将电脑对我们眼睛的伤害降到最低!设置方法:桌面空白处点击右键,选择“外观”然后点击“高级”按钮,选择“项目”列表里面的窗口(windows),再点颜色(color)-其它颜色......
  • 构造函数私有化或保护化
    构造函数私有化或保护化摘自:https://blog.csdn.net/caoyangxiaoyao/article/details/81184786构造函数私有化/保护化可以将构造函数设置为私有函数,但是这样做就无法从外部直接调用构造函数,因此就无法直接构造这个类的对象。1.如果你不想让外面的用户直接构造一个类(类A)的对象,而是......
  • redis应用场景及三种集群方式
    1.正文1.redis应用场景2.redis得持久化方式3.redis得集群4.java连接redis服务器2.redis应用场景1、热点数据的缓存----由于redis访问速度块、支持的数据类型比较丰富,所以redis很适合用来存储热点数据,另外结合expire,我们可以设置过期时间然后再进行缓存更新操作,这......
  • Docker镜像的三种创建方法及dockerfile案例
    一、基于现有镜像创建1. 首先启动一个镜像,在容器里做修改(1)首先启动一个镜像,在容器里做修改dockerrun-itdcentos:7/bin/bash#创建并启动镜像dockerps#查看启动的镜像信息 2. 将修改后的容器提交为新的镜像,需要使用该容器的ID号创建新镜像(2)将修改后的容器提......
  • PTS,SLM,Filter三种降低PAPR方法的matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:    2.算法涉及理论知识概要         正交频分复用(OFDM)是长期演进的4G蜂窝网络标准中采用的调制技术。但是,OFDM具有较强的带外辐射和较高的旁瓣,对频谱的感知精度低下。未来的无线标准需要为下一代移动系统提出具有......
  • 为什么医疗保健需要MFT来帮助保护EHR文件传输
    毫无疑问,医疗保健行业需要EHR技术来处理患者,设施,提供者等之间的敏感患者信息。但是,如果没有安全的MFT解决方案,您将无法安全地传输患者文件,从而使您的运营面临遭受数据泄露,尴尬,声誉损失以及随之而来的高昂损失的风险。在任何给定的软件领域,各种解决方案可能“看起来”像它们提供......
  • 写程序分析堆内存溢出和栈内存溢出
    打jar包用命令java-jar xxx.jar写程序分析堆内存溢出packagecom.mvntest.mvn;importjava.util.ArrayList;importjava.util.List;publicclassHeapOOM{ publicstaticvoidmain(String[]args)throwsInterruptedException{ intsize=1024*1024*8; List<......
  • 配置Swagger带token的三种方式
    现在的项目基本上都是前后端分离,很多API的调用都需要用到token验证,本文就介绍怎么在swagger的header中自动添加token。在每个接口上手动添加headerpackagecom.morris.swagger.web;importcom.morris.swagger.vo.R;importio.swagger.annotations.Api;importio.swagger.annota......
  • 什么是等保(信息安全等级保护)?
    什么是等保(信息安全等级保护)?一、什么是等保?“等保”,即信息安全等级保护,是我国网络安全领域的基本国策、基本制度。早在2017年8月,公安部评估中心就根据网信办和信安标委的意见将等级保护在编的5个基本要求分册标准进行了合并形成《信息安全技术网络安全等级保护基本要求》一个标......
  • tkinter中Scale滑杆获取值的三种方法
    importtkinterastkwin=tk.Tk()win.geometry('200x200')win.title('测试窗口')'''方法一:直接使用组件对象的get()方法获取程序调用该方法时,get()会返回当前滑杆的值'''#number_scale=tk.Scale(orient=tk.HORIZONTAL)#number_scale.pack(......