缓冲区溢出实验

合集下载

缓冲区溢出攻击实验

缓冲区溢出攻击实验

HUNAN UNIVERSITY课程实验报告题目: Buflab-handout学生姓名学生学号专业班级计科1403(一)实验环境联想ThinkPadE540 VM虚拟机ubuntu32位操作系统(二)实验准备1.使用tar xvf命令解压文件后,会有3个可执行的二进制文件bufbomb,hex2raw,makecookie。

bufbomb运行时会进入getbuf函数,其中通过调用Gets函数读取字符串。

要求在已知缓冲区大小的情况下对输入的字符串进行定制完成特定溢出操作。

从给的PDF文件中我们得知getbuf函数为:/ /Buffer size for getbuf#define NORMAL_BUFFER_SIZE 32int getbuf(){char buf[NORMAL_BUFFER_SIZE];Gets(buf);return 1;}这个函数的漏洞在于宏定义的缓冲区的大小为32,若输入的字符串长于31(字符串末尾结束符)则会导致数据的覆盖,从而导致一系列损失;在此实验中,我们正是利用这个漏洞来完成实验。

2. hex2raw可执行文件就是将给定的16进制的数转成二进制字节数据。

Makecookie是产生一个userid。

输入的相应的用户名产生相应的cookie值。

**我产生的cookie值为0x5eb52e1c,如下图所示:Level0:实验要求:从英文的PDF文件中的“Your task is to get BUFBOMB to execute the code for smoke when getbuf executes its return statement,rather than returning to test. Note that your exploit string may also corrupt parts of the stack not directlyrelated to this stage, but this will not cause a problem, since smoke causes the program to exit directly.”这句话看出实验让我们在test运行完后,不直接退出,而是跳到smoke函数处执行然后退出,这点很重要!(本人之前一直没有成功就是错在这儿)Test源码:void test(){int val;// Put canary on stack to detect possible corruptionvolatile int local = uniqueval();val = getbuf();// Check for corrupted stackif (local != uniqueval()) {printf("Sabotaged!: the stack has been corrupted\n");}else if (val == cookie) {printf("Boom!: getbuf returned 0x%x\n", val);validate(3);} else {printf("Dud: getbuf returned 0x%x\n", val);}}smoke源码:void smoke(){printf("Smoke!: You called smoke()\n");validate(0);exit(0);}对bufbomb函数进行反汇编并获取getbuf函数的反汇编代码:从上面的汇编代码中我们可以得知,lea指令把buf的指针地址(-0x28(%ebp))传给了Gets()。

缓冲区溢出攻击与防范实验报告

缓冲区溢出攻击与防范实验报告

缓冲区溢出攻击与防范实验报告——计算机网络(2)班——V200748045黄香娥1·缓冲区溢出的概念:缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量溢出的数据覆盖在合法数据上,理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间想匹配,这就为缓冲区溢出埋下隐患.操作系统所使用的缓冲区又被称为"堆栈". 在各个操作进程之间,指令会被临时储存在"堆栈"当中,"堆栈"也会出现缓冲区溢出。

2·缓冲区溢出的危害:在当前网络与分布式系统安全中,被广泛利用的50%以上都是缓冲区溢出,其中最著名的例子是1988年利用fingerd漏洞的蠕虫。

而缓冲区溢出中,最为危险的是堆栈溢出,因为入侵者可以利用堆栈溢出,在函数返回时改变返回程序的地址,让其跳转到任意地址,带来的危害一种是程序崩溃导致拒绝服务,另外一种就是跳转并且执行一段恶意代码,比如得到shell,然后为所欲为。

3·缓冲区溢出原理:由一个小程序来看://test.c#include "stdio.h"#include "stdlib.h"#include "string.h"void overflow(void){char buf[10];strcpy(buf,"0123456789123456789");}//end overflowint main(void){overflow();return 0;}//end main按F11进入"Step into"调试模式,如下:按F11跟踪进入overflow,让程序停在6,现在再看一下几个主要参数:esp=0x0012ff30,eip发生了变化,其它未变。

缓冲区溢出攻击实验报告_林凯杰_30601340

缓冲区溢出攻击实验报告_林凯杰_30601340

缓冲区溢出攻击实验【实验要求】1)基本要求:编写一个能实现缓冲区溢出(整数溢出或堆栈溢出)的程序。

语言不限(c,c++,c#,java等均可),环境也不限(linux或windows等)。

并在调试状态下(如linux的gdb或其他集成开发环境的调试命令)查看寄存器和相应存储单元内容的变化情况。

分析并解释缓冲区溢出的原因。

提交:分析文档(要给出调试过程和运行过程中的一些必要的截图),源代码等。

2)提高要求:在上述溢出的情况下,改写ret地址,增加shellcode代码,实现本地或远程管理员权限的非授权访问。

例:一个简单的shellcode程序:/* linux下的一个程序*/#include <stdio.h>void main() {char *name[2];name[0]="/bin/sh";name[1]=NULL;execve(name[0],name,NULL);}也可用gdb对其反汇编(主要分析execve和exit函数调用的机器指令),获得相关的汇编代码,进一步处理为16进制机器代码,形如char shellcode[]="\xeb\xlf.......\bin\sh";然后利用strcpy等脆弱性函数植入shellcode.【实验原理】实验主要是利用strcpy等脆弱性函数在执行时没有检查缓冲区长度的特性,通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,造成程序崩溃或使程序转而执行其它指令,以达到攻击的目的。

1、局部变量与堆栈的关系在一个程序中,会声明各种变量。

静态全局变量是位于数据段并且在程序开始运行的时候被初始化,而局部变量则在堆栈中分配,只在该函数内部有效。

如果局部变量使用不当,会造成缓冲区溢出漏洞。

例如,以下程序将命令行的第1个参数拷贝到buffer局部变量中。

void main(int argc,char **argv){char buf[80];strcpy(buf,argv[1]);}在一次函数调用中,堆栈中将被依次压入:参数、返回地址。

实验2:缓冲区溢出

实验2:缓冲区溢出

3.4.2 寻找jmp指令地址
前面说到,我们选择通过jmp esp来实现程 序跳转,也就是说,要在RET的位置放置 jmp esp指令的地址,那么,到哪里找jmp esp指令呢? 最好是能在系统中找到现成的,而不需要 我们重新再构造 事实上,在Windows系统的许多DLL中都 能找到jmp esp这样一条指令,一个通用的 地址是0x7ffa4512
4. 实验说明——3CTftpSvc
软件名称:3CTftpSvc 影响版本:Current version:2.0.1 漏洞描述:畸形的传输模式可以导致缓冲 区溢出,覆盖EIP,可能造成拒绝服务攻击和 远程代码执行。 漏洞调试:当传输模式为mode = "netascii" + "A" * 469时覆盖EIP
因此,在网上下载的CCProxy 6.2有可能 是已修补了该漏洞的程序
4. 实验说明——War-ftp
war-ftp漏洞提示:向服务器发送超过480 字节的用户名可以触发漏洞(即使用命令 USER longString\r\n),溢出之后,ESP中 的内容包含了longString中的部分内容
3.1 介绍CCProxy
CCProxy因其设 置简单和使用方便 等特点,成为国内 最受欢迎的代理服 务器软件。 CCProxy不但支 持常见的HTTP和 SOCKS代理,而且还 支持FTP和Telnet这 类不常用的协议及 其它协议。
3.2 漏洞说明
CCProxy在代理Telnet协议时,可以接受 Ping命令
Socket编程 连接目标主机(connect) 构造溢出字符串(即构造后接shellcode的 ping命令:ping shellcode\r\n) 向目标主机发送溢出字符串(send) 关闭连接

网络安全实验报告 - 缓冲区溢出攻击

网络安全实验报告 - 缓冲区溢出攻击

一实验名称利用跳转指令实现缓冲区溢出定位参数地址实现缓冲区溢出二实验目的1.熟练掌握缓冲区溢出原理2.利用jmp esp指令实现缓冲区溢出3.熟练掌握缓冲区溢出原理4.利用定位参数地址实现缓冲区溢出三实验步骤利用跳转指令实现缓冲区溢出1.编写前导码程序中提供了一个超长前导码,对程序进行调试来确定实际需要的前导码长度在图中可以看出,0x49484746四字节覆盖了ret返回地址2.查找jmp esp指令地址运行FindJmpesp工具,选取一个地址追加到shellcode尾(追加填加地址时注意数组高字节对应地址高位),所选jmp esp指令地址是0x77e424da跟踪调试程序,确定在memcpy执行返回时jmp esp指令是否被执行从图看出,在jmp esp指令执行完毕后,指令指针紧接着执行了3个空指令,而空指令是追加在shellcode尾部的3.生成实现弹出对话框的指令码MessageBoxA函数的绝对内存地址,该地址为0x77E10000+0x0003D8DE=0x77E4D8DE函数ExitProcess的绝对内存地址0x7C800000+0x00013039=0x7C813039利用反汇编功能获取代码字节,将代码字节以十六进制数据形式继续追加到shellcode尾。

重新编译执行。

定位参数实现缓冲区溢出1.进入工程2.生成shellcode功能体(1)首先设置OverFlowClient项目为启动项。

(2)使用Depends工具打开FindShellBase.exe文件定位上述内存地址kernel32.dll 0x7C800000LoadlibraryA 0x7C800000+0x00001E60=7C801E60SHELL32.DLL 0x7CA10000shellExecuteA 0x7CA10000+0x0008F6D4=0x7CA9F6D4(3)编译并生成OverFlowClient.exe,执行OverFlowClient.exe,确定系统是否新建了jlcss用户,并隶属Administrators组。

信息安全实验-缓冲区溢出-蒋智超

信息安全实验-缓冲区溢出-蒋智超

缓冲区溢出一、实验目的掌握缓冲区溢出攻击的现象掌握使用缓冲区溢出工具的方法二、实验步骤一.利用ms06035漏洞进行攻击1.进入“ms06035漏洞利用工具”目录主机A单击工具栏中“ms06035工具”按钮,进入“ms06035漏洞利用工具”工作目录。

2.查看当前目录内容主机A用dir命令查看当前目录中的内容,如下图所示:图4-1-1 工具目录中的内容上图中标注的“ms06035.exe”即为ms06035漏洞利用工具。

3.使用“ms06035工具”进行攻击主机A执行“ms06035.exe 主机B的ip 445”命令,发起对主机B的攻击。

4.主机B观察被攻击现象主机B被攻击后出现蓝屏死机的现象(实验结束,主机B用虚拟机“快照X”恢复实验环境)。

二.利用ms08025漏洞进行攻击以下步骤两主机互相攻击对方,操作相同,故以主机A为例说明实验步骤。

「注」主机B单击“ms08025工具”按钮,进入实验目录。

将ms08025.exe复制到D盘的根目录下,以便实验下一步进行。

1.telnet登录系统(1)主机A在命令行下使用telnet登录同组主机,当出现“您将要把您的密码信息送到Internet区内的一台远程计算机上,这可能不安全,您还要发送吗(y/n)”当出现此提示时,选择n,输入登录账号“student”,密码“123456”。

登录成功如下图所示。

图4-1-2 telnet登录(2)主机A依次输入“d:”|“dir”查看同组主机D盘根目录,“ms08025.exe”即为实验工具。

图4-1-3 实验工具2.使用系统命令添加用户主机A使用“net user student1 /add”命令来试添加一个用户“student1”,执行该命令,出现“发生系统错误5,拒绝访问”的提示,如下图所示:图4-1-4 使用系统命令添加用户请解释出现上述现象的原因:。

3.查看ms08025工具使用方法主机A在telnet命令行中输入“ms08025.exe”,查看工具的使用方法,如下图所示:图4-1-5 ms08025工具使用方法4.使用ms08025工具添加用户主机A执行“ms08025.exe "net user student1 /add"”命令,提示命令成功完成,证明用户student1成功添加,如下图所示:图4-1-6 使用ms08025工具添加用户5.查看用户信息主机A用命令“net user student1”查看用户student1的信息,发现用户student1创建成功,隶属于Users组。

缓冲区溢出实验

缓冲区溢出实验

缓冲区溢出实验实验环境:实验准备:因为缓冲区溢出攻击是一个比较老的攻击方法,因此在现在的操作系统中都加入了防护机制。

在实验开始之前,为了能成功的看到结果,我们需要把这些防护机制关掉。

工程如下:第一步,关掉随机地址机制。

地址随机是一个主要防护机制,在缓冲区溢出攻击过程中需要覆盖并改写程序的返回地址。

使返回地址指向我们的代码,如果开始地址随机的话,我们就不能准确的计算出我们的代码的位置。

所以,我们使用以下命令(在root权限下),关掉该防护机制。

#sysctl -w kernel.randomize_va_space=0第二步,在编译的时候,要关掉栈区保护,并且允许栈区可执行。

这样,我们利用缓冲区溢出注入的代码才可以在栈里面执行。

$ gcc -fno-stack-protector example.c$ gcc -z execstack -o test test.c实验过程:首先分析被攻击的程序#include <stdlib.h>#include <stdio.h>#include <string.h>int bof(char *str){char buffer[24];/* 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;}main()函数读入一个文件,并调用bof(),进行拷贝。

缓冲区溢出漏洞实验

缓冲区溢出漏洞实验

缓冲区溢出漏洞实验缓冲区溢出漏洞实验⼀、了解缓冲区溢出及其原理1、缓冲区溢出概念缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本⾝的容量溢出的数据在合法数据上,理想的情况是程序检查数据长度并不允许输⼊超过缓冲区长度的字符,但是绝⼤多数程序都会假设数据长度总是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐患,操作系统所使⽤的缓冲区,⼜被称为"堆栈"。

在各个操作进程之间,指令会被临时储存在"堆栈"当中,"堆栈"也会出现缓冲区溢出。

2、缓冲区溢出攻击及其原理通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从⽽破坏程序的堆栈,使程序转⽽执⾏其它指令,以达到攻击的⽬的。

造成缓冲区溢出的原因是程序中没有仔细检查⽤户输⼊的参数。

这也是稍后做题的突破原理,缓冲区漏洞普遍并且易于实现,缓冲区溢出成为远程攻击的主要⼿段其原因在于缓冲区溢出漏洞给予了攻击者他所想要的⼀切:植⼊并且执⾏攻击代码。

被植⼊的攻击代码以⼀定的权限运⾏有缓冲区溢出漏洞的程序,从⽽得到被攻击主机的控制权。

⼤多数的缓冲溢出攻击都是通过改变程序运⾏的流程到⼊侵者植⼊的恶意代码,其主要⽬的是为了获取超级⽤户的shell。

原理:将恶意指令存放在buffer中,这段指令可以得到进程的控制权,从⽽达到攻击的⽬的。

⼆、实验楼实现缓冲区溢出1、实验准备本实验需要32位环境下操作,输⼊命令下载必要的软件包。

sudo apt-get updatesudo apt-get install -y lib32z1 libc6-dev-i386 lib32readline6-devsudo apt-get install -y python3.6-gdbm gdb2、初始设置Ubuntu 和其他⼀些 Linux 系统中,使⽤地址空间随机化来随机堆(heap)和栈(stack)的初始地址,这使得猜测准确的内存地址变得⼗分困难,⽽猜测内存地址是缓冲区溢出攻击的关键。

缓冲区溢出攻击与防范实验报告

缓冲区溢出攻击与防范实验报告

实验六报告图1 win10攻击机图2 Windows 2000 靶机2、扫描靶机在正式开始渗透之前,应该对靶机进行扫描探测工作,搞清楚渗透目标的系统类型、开放的端口服务、可能存在的安全漏洞等。

在win10攻击机上运行metasploit console,即可进入Metasploit环境。

现在可以利用MSF框架中集成的Nmap扫描器对渗透测试目标进行扫描,如图3所示,获取了靶机的开放服务和操作系统类型等信息。

图3 windows 2000扫描结果利用扫描器的脚步插件,还有可能直接探测出目标系统的安全漏洞,例如如图4所示,Nmap利用smb-check-vulns插件扫描探测出了Windows 2000靶机存在MS08_067漏洞,命令执行如下:nmap -script=smb-check-vulns.nse 192.168.56.101。

namap扫描的结果里报告发现MS08-067:DISABLED。

这是在暗示我们或许能够对这台主机进行渗透攻击,然后我们在 Metasloit里面找到此漏洞的攻击模块,并尝试攻击目标机器。

MS08-067是一个对操作系统版本依赖非常高的漏洞,所以在这里,我们只自动payload指定一下目标就可以确保触发正确的溢出代码。

图4漏洞扫描结果3利用MS08_067漏洞渗透入侵MS08-067漏洞的全称为“Windows Server服务RPC请求缓冲区溢出漏洞”,如果用户在受影响的系统上收到特制的 RPC 请求,则该漏洞可能允许远程执行代码。

在 Microsoft Windows 2000Windows XP 和 Windows Server 2003 系统上,攻击者可能未经身份验证即可利用此漏洞运行任意代码,此漏洞可用于进行蠕虫攻击,目前已经有利用该漏洞的蠕虫病毒。

防火墙最佳做法和标准的默认防火墙配置,有助于保护网络资源免受从企业外部发起的攻击,默认情况下能建立空连接。

逆向分析实验3栈缓冲区溢出

逆向分析实验3栈缓冲区溢出

实验三栈缓冲区溢出一. 实验目的1、掌握栈缓冲区溢出原理;2、掌握利用shellcode劫持程序指令控制流的方法;二. 实验环境吾爱破解WinXP_52Pojie_2.0、Microsoft Visual C++6.0(在虚拟机里安装)、Ollydbg三. 实验内容注:由于实验环境、代码编写的不同,使用Ollydbg反汇编出来的指令的实际地址可能与本指导的地址有所差异,请按实际情况填写,并给出必要的截图。

1、观察栈溢出过程(1)使用VC++6.0编写一段C程序,解压之后双击sin.bat,在桌面创建vc6图标。

在桌面创建cpp文件。

源代码如下:其中,strcat函数是一个不安全函数,无字符串长度检查,执行该函数可能会产生栈溢出。

输入代码后,先编译再组建,确保0 errors。

默认点击在桌面创建工作区,在桌面的debug文件夹中看到生成的exe文件。

(2)编译程序生成Debug版本的EXE文件,使用IDA Pro打开EXE文件,可以看到左侧提供了源码声明的函数的起始位置,选择_main,可以看到main函数的起始位置为004010B0,则使用Ollydbg打开EXE,在该地址下断点,单步执行该程序。

(3)401116处令edx入栈,401117使用call指令调用fun函数,因此edx寄存器的是fun函数的参数,$edx= 0012D870 ,该寄存器代表变量名str 的地址,变量值为AAAAA 。

(4)跟踪步入call 00401005指令,进入fun函数,给出fun开始执行时的截图(从push ebp指令开始):(5)根据学过的知识,进入函数的第一步是栈处理,首先执行push ebp;movebp,esp;sub esp,0x58,为fun中的局部变量分配一定的内存空间,此时函数栈帧结构已经完成,此时右击寄存器窗口的EBP寄存器,点击“堆栈窗口中跟随”,在右下角堆栈窗口中可以观察到栈底的情况,给出堆栈窗口截图:根据截图得到此时的栈信息fun函数的返回地址为0040111C ,此地址为(4)步入的call指令的下一条指令的地址。

实验四缓冲区溢出攻击技术

实验四缓冲区溢出攻击技术

实验单元四. 缓冲区溢出攻击技术一、实验目的和要求1.掌握缓冲区溢出的原理;2.掌握缓冲区溢出漏洞的利用技巧;3.理解缓冲区溢出漏洞的防范措施。

二、实验内容和原理缓冲区溢出的原理:通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。

造成缓冲区溢出的根本原因是程序中缺少错误检测。

当然,随便往缓冲区中填东西造成它溢出一般只会出现“分段错误”(Segmentation fault),而不能达到攻击的目的。

最常见的手段是通过制造缓冲区溢出使程序运行一个用户shell,再通过shell 执行其它命令。

如果该程序属于root,攻击者就获得了一个有root 权限的shell,可以对系统进行任意操作。

缓冲区溢出攻击之所以成为一种常见安全攻击手段其原因在于缓冲区溢出漏洞太普遍了,并且易于实现。

而且,缓冲区溢出成为远程攻击的主要手段其原因在于缓冲区溢出漏洞给予了攻击者他所想要的一切:植入并且执行攻击代码。

被植入的攻击代码以一定的权限运行有缓冲区溢出漏洞的程序,从而得到被攻击主机的控制权。

缓冲区溢出漏洞和攻击有很多种形式,而相应的防范手段也随者攻击方法的不同而不同。

三、实验项目缓冲区溢出产生cmd窗口;改写函数返回地址;shellcode的编写;shellcode的植入。

四、实验所需软硬件1)仪器设备条件:PC及其网络环境;2)物质条件:Windows XP SP3、Linux、Gcc、Visual C++ 6.0 编译器等,OllyDbg;3)相关文献资料:课件及网上收集的资料。

五、操作方法与实验步骤1.缓冲区溢出漏洞产生的的基本原理和攻击方法 缓冲区溢出模拟程序程序源代码如下:运行该程序产生访问异常:由于拷贝字符串时产生缓冲区溢出,用“ABCD”字符串的值覆盖了原来EIP的值,所以main函数返回时EIP指向44434241,引发访问异常。

运行命令窗口的shellcodeshellcode测试代码如下:#include "string.h"#include "stdio.h"#include<windows.h>char name[]="\x41\x41\x41\x41""\x41\x41\x41\x41""\x41\x41\x41\x41" ///覆盖ebp"\x12\x45\xfa\x7f" ////覆盖eip,jmp esp地址7ffa4512"\x55\x8b\xec\x33\xc0\x50\x50\x50\xc6\x45\xf4\x6d""\xc6\x45\xf5\x73\xc6\x45\xf6\x76\xc6\x45\xf7\x63""\xc6\x45\xf8\x72\xc6\x45\xf9\x74\xc6\x45\xfa\x2e""\xc6\x45\xfb\x64\xc6\x45\xfc\x6c\xc6\x45\xfd\x6c""\x8d\x45\xf4\x50\xb8""\x77\x1d\x80\x7c" // LoadLibraryW的地址shellcode测试代码运行效果如下:由于把main函数的返回EIP地址替换成了jmp esp的地址,main函数返回的时候就会执行我们的shellcode代码。

缓冲溢出攻击实验报告

缓冲溢出攻击实验报告

一、实验目的及要求1. 了解缓冲区溢出攻击的原理和类型。

2. 掌握缓冲区溢出攻击的实验方法和步骤。

3. 理解缓冲区溢出攻击的危害性。

4. 学习防范和避免缓冲区溢出攻击的方法。

二、实验环境1. 操作系统:Windows 102. 编程语言:C/C++3. 漏洞利用工具:Metasploit4. 实验环境搭建:使用虚拟机软件(如VMware)搭建实验环境,靶机为Windows 7 SP1,攻击机为Kali Linux。

三、实验内容1. 漏洞分析:分析实验环境中存在的缓冲区溢出漏洞。

2. 攻击实现:利用Metasploit工具对靶机进行攻击,实现远程代码执行。

3. 防御措施:学习防范和避免缓冲区溢出攻击的方法。

四、实验步骤1. 漏洞分析- 使用Ghidra工具对实验环境中的漏洞程序进行反汇编,分析程序中的缓冲区溢出漏洞。

- 发现漏洞程序存在缓冲区溢出漏洞,攻击者可以通过输入超长字符串来覆盖返回地址,从而控制程序的执行流程。

2. 攻击实现- 使用Metasploit工具中的`exploit/multi/handler`模块,设置攻击目标为靶机的IP地址和端口。

- 使用`set payload`命令设置攻击载荷,选择`windows/x64/meterpreter/reverse_tcp`,该载荷可以在攻击成功后与攻击机建立反向连接。

- 使用`set LHOST`命令设置攻击机的IP地址,使用`set LPORT`命令设置端口号。

- 使用`set target`命令设置攻击目标,选择漏洞程序的模块和参数。

- 使用`exploit`命令启动攻击,等待攻击成功。

3. 防御措施- 代码审计:对程序进行代码审计,及时发现并修复缓冲区溢出漏洞。

- 输入验证:对用户输入进行严格的验证,限制输入长度,防止输入超长字符串。

- 边界检查:在代码中添加边界检查,防止缓冲区溢出。

- 安全编程:遵循安全编程规范,使用安全的编程语言和库,避免使用存在漏洞的函数。

缓冲区溢出实验报告

缓冲区溢出实验报告

缓冲区溢出报告院系:计算机与通信工程学院班级:信息安全10-02班1.实验目的掌握缓冲区溢出的原理掌握常用的缓冲区溢出方法理解缓冲区溢出的危害性掌握防范和避免缓冲区溢出攻击的方法2.实验工具溢出对象:CCProxy 7.2(1)(2)调试工具:使用Vmware虚拟机,安装CCPROXY7.2进行实验调试。

3.实验步骤了解CCProxy 7.2代理服务器为大家解决了很多问题,比如阻挡黑客攻击和局域网共享上网等。

•国内非常受欢迎的一款代理服务器软件•设置简单,使用方便•不仅支持常见的HTTP和SOCKS代理,而且支持FTP/Telnet等这类不常用的协议及其它协议关于CCProxy6.2缓冲区溢出漏洞说明CCProxy在代理Telnet协议时,可以接受Ping命令Ping命令格式:ping hostname\r\n当hostname的长度大于或者等于1010字节时,CCProxy 6.2会发生缓冲区溢出,导致程序崩溃CCProxy 6.2缓冲区溢出漏洞演示在目标主机运行CCProxy,使用默认设置运行CCProxy的机器IP是192.168.6.132使用telnet命令连接CCProxy:telnet 192.168. 6.132 23返回信息:(如图)输入ping命令,后接畸形数据:在ping命令后接10个字符A(ping AAAAAAAAAA),观察返回信息将字符A的数量变为100个、1000个、2000个,观察返回信息(注:由于本人安装的是7.2版本,其漏洞已修复,故智能识别252个字符,其后被截断,所以当出现的畸形字符长度超过252时,就不再被识别,所以会有“host not found”)原理:如果终端提示“Host not found”,说明CCProxy正确地处理了这个畸形数据,仍工作正常如果终端提示“失去了跟主机的连接”,表明CCProxy已经崩溃CCProxy 6.2缓冲区溢出漏洞利用如何利用这个漏洞,来实现攻击目的,做一些特别的事情。

软件安全实验二缓冲区溢出漏洞分析与验证

软件安全实验二缓冲区溢出漏洞分析与验证

软件安全课程实验报告
实验二缓冲区溢出漏洞分析与验证
一、实验内容
1)本课程实验研究对象是一个Web服务器zookws,该服务器上运行一个Python的web应用zoobar,web用户之间转移一种称为zoo
bars的货币,分析web服务器的逻辑,寻找缓冲区溢出漏洞并触
发该漏洞;
2)实验环境为Ubuntu,在VMware Player虚拟机中的vm-6858运行,系统有两个账号:
root:口令6858,用来安装软件
httpd:口令6858,运行服务器和实验程序
二、实验预备
1.运行ifconfig查看ip
2.远程ssh连接
3. make编译程序
4.启动服务器
5.用浏览器访问zook服务
6.用ps命令查看当前运行的进程
三、寻找漏洞
1.实验缓冲区利用的是strcpy的缓冲区漏洞,找到代码中是否有strcpy,找到了,在dir_join中。

四、触发漏洞
1.打开服务器,启动web
2.那么就可以将原来分配的1024字节大小的缓冲区进行溢出,将请求的路径设
置很长,要超过1024,达到将代码覆盖的效果。

3.漏洞利用结果
五、实验分析与总结
这次实验让我们亲身经历了一次代码审计及缓冲区漏洞利用的过程,实验很有意思,学到的知识也非常的多,通过代码审计,在脑中便利可能的漏洞利用点,然后找出漏洞,并通过shell脚本利用漏洞来进行缓冲区溢出攻击,可以深刻的了解缓冲区漏洞的原理,在以后的审计代码中,会留意,在自己编写程序时,也会避免使用危险函数。

linux实验报告-Linux下的缓冲区溢出实践

linux实验报告-Linux下的缓冲区溢出实践

课程实验(设计)报告课程名称:Linux架构分析与安全设计实验内容:Linux下的缓冲区溢出实践目录1. 实验目的 (3)2. 实验环境 (3)3. 实验原理 (3)4. 实验要求 (7)5. 实验内容和步骤 (7)5.1 实验内容 (7)5.2实验步骤 (8)6. 实验思考与改进 (12)1.实验目的理解Linux系统下缓冲区溢出机制。

2.实验环境(1)操作系统:Ubuntu 20.04(2)L inux Kernel:5.4.0-53-generic(2)软件工具:gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.03. 实验原理#include<stdio.h>int calc(int a,int b,int* sum) {*sum = a+b;return0;}int main(int argc,char*argv[]) {int a = 1;int b = 2;int sum = 0;printf("before calc : a = %d, b = %d, sum = %d\n",a,b,sum);calc(a,b, &sum);printf("after calc : a = %d, b = %d, sum = %d\n",a,b,sum);return0;}参考上述代码,calc()函数有三个参数,第一个,第二个是参与计算的数,第三个是保存结果的变量的地址。

编译运行,结果如下图所示接下来我们使用gdb调试程序先用b命令在代码16行calc(a, b, sum)下断点,使用r运行,等程序在16行处停下来,查看a,b,sum的地址和rbp,rsp的值,如下图所示。

如下图所示,进入calc()函数后,因为函数传递参数是传值,会新申请内存空间保存变量,所以可以看到a,b,sum的地址都改变了但是从下图我们可以看出来,形参额值是不变的。

缓冲区溢出攻击实验教程

缓冲区溢出攻击实验教程

1.实训目标
获取目标主机的最高权限,利用远程桌面登录。

理解ddos攻击的原理缓冲区溢出攻击原理一、实验环境
实验环境两台预装 Windows 2000/XP/2003 的主机,通过网络相连。

软件工具:metasploit frmamework
二、试验要求
1、实训要求:
获取目标主机的最高权限
三、实训步骤:
1、攻击目标
Windows server 2003 SP0
2、攻击目的
获取目标主机的最高权限,利用远程桌面登录并进行截图说明
3、攻击开始
步骤1:使用nmap对目标进行端口扫描
步骤2:目标开启135端口,可利用MS03-026漏洞进行入侵,用到的工具是metasploit frmamework。

(1)查询MS03-026漏洞所对应的溢出模块
(2)进入此模块
(3)设置有效载荷为执行特定命令,配置相关参数并显示出来
(4)执行攻击命令,成功进入目标系统
(7)添加系统账号并把它加入系统管理员组中
(8)远程登录服务器,溢出成功。

缓冲区溢出检测实验

缓冲区溢出检测实验
printf("Warning: buf1 is overflow!\n"); } getchar(); exit(1); } fprintf(fd,"%s\n\n",buf1); fclose(fd);
if(diff<=strlen(bufchar)) {
printf("Message: buf1 is overflow, overwritten myoutfile\n"); }
实验工具
MS08067 溢出工具
实验要点
本地缓冲区堆溢出 MS08
VM Server
VM Client
实验步骤指导
实验准备
实验概要:熟悉了解相关的实验工具。
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
【知识重点】 在引入一个基于堆的缓冲区溢出的例子前,首先简单介绍一个例题的意图。在一个堆栈 里边申请两块存储空间,处于低地址的 buf1 和处于高地址的 buf2。在 buf2 当中,存储了 一个名为 myoutfile 的字符串,用来存储文件名。buf1 用来接收输入,同时将这些输入字符 在程序执行过程中写入到 buf2 存储的文件名 myoutfile 所指向的文件中。
getchar(); return 0; }
通过 malloc 命令,申请了两个堆的存储空间。在这里要注意分配堆的存储空间时,存在
一个顺序问题。buf2 的申请命令虽然在 buf1 的申请命令之前,但是在运行过程中,内存空
间中 buf2 是在高地址位,buf1 是在低地址位。这个随操作系统和编译器的不同而不同。
//#include "stdafx.h" #include "iostream" #include "stdio.h" #include "stdlib.h" #include "memory.h"

缓冲区溢出攻击与防范实验

缓冲区溢出攻击与防范实验

实验十二缓冲区溢出攻击与防范实验1.实验目的通过实验掌握缓冲区溢出的原理;通过使用缓冲区溢出攻击软件模拟入侵远程主机;理解缓冲区溢出危险性;理解防范和避免缓冲区溢出攻击的措施。

2.预备知识2.1缓冲区溢出攻击简介缓冲区溢出攻击之所以成为一种常见的攻击手段,其原因在于缓冲区溢出漏洞太普通了,并且易于实现。

而且,缓冲区溢出所以成为远程攻击的主要手段,其原因在于缓冲区溢出漏洞给予了攻击者所想要的一切:植入并且执行攻击代码。

被植入的攻击代码以一定的权限运行有缓冲区溢出漏洞的程序,从而得到被攻击主机的控制权。

下面简单介绍缓冲区溢出的基本原理和预防办法。

(1)缓冲区概念缓冲区是内存中存放数据的地方。

在程序试图将数据放到机器内存中的某一个位置的时候,因为没有足够的空间就会发生缓冲区溢出。

而人为的溢出则是有一定企图的,攻击者写一个超过缓冲区长度的字符串,植入到缓冲区,然后再向一个有限空间的缓冲区中植入超长的字符串,这时可能会出现两个结果:一是过长的字符串覆盖了相邻的存储单元,引起程序运行失败,严重的可导致系统崩溃;另一个结果就是利用这种漏洞可以执行任意指令,甚至可以取得系统root特级权限。

缓冲区是程序运行的时候机器内存中的一个连续块,它保存了给定类型的数据,随着动态分配变量会出现问题。

大多时为了不占用太多的内存,一个有动态分配变量的程序在程序运行时才决定给它们分配多少内存。

如果程序在动态分配缓冲区放入超长的数据,它就会溢出了。

一个缓冲区溢出程序使用这个溢出的数据将汇编语言代码放到机器的内存里,通常是产生root权限的地方。

仅仅单个的缓冲区溢出并不是问题的根本所在。

但如果溢出送到能够以root权限运行命令的区域,一旦运行这些命令,那可就等于把机器拱手相让了。

造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。

缓冲区是一块用于存放数据的临时内存空间,它的长度事先已经被程序或操作系统定义好。

缓冲区类似于一个杯子,写入的数据类似于倒入的水。

实验七-缓冲区溢出攻击实验

实验七-缓冲区溢出攻击实验

实验七缓冲区溢出攻击实验
一、实验目的
1、理解缓冲区溢出攻击的原理;
2、获取目标主机的最高权限,利用远程桌面登录。

二、实验环境
1、实验环境:Windows 2000/2003的目标主机,通过虚拟机加载;
2、软件工具:metasploit frmamework。

三、实验步骤
1.攻击目标
Windows 2000主机
2.攻击开始
步骤1:使用nmap对目标进行端口扫描
步骤2:目标开启135端口,可利用MS03-026漏洞进行入侵,用到的工具是metasploit frmamework。

安装完毕后选择console模式
(1)查询MS03-026漏洞所对应的溢出模块
(2)进入此模块
(3)设置有效载荷为执行特定命令,配置相关参数
(4)执行攻击命令,成功进入目标系统
(5)添加系统账号并把它加入系统管理员组中
四、实验小结:
缓冲区溢出,是针对程序设计缺陷,向程序输入缓冲区写入使之溢出的内容(通常是超过缓冲区能保存的最大数据量的数据),从而破坏程序运行、趁著中断之际并获取程序乃至
系统的控制权。

缓冲区溢出攻击的目的在于扰乱具有某些特权运行的程序的功能,这样可以使得攻击者取得程序的控制权,如果该程序具有足够的权限,那么整个主机就被控制了。

一般而言,攻击者攻击root程序,然后执行类似“exec(sh)”的执行代码来获得root权限的shell。

通过该实验我了解到通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,造成程序崩溃或使程序转而执行其它指令,以达到攻击的目的。

造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。

溢出的实验报告

溢出的实验报告

一、实验目的1. 了解溢出的概念和产生原因;2. 掌握溢出攻击的原理和常见类型;3. 熟悉溢出漏洞的检测和防护方法。

二、实验环境1. 操作系统:Windows 10;2. 编程语言:C/C++;3. 编译器:MinGW;4. 虚拟机:VMware Workstation。

三、实验原理溢出(Buffer Overflow)是指当向缓冲区写入数据时,超出了缓冲区的实际容量,导致数据覆盖到相邻内存区域的现象。

当溢出的数据覆盖到关键数据结构或返回地址时,攻击者可以利用这一漏洞执行任意代码,从而实现攻击。

四、实验步骤1. 编写溢出程序```c#include <stdio.h>#include <stdlib.h>void vulnerable_function(char str) {char buffer[10];strcpy(buffer, str);printf("You said: %s\n", buffer);}int main() {char input[100];printf("Enter your name: ");scanf("%99s", input);vulnerable_function(input);return 0;}```2. 生成可执行文件在MinGW环境下,使用gcc编译器编译程序:```bashgcc -o overflow overflow.c```3. 运行溢出程序运行编译好的程序,输入超过缓冲区大小的字符串:```bash./overflow```4. 分析溢出过程当输入超过缓冲区大小的字符串时,溢出的数据会覆盖到相邻内存区域,包括返回地址。

攻击者可以通过构造特定的字符串,修改返回地址,使其指向恶意代码的地址,从而实现攻击。

5. 编写漏洞检测代码```c#include <stdio.h>#include <stdlib.h>void vulnerable_function(char str) {char buffer[10];strcpy(buffer, str);printf("You said: %s\n", buffer);}int main() {char input[100];printf("Enter your name: ");scanf("%99s", input);vulnerable_function(input);printf("Return address: %p\n", &input);return 0;}```运行漏洞检测代码,观察返回地址是否被覆盖:```bash./overflow```6. 防护溢出漏洞1) 使用安全的字符串处理函数,如strncpy、strncat等,限制写入数据的长度;2) 使用栈保护技术,如堆栈标记、堆栈守卫等,防止溢出数据覆盖返回地址;3) 使用地址空间布局随机化(ASLR)技术,增加攻击难度;4) 使用编译器提供的栈保护选项,如gcc的-fstack-protector选项。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三:缓冲区溢出实验
缓冲区溢出实验
实验目的:
(1)学会用反汇编调试程序,观察变量、堆栈数据变化情况
(2)清楚缓冲区溢出原理
(3)进一步思考如何防范基于缓冲区溢出的攻击
硬件环境:
处理器:Intel(R) Core(TM)i3-2310M CPU @2.10GHZ 2.10GHZ
内存:4.00G
软件环境:
Windows 7
Visual Studio C++6.0
实验步骤:
首先观察老师给的代码,初步了解了代码执行之后会发生的结果,以及所造成的后果。

代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
char passwd[8] = {"2e4rfe"};
char yourpasswd[8] = {""};
again:
puts("please input passwd?");
gets(yourpasswd);
if (strcmp(yourpasswd, passwd)==0)
goto ok;
puts("passwd error");
goto again;
exit(-2);
ok:
puts("correct!");
// do work you want
getchar();
return 0;
}
然后利用VC++6.0进行反汇编调试:
1.初始状态如下:
红色区域为堆栈内容
2.password存入堆栈(红色区域)和yourpassword也存入堆栈(红色区域)位于password前面
3此时接着往下运行,我们可以发现yourpassword是8位的,我们写入了10位数据qqqqqqqqqq,将产生溢出,qq将溢出,因为password位于yourpassword之后,所以yourpassword溢出的2位数据qq将覆盖password的前两位2e。

“.”表示读取到此。

下图可以看出此时qq溢出:
5第二次循环时因为“.”表示读取到此处,所以password因为yourpassword的溢出变为qq此时我们再输入密码qq将匹配正确
密码正确如下:。

相关文档
最新文档