堆栈溢出的攻击 -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() 被调用,

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Boom 3D软件下载及安装教程

简介&#xff1a; Boom 3D是适用于Mac和Windows系统的专业音效增强软件&#xff0c;旨在通过播放器&#xff0c;媒体或流媒体服务等介质&#xff0c;在不同类型的耳机上以3D环绕效果播放媒体内容。您无需使用昂贵的耳机或其他附加环绕音效增强器即可感受3D环绕音乐。 安 装 包…

【Python推导式秘籍】:一行代码的艺术,高效数据处理之道

文章目录 &#x1f68b;Python推导式&#x1f680;一、列表推导式&#x1f308;1. 了解推导式❤️2. 实践&#x1f4a5;3. 总结 &#x1f680;二、字典推导式&#x1f308;1. 了解字典推导式❤️2. 实践&#x1f4a5;3. 总结 &#x1f680;三、集合推导式&#x1f308;1. 了解集…

liunx常见指令

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 二、安装环境 1.租借服务器 2.下载安装 XShell 3.使用xshll登录服务器 三、Linux基础命令 一、文件和命令 ​编辑1、cd 命令 2、pwd 命令 3、ls 命令 4、cp 命令 …

人工智能GPU互联技术分析,芯片巨头UALink向英伟达NVLink开战

芯片巨头组团&#xff0c;向英伟达NVLink开战 八大科技巨头——AMD、博通、思科、Google、惠普企业、英特尔、Meta及微软——联合推出UALink&#xff08;Ultra Accelerator Link&#xff09;技术&#xff0c;为人工智能数据中心网络设定全新互联标准。此举旨在打破Nvidia的市场…

响应式德米拉数字内容交易系统素材下载站模板

★模板说明★ 该数字交易系统设计非常完美&#xff0c;两种响应式模式&#xff0c;可打开边栏模式和盒子模式&#xff1b;八种网站颜色&#xff0c;四种风格颜色可供用户自行选择&#xff0c;还可在网站选背景图片&#xff1b;完美的分成系统、充值功能、个人中心等等都以html…

企业网站建设方案

企业网站建设方案是企业推广和宣传的重要工具&#xff0c;可以帮助企业树立良好的形象&#xff0c;吸引更多的客户和合作伙伴。一个好的企业网站应该具备用户友好的界面设计、快速的加载速度、完善的信息分类和搜索功能、优质的内容和多样化的互动体验。下面将从以下几个方面介…

基于51单片机太阳能热水器设计

基于51单片机太阳能热水器 &#xff08;仿真&#xff0b;程序&#xff09; 功能介绍 具体功能&#xff1a; 1.LCD1602显示屏第一行显示温度&#xff0c;第二行显示温度下限&#xff1b; 2.按键可以设置温度的下限&#xff0c;控制出水&#xff1b; 3.当温度低于设置下限值…

大数据实训项目(小麦种子)-03、大数据环境Hadoop、Mapreduce、Hive、Hbase、HDFS搭建服务及调试

文章目录 前言一、Linux系统Centos7安装配置JDK8二、Linxu系统Centos7中搭建Hadoop3.1.0服务下载地址服务1&#xff1a;详细步骤&#xff08;初始化与启动dfs服务&#xff09;详细步骤配置环境变量 服务2&#xff1a;Hadoop(YARN)环境搭建 三、Linux系统搭建Hive3.1.2服务前提条…

大数据实训项目(小麦种子)-04、大数据实训项目JavaWeb环境搭建

文章目录 前言运行前准备工作1、安装Hadoop3.1.0配置winutils原因描述配置方式注意点&#xff08;hadoop.dll拷贝System32目录下&#xff09; 2、hive运行报错&#xff08;The dir: /tmp/hive on HDFS should be writable. &#xff09; 项目环境搭建参考资料 前言 博主介绍&a…

windows 共享给linux 的使用方法

windows 作为服务器&#xff0c;linux作为客户端进行文件共享&#xff0c;有3种方法&#xff1a;samba nfs&#xff08;网络硬盘&#xff09;虚拟机共享&#xff08;VirtualBox vboxsf&#xff09;。 Samba 共享&#xff1a; 打开【控制面板】-->【启动或关闭windows功能】…

STM32定时器篇——Systick定时器的使用(实现delay延时函数)

一、Systick定时器的简介&#xff1a; Systick定时器就是系统滴答定时器&#xff0c;一个24 位的倒计数定时器对于CM3,CM4内核芯片&#xff0c;都有Systick定时器。当Systick计到0时&#xff0c;将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中…

LIMS(实验室)信息管理系统源码:系统构架组成与功能实现

LIMS&#xff08;实验室&#xff09;信息管理系统源码&#xff1a;系统构架组成与功能实现 采用先进的计算机网络技术、数据库技术和标准化的实验室管理思想&#xff0c;组成一个全面、规范的管理体系&#xff0c;为实现分析数据网上调度、分析数据自动采集、快速分布、信息共…

海外仓标签管理策略:海外仓系统标签管理设置方法与注意事项

通常来说&#xff0c;一个海外仓每天都会有成千上万的货物进出。只有应用了合适的标签管理策略&#xff0c;才能让这些货物有序&#xff0c;高效的流转。 你就可以随时掌握货物的位置和移动情况&#xff0c;更好的了解库存信息。标签的应用也有利于合理的规划仓库空间&#xf…

甘肃这款饼子很火 你是否有吃过呢

白吉饼那独特的外形&#xff0c;圆圆的十分可爱。&#x1f44f;它的表皮酥脆&#xff0c;内里绵软&#xff0c;麦香四溢。&#x1f60b;拿在手里沉甸甸的&#xff0c;就知道用料十足。 无论是直接吃&#xff0c;感受那纯粹的面香&#xff0c;还是夹上腊汁肉&#xff0c;变成美味…

JUC并发编程-第二天:线程池相关

线程池相关 线程池内置线程池的使用线程池的关闭excute方法和submit方法的区别 线程池 线程池就是一个可以复用线程的技术 public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,Thread…

数据分析必备:一步步教你如何用matplotlib做数据可视化(2)

1、Matplotlib Anaconda Anaconda是Python和R编程语言的免费开源发行版&#xff0c;用于大规模数据处理&#xff0c;预测分析和科学计算。 该分发使包管理和部署变得简单容易。 Matplotlib和许多其他有用的(数据)科学工具构成了分发的一部分。 包版本由包管理系统Conda管理。 …

!力扣46. 全排列

给定一个不含重复数字的数组 nums &#xff0c;返回其所有可能的全排列 。你可以按任意顺序返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示例 2&#xff1a; 输入&#xff1a;nu…

AI产品经理竞争越来越激烈,如何更快入行抢占红利得高薪?

前言 如果你是关注行业趋势的产品经理&#xff0c;那你一定不难察觉&#xff1a; 随着算法算力数据条件的成熟、国家政策的大力支持&#xff0c;当前人工智能赛道的竞争越来越激烈。 与此同时&#xff0c;AI人才的抢夺战也越发火热&#xff1a; 不少传统互联网产品经理都在探…

基于mybatis plus增加较复杂自定义查询以及分页

基于java技术&#xff0c;spring-boot和mybatis-plus搭建后台框架是现在非常流行的技术。 其中关于多表关联查询的实现相对比较复杂&#xff0c;在这里进行记录以供开发人员参考。 以一个系统中实际的实体类为查询为例&#xff0c; T3dMaterial实体其中的fileType属性及字段…

web错题(1)

action属性是form标签的必须属性&#xff0c;用于指定表单提交时表单数据将被发往哪里 dir能够指定文本显示方向的属性 可以产生下拉列表的标记时<select> multiple属性设为true&#xff0c;表示输入字段可以选择多个值 lable标签的for属性可以把lable绑定到另一个元…