漏洞分析技术实践_数组越界漏洞

1. 基础知识

1.1 数组原理

数组是一段连续的内存存储空间,包含多个类型相同的元素。通过数组名可以在内存中找到对应的数组空间,并且可以通过数组名和索引来访问数组中的元素。

#include <stdio.h>int main(){int a[10];int i=0;printf("a’s address:%p\n", &a);for(i=0; i<10; i++){a[i] = i;printf("a[%d]’s address:%p\n", i, &a[i]);}return 0;
}

程序定义了一个包含10个元素的数组 a,并依次打印出每个数组元素的地址。运行结果显示,各个元素之间的地址相差一个 int 类型数值的大小,即 0x4 个字节。比如,a[4] 的地址与 a[0] 的地址相差 0x10 个字节,即 4*sizeof(int) 的大小。由此确定数组元素寻址的方式为:数组地址+索引*数组元素大小。

1.2 相关 CVE

CVE-2014-0497 漏洞: 是在 Flash 解析 AS3 代码时出现的数组越界漏洞。此漏洞涉及 Ii32 函数的一个参数为数组索引值,该函数会将数组对应位置的值取到变量中,但边界检查存在问题,导致攻击者可以构造特殊的数值绕过边界检查。利用该漏洞,攻击者可以读取内存中其他区域的数据。

CVE-2016-7193 漏洞: 是 Microsoft Office Word 中的一个数组越界漏洞。该漏洞在 Word 解析 RTF 文件格式时会被触发,成功利用后,攻击者可以远程执行代码,从而完全控制受害者的主机。漏洞的根本原因在于某数组实际分配的大小为 0x20,而程序逻辑中对该数组的边界限制为 0x40,导致数组后面的 0x20 数据能够被写入和修改。在攻击者的精心构造下,该漏洞可用于在用户打开特定的 RTF 文件时执行恶意代码。

CVE-2014-0244 漏洞:又称 OpenSSL “心脏出血” 漏洞部分原因是由于数组越界造成的。攻击者通过伪造 length 值,使得程序在合法数据之后越界访问,读取到存储在合法数据后面的信息。

1.3 数组越界检测工具

数组越界的防范方法包括使用 Address Sanitizer,这是一种快速内存错误检测工具,由编译器检测模块和运行时库组成。它可以检测堆区越界、使用后释放(UAF)等内存错误,是 LLVM/Clang 编译器的一部分。编译时通过 -fsanitize=address 参数可以启用 Address Sanitizer。

对于 C 和 C++(尤其是 C)的安全性,主要依赖开发人员控制数组边界。因此,开发人员在编程时需要特别注意数组的边界访问,以防止越界问题。

2. 漏洞原理

C 和 C++ 不对数组进行边界检查,依赖程序员的谨慎和程序的健壮性。数组边界检查本身具有难度,因为数组越界的判定不仅依赖下标的值,还取决于指针的类型;对于指向数组的指针来说,如果程序中没有显式地标明数组长度,还需要验证计算出的地址是否位于数组范围内。此外,数组在程序运行期间可能会进行动态分配,导致长度发生变化。

这些情况使得边界检查将会给程序性能带来极大的负担。因此C和C++中并不能很好的防范数组越界漏洞。数组周边数据的非法读写

3. 漏洞示例

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

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

相关文章

Elasticsearch开源仓库404 7万多star一夜清零

就在昨晚&#xff0c;有开发者惊奇地发现自己的开源项目 star 数竟然超过了最流行的开源全文搜索引擎 Elasticsearch。发生了什么事&#xff1f;Elasticsearch 竟然跌得比股票还凶 —— 超 7 万 star 的 GitHub 仓库竟然只剩下 200 多。 从社交媒体的动态来看&#xff0c;Elast…

汽车免拆诊断案例 | 2010款起亚赛拉图车发动机转速表指针不动

故障现象  一辆2010款起亚赛拉图车&#xff0c;搭载G4ED 发动机&#xff0c;累计行驶里程约为17.2万km。车主反映&#xff0c;车辆行驶正常&#xff0c;但组合仪表上的发动机转速表指针始终不动。 故障诊断  接车后进行路试&#xff0c;车速表、燃油存量表及发动机冷却温度…

硅谷(12)菜单管理

菜单管理模块 11.1 模块初始界面 11.1.1 API&&type API: import request from /utils/request import type { PermisstionResponseData, MenuParams } from ./type //枚举地址 enum API {//获取全部菜单与按钮的标识数据ALLPERMISSTION_URL /admin/acl/permission…

【电商搜索】现代工业级电商搜索技术-亚马逊-经典的Item-to-Item协同推荐算法

【电商搜索】现代工业级电商搜索技术-亚马逊-经典的Item-to-Item协同推荐算法 文章目录 【电商搜索】现代工业级电商搜索技术-亚马逊-经典的Item-to-Item协同推荐算法1. 论文信息2. 算法介绍3. 创新点小结4. 实验效果5. 算法结论6. 代码实现7. 问题及优化方向1. 冷启动问题2. 稀…

computed拦截v-model

一&#xff0c;问题 在父组件和子组件中都使用v-model会打破单项数据流。 二&#xff0c;方法 基于上述问题采用computed拦截v-model <!-- 父组件 --> <template><div><my-component v-model"form"></my-component></div> &l…

Django中分组查询(annotate 和 aggregate 使用)

在 Django 中&#xff0c;aggregate() 和 annotate() 是两个常用的聚合函数。它们都可以用来对一组查询结果进行聚合操作&#xff0c;但它们的作用是有所不同的。 aggregate() 是用于聚合整个查询集的结果&#xff0c;通常用于返回一个值&#xff0c;例如计算查询集中所有结果…

Java - 数组实现大顶堆

题目描述 实现思路 要实现一个堆&#xff0c;我们首先要了解堆的概念。 堆是一种完全二叉树&#xff0c;分为大顶堆和小顶堆。 大顶堆&#xff1a;每个节点的值都大于或等于其子节点的值。 小顶堆&#xff1a;每个节点的值都小于或等于其子节点的值。 完全二叉树&#xff…

简单汇编教程10 数组

目录 实践&#xff1a;相加连续的数 数组是在内存中连续的一串变量。我这样说&#xff0c;可能你已经想到的大致的定义了&#xff1a; NUMBERS DW 34, 45, 56, 67, 75, 89 现在我们就定义了一个Number数组&#xff0c;里面存放的连续的六个数字&#xff1a;34, 45, 56, …

快速上手 Rust——实用示例

Rust 跨平台应用开发第一章&#xff1a;快速上手 Rust——实用示例 1.3 实用示例 在这一节中&#xff0c;我们将通过一系列实用的示例来帮助您更好地理解 Rust 的特性&#xff0c;并展示如何在实际项目中使用这些特性。示例将涵盖文件操作、网络请求、并发编程、命令行工具以…

人工智能与数据安全:Facebook如何应对隐私挑战

在数字时代&#xff0c;数据隐私和安全成为了用户和企业关注的核心问题。作为全球最大的社交媒体平台之一&#xff0c;Facebook面临着日益严峻的隐私挑战。近年来&#xff0c;频繁发生的数据泄露事件和对用户隐私的质疑&#xff0c;使得Facebook在保护用户数据方面倍感压力。为…

2024年ABS分区更新,聚焦管理科学领域新动态

2024学术期刊指南简介 2024年10月30日&#xff0c;英国商学院协会&#xff08;Chartered Association of Business Schools&#xff09;发布了最新的《学术期刊指南&#xff08;Academic Journal Guide&#xff09;》&#xff08;以下简称“《指南》”&#xff09;&#xff0c…

基于用户体验的在线相册管理平台创新设计与实现

基于用户体验的在线相册管理平台创新设计与实现 摘要 随着互联网和智能设备的普及&#xff0c;照片数量剧增&#xff0c;传统相册管理方式难以满足需求&#xff0c;在线相册管理平台应运而生。本文对在线相册管理平台的设计与实现进行了深入研究。首先剖析了平台所采用的 B/S…

解读!中国人工智能大模型技术白皮书!

近期&#xff0c;中国人工智能协会发布了《中国人工智能大模型技术白皮书》&#xff0c;系统梳理了大模型技术演进&#xff0c;深入探讨关键技术要素&#xff0c;并剖析当前挑战及未来展望。我为大家做了简要总结&#xff0c;并附上原文供深入阅读。 目录 第 1 章 大模型技术概…

深度学习笔记之BERT(一)BERT的基本认识

深度学习笔记之BERT——BERT的基本认识 引言回顾&#xff1a;Transformer的策略回顾&#xff1a;Word2vec的策略和局限性 BERT \text{BERT} BERT的基本理念抽象的双向BERT的预训练策略 预训练与微调 引言 从本节开始&#xff0c;将介绍 BERT \text{BERT} BERT系列模型以及其常…

二:Linux学习笔记(第一阶段)-- Linux命令

目录 Linux注意事项&#xff1a; Linux目录 Linux系统基础命令 1. 文件和目录操作 2. 文件查看和编辑 3. 文件权限和所有权 4. 系统信息 5. 网络命令 6. 文件查找 7. 压缩和解压缩 8. 系统管理 Linux注意事项&#xff1a; 严格区分大小写一切皆文件windows下的程序不…

flask websocket服务搭建,flask-sock 和 flask-socketio

flask websocket服务搭建&#xff0c;flask-sock 和 flask-socketio 首先说下socket、socketio 和 websockets 之间的区别 socket是网络上运行的两个程序之间的双向通信链路的一个端点。这是一个非常低级的东西&#xff0c;其他一切都是在 TCP 套接字之上实现的。 WebSocket …

基于 Java 语言双代号网络图自动绘制系统

基于Java语言双代号网络图自动绘制系统研究与实现 一、摘要 网络计划技术已被广泛应用于工业、农业、国防、科学研究等多个领域中的项目计划与管理&#xff0c;以缩短项目周期&#xff0c;提高资源的利用效率。在网络计划技术中&#xff0c;绘制网络图是网络计划技术的基础工…

多模态大模型微调实践!PAI+LLaMA Factory搭建AI导游

一、引言 AI的快速发展推动了各行各业的智能化转型和创新&#xff0c;随之而来的是对AI应用的迫切需求。 如何微调大模型、高效搭建AI应用成为了开发者们广泛关注的技术方向。阿里云人工智能平台PAI&#xff0c;联合开源低代码大模型微调框架LLaMA Factory &#xff0c;共同打…

设计模式-单例模型(单件模式、Singleton)

单例模式是一种创建型设计模式&#xff0c; 让你能够保证一个类只有一个实例&#xff0c; 并提供一个访问该实例的全局节点。 单例模式同时解决了两个问题&#xff0c; 所以违反了单一职责原则&#xff1a; 保证一个类只有一个实例。 为什么会有人想要控制一个类所拥有的实例…

metasploit/modules/auxiliary 有哪些模块,以及具体使用案例

Metasploit框架的auxiliary模块涵盖了许多不同的功能&#xff0c;包括扫描、枚举、信息收集和漏洞探测等。以下是一些常见的auxiliary模块及其使用案例&#xff1a; 1. 端口扫描 auxiliary/scanner/portscan/tcp&#xff1a;TCP端口扫描。 use auxiliary/scanner/portscan/tcp…