指针与数组--常见的错误(2)[缓冲区溢出攻击]

news/2024/11/7 18:14:34/

        网络黑客常常针对系统和程序自身存在的漏洞,编写相应的攻击程序。其中最常见的就是对缓冲区溢出漏洞的攻击,几乎占到了网络攻击次数的一半以上。而在诸多缓冲区溢出中又以堆栈溢出的问题最具有代表性。

        世界上第一个缓冲区溢出攻击——Internet蠕虫,曾造成全球多台网络服务器瘫痪。缓冲区溢出漏洞被攻击的现象以越来越普遍,各种操作系统上出现的此类漏洞数不胜数。

        对缓冲区溢出漏洞进行攻击的后果包括程序运行失败、系统崩溃和重新启动等。更为严重的是,可利用缓冲区溢出执行非授权命令,甚至取得系统特权,进而进行各种非法操作。于是如何防止和检测利用缓冲区溢出漏洞进行得攻击,成为防御网络入侵和入侵检测得重点之一。

        简而言之,缓冲区溢出通常是因gets()、scanf()、strcpy()等函数未对数组越界加以监视和限制,导致有用得堆栈数据被覆盖而引起的。因此,这些函数常称为黑客的攻击对象。

例题1:请分析下面这段程序存在的漏洞。

#include <stdio.h>
#include <string.h>
#define N 10
int main(void)
{char str[N];gets(str);puts(str);return 0;
}

        此程序看似简单,但却存在者“缓冲区溢出”的隐患。原因就出在函数gets()上面,它不能限制用户输入字符串的长度,当用户输入的字符串长度超过N时就会发生缓冲区溢出。

        为防止发生缓冲区溢出,应将程序第7行语句修改为能够限制输入字符串长度的函数。

        fgets(str,N*sizeof(char),stdin);

例题2:请分析下面这段程序存在的漏洞。

#include <stdio.h>
#include <string.h>
#define N 1024
int main(int argc,char *argv[])
{char buffer[N];if(argc>1){strcpy(buffer,argv[1]);}return 0;
}

        当被压入栈的数据大于1024,超出1024个字节的内容就会依次覆盖堆栈中保存的寄存器、函数调用的返回地址。 

执行函数调用时,操作系统一般要完成如下几个工作:

(1)将函数参数argc和argv压入堆栈;

(2)在堆栈中,保存函数调用的返回地址(即函数调用结束后要执行的语句的地址);

(3)在堆栈中,保存一些其他内容(如有用的系统寄存器等);

(4)在堆栈中,为函数的局部变量分配存储空间;

(5)执行函数代码。


http://www.ppmy.cn/news/588418.html

相关文章

抖音seo矩阵系统源码开发部署思路

抖音SEO矩阵系统源码开发和部署是一项复杂而又关键的任务。在开发阶段&#xff0c;我们需要根据抖音的搜索规则和算法&#xff0c;结合用户搜索意图和关键词&#xff0c;进行深入的研究和分析&#xff0c;以建立一个优秀的SEO矩阵系统。 在部署方面&#xff0c;我们需要遵循以…

【YOLO系列】YOLOX(含代码解析)

文章目录 环境配置demo测试转换成onnx YOLOX数据增广decoupled headAnchor-free标签分配get_geometry_constraintSimOTA 总结参考 【YOLO系列】YOLO v3&#xff08;网络结构图代码&#xff09; 【YOLO 系列】YOLO v4-v5先验知识 【YOLO系列】YOLO v4&#xff08;网络结构图代码…

Directory Opus打不开除了zip的压缩包(打开错误)

Directory Opus只内置了Opus zip针对.zip后缀的文件来处理。 其它格式的压缩包需要通过其它压缩包软件来完成。 调整如下&#xff1a; 在电脑上可选择7z、WINRAR来安装。 参考文章 https://www.cnblogs.com/moonache/p/4871148.html

怎么用管理员方式打开压缩包

今天下载了安卓的源代码&#xff0c;解压时&#xff0c;报了"Cannot create symbolic link xxx" "You may need to run WinRAR as administrator"的问题。 该如何以管理员方式打开呢&#xff0c; 1、右键菜单中并没有"管理员打开"菜单&#xff…

rar压缩包的打开密码破解

压缩包密码设置了打开密码&#xff0c;解压压缩包的时候必须输入密码才能继续解压文件&#xff0c;忘记了密码或者不知道该如何解决问题呢&#xff1f; 想要破解压缩包打开密码&#xff0c;可以通过破解软件进行密码破解 可以破解rar、zip、7z格式压缩包的打开密码&#xff0…

ZipOutputStream 生成压缩文件,用winrar打开后报”不可预料的压缩文件末端”错误

问题产生的原因&#xff1a;可能是用到文件流未正确关闭 解决办法是&#xff1a;1.检查待压缩文件的流是否都正常关闭&#xff0c;且按顺序 2.生成压缩文件的过程中用到的流是否正常关闭&#xff0c;且按顺序 try {File zipFile new File(fileName);fileName zipFile.getNa…

压缩包打开密码解决办法

rar、zip、7z格式的压缩包有打开密码&#xff0c;如果不知道打开密码&#xff0c;我们可以通过 破解软件尝试破解打开密码。 打开软件把压缩包添加到软件中&#xff0c;选择一个找回方法&#xff0c;点击【下一步】跟着软件提示进行操作就可以开始破解密码了。 组合破解、掩码…

SpringBoot下载文件打不开的解决办法

吸取教训主要是是下载文件打不开&#xff0c;是因为当前页面输入流不能直接连接打开。需要新的连接进行打开点击下载。 http://localhost:8081/tm/corpus/infomation/downloadInfoTemplate 主要是分俩步骤进行&#xff0c;一是生产连接&#xff0c;然后弹出框然后进行下载就可以…