ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

缓冲区溢出

2021-10-29 22:33:38  阅读:167  来源: 互联网

标签:攻击 sudo apt 地址 缓冲区 zsh stack 溢出


实验准备

输入命令安装一些用于编译 32 位 C 程序的软件包:

sudo apt-get update
sudo apt-get install -y lib32z1 libc6-dev-i386 lib32readline6-dev
sudo apt-get install -y python3-gdbm gdb

初始设置

1.Ubuntu 和其他一些 Linux 系统中,使用地址空间随机化来随机堆(heap)和栈(stack)的初始地址,这使得猜测准确的内存地址变得十分困难,而猜测内存地址是缓冲区溢出攻击的关键。因此本次实验以下命令关闭这一功能:
sudo sysctl -w kernel.randomize_va_space=0

2.同时,ubuntu系统的shell还有一个保护措施,即使在溢出后,也让shell没有高级权限,所以需要将这个措施关闭,使用删除现有的sh二进制文件,改为使用较早的zsh实现使用,使用ln指令相当于是创建了一个链接。


3、输入命令 linux32 进入32位linux环境。
这里我发现输入linux32后系统显示没有sh这个文件或者目录。经过询问同学知道,我用的是我自己的虚拟机搞的实验,还没有安装zsh,还要用下面的命令安装zsh:
sudo apt install zsh

漏洞程序

在 /tmp 目录下新建一个 stack.c 文件:然后把代码写进去,并执行以下命令:

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

攻击程序

在 /tmp 目录下新建一个 exploit.c 文件:然后把代码写进去,这个代码的目的是攻击刚才的漏洞程序,并通过攻击获得 root 权限。
接下来要得到 shellcode 在内存中的地址,使用以下命令进入 gdb 调试:

gdb stack
disass main  

得到如下结果:

esp 中就是 str 的起始地址,所以我们在地址 0x080484ee 处设置断点。最后获得的这个 0xffffcd60 就是 str 的地址。根据语句 strcpy(buffer + 100,shellcode); 计算 shellcode 的地址为 0xffffcdc4。再把这个写入exploit.c 文件中。

攻击结果

通过攻击,获得了root 权限!

发现如果使用开启了地址空间随机化,就会出现段错误,从而无法成功攻击。

将 /bin/sh 重新指向 /bin/bash(或/bin/dash)。修改后,发现仍然会导致缓冲区溢出,但溢出后也无法获取到root权限。

标签:攻击,sudo,apt,地址,缓冲区,zsh,stack,溢出
来源: https://www.cnblogs.com/20191319cgh/p/15483789.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有