• 栈溢出实验


    视频链接:https://drive.google.com/open?id=1oJTRT0R0OIpoCc5rv5crlsOxbW3vRUnY

    课程编写

    类别

    内容

    实验课题名称

    栈溢出实验

    实验目的与要求

    学习和理解栈溢出的原理和危害,了解栈溢出的攻击方式和防范措施

    实验环境

    VPC1(虚拟PC)

    操作系统类型:Windows XP

    网络接口:本地连接

    VPC1连接要求

    PC网络接口,本地连接与实验网络直连

    软件描述

    学生机要求安装Java环境

    VPC1安装VC6.0

    实验环境描述

    学生机与实验室网络直连
    VPC1与实验室网络直连
    学生机与VPC1物理链路连通

    预备知识

    如果向栈上声明的缓冲区中复制数据,但是复制到数据量又比缓冲区大的时候,就会发生栈溢出。在栈上声明的各种变量的位置紧临函数调用程序的返回地址。若用户输入的数据未经验证就传递给strcpy这样的函数,则会导致变量值被攻击者指定的值所改写或调用函数的返回地址将被攻击者选择的地址所覆盖,打乱程序正常运行流程,转而执行恶意代码。

    防范栈溢出的有效方法有:禁止栈执行,从而阻止攻击者植入恶意代码;编写安全可靠的代码,始终对输入的内容进行验证;利用编译器的边界检查实现栈保护。

    实验内容

    利用栈溢出修改变量值

    实验步骤

    1、打开控制台。

    学生单击“试验环境试验”进入实验场景,单击L005001004xp01_1中的“打开控制台”按钮,进入目标主机。

     

    图1

    2、找到桌面上的Microsoft Visual C++ 6.0,双击打开。新建一个C++ Source File,可以取名为zhanyichu。

     

    图2

    3、输入以下代码,并编译、组建。(代码位于d: oolszhanyichu.txt中)

     

    图3

    #include <iostream>

    #include <string>

    #include <cstdlib>

    #include <cstring>

    using namespace std;

     

    void function(string str)

    {

    int x = 10;

    char buf[10];

    strcpy(buf, str.c_str());

    cout << "x = " << x << endl;

    }

     

    int main(int argc, char* argv[])

    {

    string test;

    cout << "Please input a string: ";

    cin >> test;

    function(test);

    system("pause");

    return 0;

    }

    4、运行程序,先输入10个字符以内的字符串,得到一个x的值;再输入大于10个的字符串。可以看出,字符串超过了一定长度之后,会导致x的值的变化,这就是溢出的结果。

    图4

     

    图5

    5、实验结束。

  • 相关阅读:
    终端服务器超出了最大允许连接数
    获得拼凑SQL语句运行后的结果
    无法添加此项,原因是要将其添加到的项不是解决方案文件夹
    SQL SERVER读书笔记:内存
    复制DropDownList
    设计模式基础
    WebForm与MVC混用
    SQL SERVER读书笔记:JOIN
    SQL SERVER读书笔记:nolock
    SQL SERVER读书笔记:阻塞与死锁
  • 原文地址:https://www.cnblogs.com/nul1/p/10859579.html
Copyright © 2020-2023  润新知