缓冲区溢出漏洞分析

news2024/11/24 12:57:36

一、实验目的

熟悉软件安全需求分析方法,掌握软件安全分析技术。

二、实验软硬件要求

1、操作系统:windows 7/8/10等

2、开发环境:VS 6.0(C++)、OllyDbg

三、实验预习

《软件安全技术》教材第3章

四、实验内容(实验步骤、测试数据等)

1. 目标:教材实验3_2、3_3、3_5、3_6。

2. 实验说明:

(1) 实验3_2:栈溢出修改相邻变量;

说明:fun()函数实现了一个基于口令认证的功能:用户输入的口令存放在局部变量str数组中,然后程序将其与预设在局部变量password中的口令进行比较,以得出是否通过认证的判断(此处仅为示例,并非实际采用的方法)。

  1. 当用户输入“ABCDE”时,程序返回OK
  2. 当用户数去“AAAAA”时,程序返回No
  3. 当用户输入“aaaaaaaaaaaaa”时,程序返回OK
  4. 当用户输入“aaaabbbbccccddddeeeefff”时,程序提示错误

(2)实验3_3:栈溢出修改返回地址

说明:将例3-2程序稍作修改,程序输入改为读取密码文件password.txt;如果在password.txt文件中,存入23个字符“aaaabbbbccccddddeeeefff”,程序运行的效果将与从键盘输入一致。

将password.txt文件中最后4个字节改为Attack()函数的入口地址0x0040100F。(得到函数的入口地址方法很多,可以利用OllyDbg工具查看)利用十六进制编辑软件UltraEdit打开password.txt文件,将最后4字节改为相应的地址,程序返回Attack函数结果

  1. 实验3_5:利用格式化串漏洞读取内存数据

  1. 实验3_6:用printf向内存写数据

3. 步骤:

(1) 安装VS 6.0、OllyDbg;

(2) 新建工程,添加CPP文件。

(3) 编写实验代码,并进入调试环境

(4) 按教材操作流程完成代码调试和实验操作

(5) 过程、结果截图,完成实验报告

4. 要求:提供实验步骤说明即相应截图,完成实验报告。

五、实验步骤

(1) 实验3_2:栈溢出修改相邻变量;

实验代码

  1. #include <stdio.h>  
  2. #include<string.h>  
  3. void fun()  
  4. {  
  5.     char password[6] = "ABCDE";  
  6.     char str[6];  
  7.     gets(str);  
  8.     str[5] = '\0';  
  9.     if (strcmp(str, password) == 0)  
  10.         printf("OK.\n");  
  11.     else  
  12.         printf("NO.\n");  
  13. }  
  14. int main()  
  15. {  
  16.     fun();  
  17.     return 0;  
  18. }  

1-1当用户输入“ABCDE”时,程序返回OK

1-2当用户数去“AAAAA”时,程序返回No

1-3当用户输入“aaaaaaaaaaaaa”时,程序返回OK

1-4当用户输入“aaaabbbbccccddddeeeefff”时,程序提示错误

  1. 实验3_3:栈溢出修改返回地址

实验代码

  1. #include <stdio.h>  
  2. #include<string.h>  
  3. #include<stdlib.h>  
  4. void Attack()  
  5. {  
  6.     printf("Hello!:-):-):-)\n");  
  7.     exit(0);  
  8. }  
  9. void fun()  
  10. {  
  11.     char password[6] = "ABCDE";  
  12.     char str[6];  
  13.     FILE *fp;  
  14.     if(!(fp=fopen("password.txt","r")))  
  15.     {  
  16.         exit(0);  
  17.     }  
  18.     fscanf(fp,"%s",str);  
  19.   
  20.     str[5] = '\0';  
  21.     if (strcmp(str, password) == 0)  
  22.         printf("OK.\n");  
  23.     else  
  24.         printf("NO.\n");  
  25. }  
  26. int main()  
  27. {  
  28.     fun();  
  29.     return 0;  
  30. }  

2-1实验准备,需要将“aaaabbbbccccddddeeeefff存入password.txt,而password.txt需要复制到如下图位置,以供Ollbdg试调

2-2将password.txt复制到如下图位置,以供vc6++运行

2-3打开Olldbg,导入文件,查找文件,发现Attack位置00401005

2-4利用十六进制编辑软件,点开password

2-5修改最后4个字节,修改成相应的地址05 10 40 00

2-5保存退出

2-6打开Ollbdg,直接运行

2-7打开vc6++运行程序,函数Attack()被正常执行,说明溢出修改返回成功

  1. 实验3_5:利用格式化串漏洞读取内存数据

实验代码

  1. #include"stdio.h"  
  2. int main(int argc,char * *argv)  
  3. {  
  4.     printf(argv[1]);  
  5.     return 0;  
  6. }  

3-1向程序中传入普通字符串(“security”),将输出字符串security

3-2向程序中传入普通字符串(“buffer overflow”),将输出字符串中的第一个单词buffer

3-3向程序中传入字符串带有格式控制符,printf会打印出栈中的数据。输入%p,%p,%p,%p,%p,%p,%p,可以读出栈中的数据。

%p控制以十六进制整数方式输出指针。

(4)实验3_6:用printf向内存写数据

实验代码

  1. #include"stdio.h"  
  2. int main()  
  3. {  
  4.     int num=0x61616161;  
  5.     printf("Before:num=%#x \n",num);  
  6.     printf("%.20d%n\n",num,&num);  
  7.     printf("After:num=%#x \n",num);  
  8.     return 0;  
  9. }  

4-1按下F9,写入断点

4-2按下F5,进入试调

4-3将下文的num值转为十六进制,并在下文右侧输入num,监视可疑变量num

4-4点击step into(F11),代码往下运行一行,发现num值改变改变

4-5-1在下方的右侧输入&num,获取num的地址

4-5-2点开memory,开启内存窗口,输入num,直接跳转到num地址

4-6这里需要按step over(F10)来进入下一行代码(第1条printf语句),如果按step into(F11)了话,系统会跳出一个窗口让我去找printf.c文件,但按step over(F10)就不会有这个问题

4-7点开registers,跳出窗口,参数从右向左依次压栈

4-8执行第3条语句(第2条printf语句),参数压栈,内存布局如下

4-9执行第3条printf语句,变量num的值已经变成了0x00000014(对应十进制为20)。

这是因为程序中将变量num的地址压入栈,作为第2条printf()的第2个参数,“%n”会将打印总长度保存到对应参数的地址中去,打印结果如下。

0x61616161的十进制值为1633771873,安装“%.20d”格式输出,其长度为20。

执行第3条printf语句后的内存布局如下。

五、实验体会(遇到的问题及解决方法)

实验比较旧,无法在vc2019等版本软件上运行,实验进行的溢出漏洞已经被修复,显示栈溢出的警告。实验参考的教材有些错误,误导实验进程,已靠经验解决。实验过程中,也曾出现软件版本老旧陌生、操作不懂、编译语言掌握不熟等问题,但都已解决。

实验比较老旧,希望下次实验能比较新,比较实用些。

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

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

相关文章

中间相遇法(分治类问题非等大分治的平衡做法)

分治&#xff0c;如果分成两半大小不一样&#xff0c;很容易被卡到 O ( n 2 ) O(n^2) O(n2) 在某些题目中&#xff0c;利用中间相遇法&#xff0c;我们可以优化这个过程 其优化的前提是分治的大头在找分界点 复杂度不用证&#xff0c;很好理解吧 这层找地越久&#xff0c;下…

常识判断 --- 科技常识

目录 力与热 光和声 航空成就 垃圾分类 百科知识 血型 二十四节气歌 春雨惊春清谷天 夏满忙夏暑相连 秋处露秋寒霜降 冬雪雪冬小大寒 力与热 光和声 航空成就 垃圾分类 百科知识 血型

机器人中的数值优化|【四】L-BFGS理论推导与延伸

机器人中的数值优化|【四】L-BFGS理论推导与延伸 往期内容回顾 机器人中的数值优化|【一】数值优化基础 机器人中的数值优化|【二】最速下降法&#xff0c;可行牛顿法的python实现&#xff0c;以Rosenbrock function为例 机器人中的数值优化|【三】无约束优化&#xff0c;拟牛…

丰田的国际化与转型困境:对中国车企的欧洲策略启示

摘要&#xff1a;欧洲市场的消费者汽车偏好多样,中国车企进军欧洲时,需考虑产品设计和当地法规。回顾历史,丰田汽车通过其独特管理理念,在美国从廉价品牌形象成功转型为高质量、受信赖的全球品牌。但进入电动汽车时代&#xff0c;日本车企因深度共生的传统供应链而转型坎坷。中…

如何使用ES6+特性进行现代前端开发?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用ES6 特性进行现代前端开发1. 使用 let 和 const2. 使用箭头函数3. 使用模板字符串4. 使用解构赋值5. 使用类和模块6. 使用扩展运算符和剩余参数7. 异步编程8. 使用模块打包工具9. 使用现代浏览器 ⭐ 写在最后 ⭐ 专栏简介 前端入门之…

ChatGPT推出全新功能,引发人工智能合成声音担忧|百能云芯

人工智能AI科技企业OpenAI公司25日宣布&#xff0c;其聊天应用程序ChatGPT如今具备「看、听、说」能力&#xff0c;至少能够理解口语、用合成语音回应并且处理图像&#xff1b;但专家忧心&#xff0c;以假乱真与深度伪造的乱象可能变本加厉。 国家广播公司新闻网(NBC News)报导…

1.算法——数据结构学习

算法是解决特定问题求解步骤的描述。 从1加到100的结果 # include <stdio.h> int main(){ int i, sum 0, n 100; // 执行1次for(i 1; i < n; i){ // 执行n 1次sum sum i; // 执行n次} printf("%d", sum); // 执行1次return 0; }高斯求和…

孙哥Spring源码第26集

第26集、AnnotationAwareAspectJAutoProxyCreator源码 【视频来源于&#xff1a;B站up主孙帅suns Spring源码视频】【微信号&#xff1a;suns45】 26.1、postProcessAfterInitialization分析 26.2、wrapIfNecessary分析 26.3、createProxy分析 26.4、getProxy 26.5、BeanPost…

xxl-job分布式调度框架

课程目标 1、 掌握xxl-job部署以及开发的方式 2、 掌握xxl-job特性以及架构设计 3、 掌握xxl-job运行原理 内容定位 适合已经掌握了Quartz的同学 quartz这节课是本节课的基础&#xff0c;这个要求大家一定掌握&#xff0c;因为xxl-job早期就是使用quartz改造的&#xff0…

使用华为eNSP组网试验⑵-通过端口地址进行静态路由

有了网络模拟器可以对很多网络应用场景进行模拟&#xff0c;既方便学习又有利于实际的网络实施。 之前因为没有用过&#xff0c;用过了才知道eNSP的好处。但是与思科模拟器不同&#xff0c;连接是自动连接&#xff0c;不能确定端口&#xff0c;比如使用指定的光纤端口或者RJ45的…

地球的某一片红薯地中秋圆辉少许《乡村振兴战略下传统村落文化旅游设计》——2023学生旅行季许少辉八月新书想象和世界一样宽广

地球的某一片红薯地中秋圆辉少许《乡村振兴战略下传统村落文化旅游设计》——2023学生旅行季许少辉八月新书想象和世界一样宽广 地球的某一片红薯地中秋圆辉少许《乡村振兴战略下传统村落文化旅游设计》——2023学生旅行季许少辉八月新书想象和世界一样宽广

基于微信小程序的民宿短租酒店预订系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

存储引擎InnoDB与MyISAM

操作引擎 查看存储引擎 show engines;设置系统默认的存储引擎 查看默认的存储引擎 show variables like %storage_engine%;修改默认的存储引擎 set default_storage_engineMyISAM;或者修改my.cnf文件&#xff1a; :::tips default-storage-engineMyISAM #重启服务systemct…

CentOS下安装MySQL 8.1及备份配置

1 卸载原来的MySQL版本 移除之前部署的mysql软链接 # unlink /etc/init.d/mysql # unlink /usr/bin/mysql2 下载最新的MySQL版本 https://dev.mysql.com/downloads/mysql/8.0.html 我这里直接把地址放在这里&#xff1a;https://cdn.mysql.com//Downloads/MySQL-8.1/mysql…

数据结构_链表

查询慢&#xff1a;链表中地址不是连续的&#xff0c;每次查询元素都必须从 头 开始查询增删快&#xff1a;链表结构&#xff0c;增加/删除一个元素&#xff0c;对链表的整体结构没有影响&#xff0c;所以增删快链表中的每一个元素也称为一个 节点一个节点包含了一个数据源&…

汽车电子——产品标准规范汇总和梳理(自动驾驶)

文章目录 前言 一、分级 二、定位 三、地图 四、座舱 五、远程 六、信息数据 七、场景 八、智慧城市 九、方法论 总结 前言 见《汽车电子——产品标准规范汇总和梳理》 一、分级 《GB/T 40429-2021 汽车驾驶自动化分级》 《QC/T XXXXX—XXXX 智能网联汽车 自动驾…

WordPress主题开发( 七)之—— 模版文件继承规则

WordPress主题开发&#xff08; 七&#xff09;之—— 模版文件继承规则 概述模板文件层次结构示例可视化概述层次结构详细信息主页显示首页显示单文章页面单页分类目录标签自定义分类自定义文章类型作者显示日期搜索结果404&#xff08;未找到&#xff09;附件嵌入功能非ASCII…

微PE辅助VMware安装操作系统

文章目录 一、微PE工具下载和安装二、下载系统镜像1.方式一2.方式二 三、安装VMware虚拟机三、使用U盘安装系统1.磁盘分区2.安装操作系统 一、微PE工具下载和安装 微PE工具箱下载地址点我 注意&#xff1a;EFI盘不要动任何文件&#xff0c;而我们自己的U盘就可以当作日常普通…

03 MIT线性代数-矩阵乘法和逆矩阵Multiplication inverse matrices

1. 矩阵乘法 Matrix multiplication 我们通过四种方法讨论如何使矩阵A与B相乘得到矩阵C。其中A为mxn&#xff08;m行n列&#xff09;矩阵&#xff0c;而B为nxp矩阵&#xff0c;则C为mxp矩阵&#xff0c;记cij为矩阵C中第i行第j列的元素 1.1 Regular way 矩阵乘法的标准计算方…

Azure AD混合部署,通过 Intune 管理设备,实现条件访问

一、设备同步到AAD上面 1、配置 AAD Connect 2、选择 3、下一步 4、配置本地 企业管理员 5、配置成功 二、通过 组策略把设备同步到 Intune 上面 1、创建一条组策略 2、设置 &#xff08;1&#xff09;计算机配置 → 管理模板 → Windows 组件 → MDM → 使用默认 Azure AD …