CTF权威指南 笔记 -第四章Linux安全机制-4.1-Stack Canaries

news2024/11/30 2:33:27

目录

Stack Canaries

简介

我们进行简单的例子

64

32

checksec


Stack Canaries

是对抗栈溢出攻击的技术  SSP安全机制

Canary 的值 栈上的一个随机数

在程序启动时 随机生成并且保存在比返回地址更低值

栈溢出是从低地址向高地址进行溢出

如果攻击者要攻击 就一定要覆盖到canary

然后在函数返回前 进行检查

就可以发现有没有栈溢出漏洞

简介

canaries可以分为3类

terminator random random XOR

具体实现是

terminator canaries: 
栈溢出许多都是由于字符串操作不正当 (strcpy)所产生的
字符串的结尾一般都是NULL  \X00 结尾 换个角度就是容易被 00截断
这里就是把低位设置为 \x00 既可以防止被泄露 又可以防止被伪造
截断字符还包括 CR(0X0d) LF(0x0a) EOF(0xff)
Random canaries:
防止canaries 被攻击者猜到 random canaries 通常在程序初始化的时候
生成随机数 并且保存在相对安全的位置 
当然 如果攻击者知道他的位置 还是有可能被读取
随机数通常由/dev/urandom 生成 有时候也是使用当前时间的哈希

Random XOR canaries:
和random canaries 类似 但是多了一个XOR操作
这样无论是canaries被篡改 还是 XOR的控制数据被篡改

都会报错 加深了攻击难度

我们进行简单的例子

64

#name canary.c
#include<stdio.h>
void main(){
    char buf[10];
    scanf("%s",buf);
}
gcc -fno-stack-protector canary.c -o fno.out

警用了保护

出现了报错 我们看看开启保护

gcc -fstack-protector canary.c -o f.out

发现检测到了栈溢出

我们看看开启保护的反汇编

 

在其中的
1175:	64 48 8b 04 25 28 00 	mov    rax,QWORD PTR fs:0x28
我们可以发现调用了fs寄存器


在linux中 fs寄存器是用来存放线程局部存储 TLS的

主要就是为了避免多个线程同时访问一个全局变量 或者静态变量 从而冲突

尤其是多个变量如果都要同时修改这个变量

TSL为每一个使用该全局变量的线程都提供了一个全局变量的副本
就好像每一个线程都拥有了这个全局变量

从全局变量的角度看 就是克隆了许多备份
每一个备份都可以被一个线程独立使用

在glibc的实现里
TSL的结构体 tcbhead_t是下面的   而偏移量 0X28就是stack_guard
typedef struct{
    void *tcb;
    dtv_t *dtv;
    void *self;
    int multiple_threads;
    int gscope_flag; 
    uintptr_t sysinfo;
    uintptr_t stack_guard;
    uintptr_t pointer_guard;
.....
}tcbhead_t;



uintptr_t stack_guard; 这里我们可以发现取出了canary

从TLS取出canary后 把他存入 rbp-0x8的位置保存

在函数返回前 又程序取出 并且和TLS中的canary进行异或比较 我这里是进行减法

然后进行比较 发现如果不相同 就说明是栈溢出 然后就跳转到 _stack_chk_file的函数中 

终止程序并且抛出错误 否则正常退出

 这里是64位的程序

如果是32位呢

32

我们发现是用gs寄存器 并且是在偏移 0x14的地方

checksec

使用checksec脚本对canary的检测也是根据 _stack_chk_fail(_intel_security_cookie)

来进行判断

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/528024.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电动力学专题:圆柱形导体中趋肤效应

电动力学分析 金属导体内的电流密度方程 由Maxwell方程组导出Helmhltz方程 对于良导体,有\sigma/(\omega \eprsilon),因此有 圆柱形导线中电流密度分布 设电流沿Z轴方向流动,均匀导体,可简化为 通解&#xff1a; 安培环路定理 定态电磁波的Maxwell方程组 贝塞尔函数性质&…

【SQL】作为前端,应该了解的SQL知识(第三弹)

&#x1f4d1;视图 使用表时&#xff0c;会将数据保存在存储设备&#xff08;硬盘上&#xff09; 而使用视图时&#xff0c;并不会将数据保存在存储设备上&#xff0c;也不会将数据保存在任何地方。 视图里面保存的是 从表中取出数据所使用的SELECT语句&#xff08;视图中的…

zhangrelay博客置顶三篇点击量分析

230515只有三篇置顶&#xff0c;如下&#xff1a; 分别为&#xff1a; 20.03.13 &#xff1a; 901522.01.12 &#xff1a;1372923.04.15 &#xff1a;18836 熟悉zhangrelay博客风格的AI都清楚&#xff0c;他的博客内容都是筛选和设计过的。 置顶三篇阅读量差值为&#xff1…

C++--AVL树的插入,详解四种旋转规则(结尾附源代码链接)

AVL树的插入 前言左单旋右单旋左右双旋右左双旋检查是否这颗树是否是AVL树 前言 AVL树可以说是对二叉搜索树的优化&#xff0c;我们来看二叉树搜索树的下一面一种特殊情况&#xff1a; 当我们插入的数是上面的情况时&#xff0c;二叉树搜索树的特点就形同虚设了&#xff0c;这…

ChatGpt 2步制作流程图与思维导图,你确定不来看一下吗?

什么&#xff1f;你还不会使用ChatGpt。推荐下面这篇文章 ChatGPT保姆级教程&#xff0c;一分钟学会使用ChatGPT&#xff01; - 掘金 (juejin.cn) 如果没有谷歌账号推荐直接买一个&#xff0c;因为你在中国注册谷歌账号&#xff0c;被谷歌查到&#xff0c;也是使用不了ChatGp…

企业数字化转型过程中面临最大的挑战和问题是什么?

无论组织规模如何&#xff0c;业务的敏捷性、弹性以及生产力的高低都是决定其发展运营成功与否的关键因素。而一个良好的数字化转型战略则是企业发展进步的有力助推器。 麦肯锡称&#xff0c;借助数字化转型&#xff0c;可以实现 20% 至 50% 的经济收益和 20% 至 30% 的客户满…

【Spring Cloud Alibaba】Nacos的安装与介绍以及Nacos集群的安装

欢迎来到 Nacos 的世界&#xff01; Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称&#xff0c;一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性…

shell构建基本脚本

构建基本脚本 使用多个命令 一次使用多个命令&#xff0c;把它们放在一行&#xff0c;使用’;隔开 [rootmyserver ~]# date ; who; ls Sun May 14 23:39:34 CST 2023 root pts/0 2023-05-14 23:31 (192.168.10.1) anaconda-ks.cfg initial-setup-ks.cfg创建shel…

JavaScript学习-DOM事件进阶

事件流 事件流和两个阶段说明 事件流指的是事件完整执行过程中的流动路径 说明:假设页面里有个div&#xff0c;当触发事件时&#xff0c;会经历两个阶段&#xff0c;分别是捕获阶段、冒泡阶段 简单来说:捕获阶段是 从父到子 冒泡阶段是从子到父 或者说从大的往下的是捕获&am…

阿里云服务器如何安装宝塔面板?

使用阿里云服务器安装宝塔面板教程&#xff0c;阿里云服务器网以CentOS操作系统为例&#xff0c;安装宝塔Linux面板&#xff0c;先远程连接到云服务器&#xff0c;然后执行宝塔面板安装命令&#xff0c;系统会自动安装宝塔面板&#xff0c;安装完成后会返回面板地址、账号和密码…

前端有必要掌握TypeScript吗,答案十分肯定

本文首发自「慕课网」&#xff08;www.imooc.com&#xff09;&#xff0c;想了解更多IT干货内容&#xff0c;程序员圈内热闻&#xff0c;欢迎关注"慕课网"或慕课网公众号&#xff01; 作者&#xff1a;一飞同学 | 慕课网讲师 近几年&#xff0c;前端技术发展越来越迅…

亚马逊云科技助力医疗与生命科学行业,提供高性能计算(HPC)

2023年4月27日&#xff0c;亚马逊云科技医疗与生命科学行业峰会召开。会议上&#xff0c;亚马逊云科技大中华区战略业务发展部总经理顾凡表示&#xff1a;“亚马逊云科技不仅提供覆盖全球的云基础设施以及超过200大类的云服务&#xff0c;更重要的是&#xff0c;我们深刻了解行…

Agisoft Metashape 卫星图像处理

Agisoft Metashape 利用卫星图像创建三维模型 文章目录 Agisoft Metashape 利用卫星图像创建三维模型前言一、添加图像二、对齐图像三、构建 DEM四、生成平铺模型前言 Agisoft Metashape Professional 支持处理带RPC参数的立体卫星图像。支持的卫星数据有:Beijing-3A, Ikonos…

Flash钓鱼->CS上线(免杀过火绒、360等)

先看结果 访问钓鱼页面: 点击立即升级即把马儿下载下来了 这个马儿是rar压缩的&#xff0c;做成的rar解压自启动&#xff0c;所以是个exe的文件&#xff0c;然后这里为了像一点&#xff0c;把图标给改了 双击运行&#xff0c;查看效果&#xff1a; 首先CS是没东西的 解压路…

UNITY3D 5V5网游开发案例教程

文章连载更新中&#xff0c;可以提前领取素材进行预习&#xff0c;自学 素材领取&#xff1a;私信发送 领取RPG网络开发教材 这里写目录标题 游戏玩法这门课适合哪些人学习学完了能达到什么效果项目准备基础系统战斗系统同步设计精讲社交系统副本系统优化项目准备正文美术准备&…

服务(第二十三篇)mysql-mha

1、什么是 MHA MHA&#xff08;Master High Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的过程中最大…

UnityWebSocket | 双端通信支持Text/Binary

跳转官方仓库地址 有多个项目使用该库&#xff0c;平台有PC、WebGL。 一、说明 1&#xff09;原理 WebSocket是H5提供的一种浏览器与服务器进行全双工通讯的网络技术&#xff0c;属于应用层协议。数据通常在两个站&#xff08;点对点&#xff09;之间进行传输&#xff0c;按照…

动态规划:01背包理论基础 二维dp

1.确定dp数组以及下标的含义 对于背包问题&#xff0c;有一种写法&#xff0c; 是使用二维数组&#xff0c;即dp[i][j] 表示从下标为[0-i]的物品里任意取&#xff0c;放进容量为j的背包&#xff0c;价值总和最大是多少。[0-i]物品任取放到容量为j的背包中得到的最大价值为dp[i…

想要上手playwright?看这篇文章就够了!(文章有点长,建议收藏)

本文系统地介绍了playwright的基础概念&#xff0c;架构&#xff0c;安装过程&#xff0c;编码demo&#xff08;python实例&#xff09;&#xff0c;常用API&#xff0c;录制脚本的方法以及playwright在无头模式的应用和其与selenium的对比。相信大家认真阅读本文后一定会对pla…

2023年5月广州/西安/成都/深圳产品经理认证NPDP报名

产品经理国际资格认证NPDP是新产品开发方面的认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会&#xff08;PDMA&#xff09;成立于1979年&#xff0c;是…