堆栈溢出的攻击 -fno-stack-protector stack smash 检测

在程序返回的一条语句堆栈项目处,用新函数的起始地址覆盖,将会跳转到执行新函数。

现在系统对这个行为做了判断,已经无法实施这类攻击或技巧。

1,测试代码

#include <stdio.h>
void cc()
{printf("I am cc( )\n");
}void bb(unsigned long int * x)
{x[7] = (unsigned long int)cc;printf("I am bb(...)\n");
}void aa(int y)
{unsigned long int a[6] = {0,1,2,3,4,5};printf("I am aa(...)\n");bb(a);
}int main()
{int z=100;aa(z);printf("cc = %p\n", cc);return 0;
}

2,运行效果

下图可见,并不是在修改堆栈时terminated,而是在返回时检测到了 stack smashing

3,原理分析

3.1如何防止 stack smash

"stack smashing detected"错误通常是由于缓冲区溢出(buffer overflow)导致的。这种错误会破坏程序的堆栈结构,被系统检测到并终止程序以防止安全漏洞。

要解决这个问题,您可以考虑以下几点:

1. 检查代码中的数组边界:确保在使用数组时不会超出其边界,避免写入超出数组大小的数据。

2. 使用安全的字符串处理函数:避免使用不安全的字符串处理函数(如strcpy、strcat等),改用安全的函数(如strncpy、strncat等)来处理字符串。

3. 使用堆内存分配:考虑使用动态内存分配(如malloc、calloc、realloc等)来避免栈溢出问题。

通过检查代码中的缓冲区操作和内存访问,可以帮助您解决"stack smashing detected"错误。

3.2 系统检测 stack smash 的原理

系统通过一种叫做"Stack Protector"的机制来检测stack smashing。这个机制在编译时会向程序中插入一些额外的代码,用于保护函数的返回地址和栈帧结构不被破坏。

具体来说,Stack Protector会在栈帧中插入一个特殊的"canary value"(金丝雀值),然后在函数返回时检查这个值是否被修改。如果检测到"canary value"被修改,系统就会认为发生了stack smashing,并终止程序的执行。

这种机制可以有效防止缓冲区溢出攻击,提高程序的安全性。

3.3,如何让系统放弃检测 stack smash

要阻止系统进行stack smashing检测,您可以在编译时禁用Stack Protector机制。具体取决于您使用的编译器,以下是一些常见编译器的选项:

- 对于GCC编译器,您可以使用-fno-stack-protector选项来禁用Stack Protector机制。
- 对于Clang编译器,您可以使用-fno-stack-protector选项来禁用Stack Protector机制。
- 对于MSVC编译器,您可以使用/GS-选项来禁用堆栈保护。

通过在编译时使用这些选项,您可以阻止系统进行stack smashing检测。请注意,禁用Stack Protector可能会降低程序的安全性,因此请谨慎使用。

测试放弃检测实验:

编译方式:

$ gcc hello_func_stack.c -fno-stack-protector

由于修改了堆栈中返回后第一条指令的地址,所以函数 cc() 被调用,

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

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

相关文章

设置SSHkeys多服务器免登录配置(ssh config)

一、背景&#xff1a; 多邮箱或者多git账号进行同一台电脑开发的情况。 有时候&#xff0c;开发时可能会面临一个情况&#xff0c;就是通过自己的电脑&#xff0c;可能同时需要开发多个不同地方的项目&#xff0c;或者说&#xff0c;自己建立的项目已经配置好SSH验证免密登录&a…

C# WPF入门学习主线篇(二十三)—— 控件模板(ControlTemplate)和数据模板(DataTemplate)

C# WPF入门学习主线篇&#xff08;二十三&#xff09;—— 控件模板&#xff08;ControlTemplate&#xff09;和数据模板&#xff08;DataTemplate&#xff09; 在WPF开发中&#xff0c;控件模板&#xff08;ControlTemplate&#xff09;和数据模板&#xff08;DataTemplate&am…

基于Python+OpenCV+SVM车牌识别系统(GUI界面)【W3】

简介&#xff1a; 随着交通管理的日益复杂化和智能化需求的增加&#xff0c;车牌识别系统在安防、智慧交通管理等领域中扮演着重要角色。传统的车牌识别系统主要基于图像处理和模式识别技术&#xff0c;随着计算机视觉技术的发展&#xff0c;基于Python、OpenCV和机器学习算法的…

Vue3新特性指南:探索新增指令、内置组件和改进

Vue.js是一款流行的JavaScript框架,用于构建现代Web应用。Vue3是Vue.js的最新版本,引入了许多新特性和改进。本文将介绍Vue3新增的指令、内置组件以及其他值得关注的改进,并提供使用组合式API的用法示例。 一、新增指令 v-is指令: v-is指令用于动态组件,可以根据表达式的值来…

2024年6月-Docker配置镜像代理

步骤1&#xff1a;编辑 daemon.json 文件 vim /etc/docker/daemon.json步骤2&#xff1a;添加配置 将以下内容粘贴到文件中&#xff1a; {"insecure-registries": ["192.168.0.99:8800"],"data-root": "/mnt/docker","registr…

redis 故障处理: 持续更新

redis 内存快满&#xff1a; 突发性&#xff1a; 1.1 当突发的时候&#xff0c;先进行扩容redis 内存&#xff1a; CONFIG SET maxmemory 6G 1.2 通过monter 获取当前redis 请求&#xff0c;发送给开发&#xff0c;让开发进行处理一下缓慢性&#xff1a; 进行扫描一下redis…

文件初阶入门(葵花宝典)

1. 文件的顺序读写 1.1 顺序读写函数的介绍 函数名 功能 适用于 fgetc 字符输入函数 所有输入流 fputc 字符输出函数 所有输出流 fgets 文本行输入函数 所有输入流 fputs 文本行输出函数 所有输出流 f…

小数二分个人见解

小数二分 小数二分题目 小数二分 整数二分 是找边界点&#xff0c;而小数二分找的是 近似值。 整数二分是在一个整型数组当中 查找&#xff0c;而小数二分是在数轴中 查找&#xff0c;都是每次可以排除一半的区间&#xff0c;只不过小数二分中while循环内的结束条件和整数二分…

大模型中的计算精度——FP32, FP16, bfp16之类的都是什么???

大模型中的计算精度——FP32, FP16, bfp16之类的都是什么&#xff1f;&#xff1f;&#xff1f; 这些精度是用来干嘛的&#xff1f;&#xff1f;混合精度 mixed precision training什么是混合精度&#xff1f;怎么转换呢&#xff1f; 为什么大语言模型通常使用FP32精度训练量化…

深入探索Spring Boot的条件装配与条件注解

Spring Boot 的条件装配&#xff08;Conditional装配&#xff09;是一个强大的功能&#xff0c;它允许你根据特定的条件来决定哪些配置类、beans 或组件应该被加载到Spring应用上下文中。这有助于创建更灵活、更模块化的Spring Boot应用程序。 在Spring Boot中&#xff0c;条件…

ECharts 数据的视觉映射

ECharts 数据的视觉映射 ECharts 是一个由百度开源的&#xff0c;基于 JavaScript 的数据可视化库。它提供了丰富的图表类型和灵活的配置选项&#xff0c;使得用户能够轻松地将数据转换为直观的图表。在 ECharts 中&#xff0c;数据的视觉映射是一个核心功能&#xff0c;它允许…

关于element-plus中el-select自定义标签及样式的问题

关于element-plus中el-select自定义标签及样式的问题 我这天天的都遇到各种坑&#xff0c;关于自定义&#xff0c;我直接复制粘贴代码都实现不了&#xff0c;研究了一下午&#xff0c;骂骂咧咧了一下午&#xff0c;服气了。官网代码实现不了&#xff0c;就只能 “ 曲线救国 ”…

前端面经总结、学习【2023秋招】

目录 1、浏览器输入URL发生了什么&#xff1f;2、跨域是什么&#xff1f;如何解决跨域问题&#xff1f;3、cookie 是什么&#xff1f;4、cookie 能做什么&#xff1f; 1、浏览器输入URL发生了什么&#xff1f; URL解析&#xff1a;判断浏览器输入的是搜索内容还是URL&#xff…

昂科烧录器支持Prolific旺玖科技的电力监控芯片PL7413C1FIG

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表&#xff0c;其中Prolific旺玖科技的高度集成的电力监控芯片PL7413C1FIG已经被昂科的通用烧录平台AP8000所支持。 PL7413C1FIG是一款高度集成的电力监控芯片&#xff0c;用于测量电力使用情况的…

Mysql-题目02

下面列出的&#xff08; DBMS &#xff09;是数据库管理系统的简称。 A、DB&#xff08;数据库&#xff09; B、DBA C、DBMS(数据库管理系统&#xff09; D、DBS&#xff08;数据库系统) 以下选项中&#xff0c;&#xff08; 概念模式 &#xff09;面向数据库设计人员&…

MySQL-分组函数

041-分组函数 重点&#xff1a;所有的分组函数都是自动忽略NULL的 分组函数的执行原则&#xff1a;先分组&#xff0c;然后对每一组数据执行分组函数。如果没有分组语句group by的话&#xff0c;整张表的数据自成一组。 分组函数包括五个&#xff1a; max&#xff1a;最大值mi…

私人云盘(自动云同步)

一、项目简介 模仿小米的云服务&#xff0c;实现一个通过TCP实现的私人云盘&#xff0c;因为能力有限&#xff0c;所以只实现自动云同步这一个功能&#xff0c;具体可以分为三个小功能&#xff0c;即保持云端和终端数据一致、实现文件的上传与下载以及手动同步 二、涉及到的知…

编译器支持#pragma:深入解析与探讨

在编程世界中&#xff0c;编译器是不可或缺的工具&#xff0c;它负责将高级语言编写的源代码转换为机器语言&#xff0c;以便计算机能够执行。而在编译器的众多特性中&#xff0c;#pragma预处理指令&#xff08;也称为pragmas&#xff09;占据了重要的位置。本文将对编译器支持…

P4. 微服务: 匹配系统(上)

P4. 微服务: 匹配系统 上 Tips0 概述1 匹配系统流程2 游戏系统流程3 websocket 前后端通信的基础配置3.1 websocket 的需要的配置3.2 websocket 连接的建立3.3 为 websocket 连接添加 jwt 验证 4 实现匹配界面和对战界面的切换5 匹配系统的客户端和 websocket 后端交互部分5.1 …

助力知识博主,实现在家搞副业的FlowUs新策略

助力知识博主&#xff0c;实现在家副业的FlowUs新策略 我们设定了一个雄心勃勃的目标&#xff1a;帮助100位知识博主在FlowUs上实现副业成功。这个目标不仅得到了团队成员的广泛支持&#xff0c;甚至有人认为它过于保守&#xff0c;因为FlowUs的多功能性使其成为自媒体博主收入…