【漏洞复现】软件漏洞——栈溢出漏洞复现及其原理详解 一文解明什么是栈溢出漏洞

news2024/11/16 19:25:55

软件漏洞

    • 造成软件漏洞原因:
    • 如何预防?
    • 软件漏洞常见名词
  • ```栈溢出漏洞```
    • 复现前准备

造成软件漏洞原因:

本质原因是因为人类目前还没办法在原点上区分数据与代码,说白了就是目前人们还没理解编写安全代码的真正方法。

如何预防?

通过修改自身代码、公共库函数的安全性降低漏洞出现频率,并且通过操作系统干预,使得漏洞攻击变得难以实现。

软件漏洞常见名词

vulnerability:漏洞、计算机安全隐患。Exploit[ik 'splbrt] :漏洞利用。
Shellcode:壳代码
Payload:有效荷载,payload是 shellcode 的一部分, shellcode_的执行往往就是为了给 payload代码开辟道路,说白了就是真正干坏事的代码。

栈溢出漏洞

复现前准备

栈溢出漏洞是一个很经典且非常危险的漏洞,我们来写一个简单的代码复现并了解一下它的原理。
在我们项目属性中将选项设置如下。使用Release版本x86进行调试。

在这里插入图片描述
在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS
#include<Windows.h>
#include<iostream>

int checkPassword(const char* password)
{
	int result = 1;
	char buff[7]{};
	result = strcmp(password, "51hook");
	strcpy(buff, password);
	return result;
}

int main()
{
	int flag = 0;
	char password[0x500];
	while (1)
	{
		printf("请输入密码\n");
		int result = scanf("%s", password);
		flag = checkPassword(password);
		if (flag)
		{
			MessageBoxA(0, "密码错误!", "提示", MB_OK);
		}
		else
		{
			MessageBoxA(0, "密码正确!", "提示", MB_OK);
			break;
		}
	}
	return 0;
}

可以看到我们正常执行输入错误密码会弹窗错误,接下来我们要通过栈溢出漏洞来绕过密码检测,让他提示正确。
在这里插入图片描述

我们拿出release版的32位exe文件进行调试。
找到我们的main函数位置
在这里插入图片描述
我们在过程中会调用scanf函数,来输入wwwwww
在这里插入图片描述
步进到我们的checkpassword时停止,我们进入函数查看。

前面先提升堆栈并初始化栈空间

在这里插入图片描述
然后把输入的和要检测的都压入堆栈。

在这里插入图片描述
到目前为止一切正常
在这里插入图片描述
当我们执行完strcpy函数时我们就能够发现在值钱开辟的堆栈空间中,***我们之前输入的字符串放进去了,放到了我们的buff缓冲区中,***但是这个时候问题就出现了,我们之前定义缓冲区大小为0x500而我们在checkPassword函数中定义时buff缓冲区大小只有7.我们验证的密码51hook加上\0正好为7,但是传进来的password大小要远比这个缓冲区大小要大,我们这时只输入了6个w,也就是并没有超出缓冲区的界限,可以看到我们的buff缓冲区也成功存储了wwwwww,我们再往下看。

在这里插入图片描述

在这里插入图片描述
下一条指令我们将mov eax,[ebp-4]ebp-4存的是什么?从正向代码我们可以知道这是我们的result局部变量,通过将其置1 来判断我们输入的密码输入正确还是错误,通过上面分析我们可以得知password大小远超出buff缓冲区大小,而从上图我们可以得知这 关键的返回值result=0x00000001中重要的01紧紧挨着我们的buff缓冲区,那我们是不是可以通过控制这个关键的01给他改为00,让result=0x00000000从而绕过密码的检测直接达成密码正确的目的呢?我们来试一下

在这里插入图片描述
重新运行我们的exe文件,这回我们在输入时,输入wwwwwwww八个w,因为上文我们知道buff缓冲区大小只有7个,因为对齐才成为8个,在我们输入完后字符串他会看到\0才会停止,我们输入8个w,所以他在原本01的位置就会自动补为0,而我们要修改01为00,的目的也就达到了。

在这里插入图片描述
我们可以看到以前的01部分已经被我们的输入覆盖掉了成了00,让我们把他执行完。01
可以确实的看到虽然我们并没有输入正确的密码,我们也绕过了验证,达到了我们想要的效果,这就是栈溢出漏洞。
在这里插入图片描述

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

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

相关文章

springboot 定时任务基础模板

springboot 如何开启定时任务 基础版本 一、在启动类上面加上 EnableScheduling 即可开启定时 SpringBootApplication EnableAsync EnableScheduling public class ScheduleApplication {public static void main(String[] args) {SpringApplication.run(ScheduleApplicatio…

ios xcode Architectures

各个Architecture参数的含义 Architectures 当前设备环境下支持的指令架构。真机环境下是armV7、arm64。模拟器环境下是X86_64、i386、arm64&#xff08;m1设备&#xff09;。 Build Active Architecture Only 是否只编译当前设备的指令架构。值是YES或者NO。一般Debug环境…

什么是数据管理?看完这篇你一定有收获

如今的大数据成为一切生产经营活动的主要驱动因素。由于每天都会产生大量数据&#xff0c;因此我们需要有更好的数据管理解决方案是理所当然的。任何想要在今天取得成功的企业或企业都需要了解数据管理的内容、原因和方式。 大数据&#xff0c;就其本质而言&#xff0c;需要一…

SI/PI仿真概述:有源高速信号、阻抗、滤波方案分析

SI/PI仿真概述 Signal Integrity与Power integrity是当今高速电子产品系统及PCB设计必须保证的两大因素&#xff0c;SI/PI直接决定系统信号、电源质量从而影响数据的正确传输与系统误码率。如何在设计方案阶段评估及模拟SI/PI&#xff0c;就需要借助专业EDA工具进行仿真分析。…

Vue3基础语法(三)

文章目录认识计算属性案例methods vs computedsetter getterwatch侦听器的基本配置其他方式综合案例认识计算属性 案例 插值语法实现&#xff1a; 以上代码不好维护&#xff0c;多次使用会出现重复代码 methods实现&#xff1a; computed实现案例 methods vs computed sett…

【深度思考】如何优雅的校验参数?

在日常的开发工作中&#xff0c;为了保证落库数据的完整性&#xff0c;参数校验绝对是必不可少的一部分&#xff0c;本篇文章就来讲解下在项目中该如何优雅的校验参数。 假设有一个新增学员的接口&#xff0c;一般第一步我们都会先校验学员信息是否正确&#xff0c;然后才会落…

为什么硬盘在macbook上无法编辑?mac不能往移动硬盘拷东西

为什么硬盘在macbook上无法编辑&#xff1f;如果您只想在Mac上查看NTFS文件&#xff0c;只需将NTFS 外置存储设备连接到mac电脑并查看文件。但要编辑或传输文件&#xff0c;则需要NTFS工具。 NTFS文件格式与Mac不兼容&#xff0c;但许多用户仍然喜欢使用NTFS文件&#xff0c;而…

Xshell及Xftp安装配置实现对Linux的远程登录

为什么要远程登录&#xff1f; Linux服务器是小组共享的 正式上线的项目是运行在公网上的 具体的结构图如下图所示&#xff1a; 准备工作 注意&#xff0c;商业用途的Xshell和Xftp是需要收费的&#xff0c;因此&#xff0c;我们下载免费的个人版本即可。 登录官网&#x…

:沉寂6个月,高薪不再是梦,这一次,我赢了......

前言 六个月对于人的一生来说是极其短暂的&#xff0c;有的人迷迷糊糊、浑浑噩噩的就过去了&#xff0c;有的人让其虚度在游戏中&#xff0c;有的人在不喜欢的岗位上日复一日。 但&#xff0c;总有一部分人会选择用来提升自己、或是探索未知领域掌握新的技能&#xff0c;而我…

Promise难懂?一篇文章让你轻松驾驭

前言 前端js学习中&#xff0c;让大家最难受的就是异步的问题&#xff0c;解决异步、回调地狱等问题时你必须得学会promise&#xff0c;对于多数前端程序员来说promise简直就是噩梦&#xff0c;本篇文章就是从通俗易懂的角度做为切入点&#xff0c;帮助大家轻松掌握promise 异步…

如何使用报表工具FastReport VCL 设计器中的 PDF/A?

Fastreport是目前世界上主流的图表控件&#xff0c;具有超高性价比&#xff0c;以更具成本优势的价格&#xff0c;便能提供功能齐全的报表解决方案&#xff0c;连续三年蝉联全球文档创建组件和库的“ Top 50 Publishers”奖。 慧都科技是Fast Reports在中国区十余年的友好合作…

0基础学python容易吗?零基础学习路线目标

零基础Python学习路线及阶段学习目标&#xff0c;首先应该夯实Python核心基础、Web前端编程、Django开发框架、Flask开发框架、爬虫与数据分析等知识&#xff0c;理解机器学习相关的基本概念及系统处理流程。 零基础Python学习路线及阶段学习目标&#xff1a; 阶段一、Python核…

【React学习】React更新渲染原理

当我们调用 setState 之后发生了什么&#xff1f;react经历了怎样的过程将新的 state 渲染到页面上&#xff1f; 一次react更新&#xff0c;核心就是对虚拟dom进行diff&#xff0c;找出最少的需要变化的dom节点&#xff0c;然后对其进行相应的dom操作&#xff0c;用户即可在页…

亲子游小程序开发,助力商家掌握亲子流量

随着新生代父母越来越年轻化&#xff0c;育儿观念上也发生了很大改变&#xff0c;当代父母已经不在单纯的关注孩子的学习情况&#xff0c;学习固然重要但是孩子的身心健康也是非常重要的。所以很多父母开始带着自己的孩子参加各种各样的亲子活动&#xff0c;多参加亲子活动可以…

Python数据分析之Pandas库

Python数据分析之Pandas库一、Pandas简介二、Pandas库的安装三、Pandas的数据结构四、Series 和 DataFrame 数据结构的使用五、其他可以参考的网站一、Pandas简介 Pandas是python的一个数据分析包&#xff0c;最初由AQR Capital Management于2008年4月开发&#xff0c;并于200…

Struts2框架中的Action接口和ActionSupport类

Struts2框架中的Action接口和ActionSupport类1、Action接口2、ActionSupport类3、登录案例3.1、页面3.2、控制器3.3、struts.xml配置3.4、测试1、Action接口 Action是Struts2框架的核心&#xff0c;因为它们适用于任何MVC&#xff08;Model View Controller&#xff09;框架。…

【Maven基础】单一架构案例(二)

第三节 搭建环境&#xff1a;事务控制 1、总体思路 2、TransactionFilter 2.1、创建 Filter 类 2.2、TransactionFilter 完整代码 public class TransactionFilter implements Filter {// 声明集合保存静态资源扩展名private static Set<String> staticResourceExtNam…

长时间序列遥感数据处理及在全球变化、物候提取、植被变绿与固碳分析、生物量估算与趋势分析等领域中的实践技术应用

【查看原文】长时间序列遥感数据处理及在全球变化、物候提取、植被变绿与固碳分析、生物量估算与趋势分析等领域中的实践技术应用 植被是陆地生态系统中最重要的组分之一&#xff0c;也是对气候变化最敏感的组分&#xff0c;其在全球变化过程中起着重要作用&#xff0c;能够指…

云知声: 基于 JuiceFS 的超算平台存储实践

云知声从一家专注于语音及语言处理的技术公司&#xff0c;现在技术栈已经发展到具备图像、自然语言处理、信号等全栈式的 AI 能力&#xff0c;是国内头部人工智能独角兽企业。公司拥抱云计算&#xff0c;在智慧医疗、智慧酒店、智慧教育等方面都有相应的解决方案。 Atlas 是云知…

技术栈入门------RabbitMQ

Direct交换机是路由键精准匹配 Fanout交换机是不看路由键 &#xff0c;只要你消息发给了某个交换机&#xff0c;这个交换机就立马把消息转给绑定了这个交换机的所有队列&#xff0c;所以速度最快 Topic交换机可以把一个消息根据交换机和消息队列的绑定的路由键进行匹配&#xf…