搜档网
当前位置:搜档网 › 网络攻击与防范实验报告-缓冲区溢出

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

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

网络攻击与防范实验报告

姓名:____王小北___ 学号:___ 201411111111111111 _ 所在班级:

实验名称:缓冲区溢出实验日期:2014年11月7日指导老师:实验评分:

验收评语:

实验目的:

1.掌握缓冲区溢出的原理

2.掌握常用的缓冲区溢出方法

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

4.掌握防范和避免缓冲区溢出攻击的方法

实验工具:

溢出对象:war-ftp 1.65 ( 自己分析)

调试工具:Debugging Tools for Windows 中(网上有下载)

实验环境:虚拟机vmware workstation 10 Windows XP sp1

高级语言编程:Socket编程VS2010

实验步骤:

原理:war-ftp 1.65版本的一个漏洞,即向服务器发送超过480字节的用户名可以触发漏洞(即使用命令USER longString\r\n),溢出之后ESP内容包含了longString中的部分内容。

过程:攻击者向war-ftp发送多余480字节的用户名,触发war-ftpd的漏洞,产生缓冲区溢出,此时war-ftpd将出现错误。接下来通过PatterntTool工具构造的一串不重复字符串(1000个不同字符串,存入test.txt中),通过其时eip的内容,利用patternoffset.pl工具来确定RET的位置。

在网上寻找一段具有攻击效果的Shellcode,作为所发送的war-ftpd用户名。其最主要是通过上边所确定的RET的位置,将“JMP ESP”指令的地址(0x7ffa4512)传递到RET 位置,最终目的是将指令指针转移到esp的位置。同时我们可以通过确定esp的位置,从而在构造字符串时直接将shellcode代码加在在用户名上,使其能直接被放入esp所指的位置,即达到将其放入esp指向的缓冲区的目的。

通过发送构造的用户名,导致war-ftpd发生缓冲区溢出。Shellcode的功能是建立一个新用户hack,可以用过net user命令来查看用户,最后发现攻击成功。

1.启动war-ftp 1.65

2.打开Debugging Tools for Windows,将war-ftp 1.65挂起

3.利用PatterntTool工具生成一个1000个不同字符的txt文档

4.将war-ftp 1.65连接到主机

5.输入用户名,密码,用户名为之前产生的1000个不同字符的txt文档,密码随便输入

6.在Debugging Tools for Windows输入g继续运行,出现eip的内容等,之后查看esp的

内容

7.根据eip,esp的内容在1000个字符中的位置去定位,发现其相对位置分别为489和493

8.在网上找到一段能建立一个hack用户的shellcode代码:

9.编写Socket程序,注意代码填充的位置

连接目标主机(connect)

构造溢出字符串(使用命令USER longString\r\n,溢出之后,ESP中的内容包含了longString)

向目标主机发送溢出字符串(send)

关闭连接

10.攻击前后结果

实验结论:

通过这次实验了解了缓冲溢出的危害,war-ftp 1.65存在用户名溢出的漏洞,EIP的位置相对于缓冲区的起始位置是485,ESP的位置相对于缓冲区的起始位置是493,漏洞存在的原因是因为war-ftp并不检查发送过来的用户名的长度。解决方法是war-ftp每次对建立连接的用户检查发送过来的用户名长度,如果过长,就截取其中一段,这样就可以修补漏洞。

收获与体会:

通过这次实验又熟悉了Socket编程,并了解的一些命令(如telnet等),但也出现了几个需要注意的问题:

war-ftp软件无法打开,经过在群上和同学交流,明白必须先删除文件夹内FtpDaemon.dat “user ”是5个字符,别忘了空格也算一个,结尾要加上\r\n

若利用sizeof计算字符串长度别忘了减一

缓冲区溢出攻击实验

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 32 int 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 corruption volatile int local = uniqueval(); val = getbuf(); // Check for corrupted stack if (local != uniqueval()) { printf("Sabotaged!: the stack has been corrupted\n"); } else if (val == cookie) { printf("Boom!: getbuf returned 0x%x\n", val); validate(3);

网络攻击与防御 第一次实验

网络工程专业 实验报告 课程:网络攻击与防御题目:远程FTP密码破解学生姓名:张爽 学号:2008122083 班级:信息安全083班 实验时间:2011-6-12 地点:6302 评分:_____________

第一部分:嗅探 一、实验目的 ●掌握远程破解ftp帐号口令破解技术的基本原理、常用方法及相关工具 ●掌握如何有效防范类似攻击的方法和措施 二、实验内容 1.安装工具Cain V2.5。 2.点击进入,选择sniffer下的hosts页。 3.根据嗅探得到的FTP账号和密码,用FTP客户端登录,找到一个ip.txt 文件,获得靶机P2的IP地址。 三、实验仪器(涉及到的服务器及其配置、设计软件名称、版本等) 测试服务器P1的配置为:操作系统Windows2000 Professional SP4或者windows XP sp2,安装了ftp客户端CuteFTP;靶机上的虚拟机P3的配置为:Windows2000 server SP4,安装了serv-u,提供ftp服务;靶机服务器P2的配置为:windows xp sp2。 注意: a. 选择安装路径,在此直接默认安装到C:\Program Files\Cain目录; b. 继续安装winpcap,单击Install按钮; c. 直接默认安装即可。安装完成后会要求重启系统。

四、实验步骤(实验关键操作步骤,关键指令注释等) 1.安装工具Cain V2.5。 进入安装界面: 2.点击进入,选择sniffer下的hosts页,如下图所示: 然后点击上方的“sniffer”和“add to list”按钮,列出当前交换环境中的所

SEED信息安全实验系列:缓冲区溢出漏洞实验

缓冲区溢出漏洞实验 一、实验描述 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写。 二、实验准备 本次实验为了方便观察汇编语句,我们需要在32位环境下作操作,因此实验之前需要做一些准备。 1、输入命令安装一些用于编译32位C程序的东西: sudo apt-get update sudo apt-get install lib32z1 libc6-dev-i386 sudo apt-get install lib32readline-gplv2-dev 2、输入命令“linux32”进入32位linux环境。此时你会发现,命令行用起来没那么爽了,比如不能tab补全了,所以输入“/bin/bash”使用bash: 三、实验步骤 3.1 初始设置

Ubuntu和其他一些Linux系统中,使用地址空间随机化来随机堆(heap)和栈(stack)的初始地址,这使得猜测准确的内存地址变得十分困难,而猜测内存地址是缓冲区溢出攻击的关键。因此本次实验中,我们使用以下命令关闭这一功能: sudo sysctl -w kernel.randomize_va_space=0 此外,为了进一步防范缓冲区溢出攻击及其它利用shell程序的攻击,许多shell程序在被调用时自动放弃它们的特权。因此,即使你能欺骗一个Set-UID程序调用一个shell,也不能在这个shell中保持root权限,这个防护措施在/bin/bash中实现。 linux系统中,/bin/sh实际是指向/bin/bash或/bin/dash的一个符号链接。为了重现这一防护措施被实现之前的情形,我们使用另一个shell程序(zsh)代替/bin/bash。下面的指令描述了如何设置zsh程序: sudo su cd /bin rm sh ln -s zsh sh exit 3.2 shellcode 一般情况下,缓冲区溢出会造成程序崩溃,在程序中,溢出的数据覆盖了返回地址。而如果覆盖返回地址的数据是另一个地址,那么程序就会跳转到该地址,如果该地址存放的是一段精心设计的代码用于实现其他功能,这段代码就是shellcode。 观察以下代码: #include int main( ) { char *name[2]; name[0] = ‘‘/bin/sh’’; name[1] = NULL; execve(name[0], name, NULL); } 本次实验的shellcode,就是刚才代码的汇编版本: \x31\xc0\x50\x68"//sh"\x68"/bin"\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80 3.3 漏洞程序 把以下代码保存为“stack.c”文件,保存到/tmp 目录下。代码如下: /* stack.c */ /* This program has a buffer overflow vulnerability. */ /* Our task is to exploit this vulnerability */ #include #include #include int bof(char *str) { char buffer[12]; /* The following statement has a buffer overflow problem */strcpy(buffer, str); return 1;

实验三+缓冲区溢出

服务器安全攻防技术实验报告 实验名称:缓冲区溢出 班级:姓名:学号: 实验地点:日期:2020/3/11 一、实验目的: 1.通过实践掌握缓冲区溢出的原理;掌握常用的缓冲区溢出方法;理解缓冲区溢出的危害性;掌握防范和避免缓冲区溢出攻击的方法。 二、基本技能实验内容、要求和环境: 实验环境: 1.PC机一台,安装有Windows 2003 server; 2.Vmware软件一套; 3.Codeblockse软件。 实验内容: 1、简单陈述缓冲区溢出的原理。 2、(1)陈述程序如何溢出?(2)为什么执行why_here方法?(3)画出栈结构 #include #include void why_here(void) //这个函数没有任何地方调用过 { printf("why u here !n\n"); printf("you are trapped here\n"); system("pause"); _exit(0); } int main(int argc,char * argv[]) { int buffer[1]; buffer[4] = why_here; system("pause"); return 0; } 三、基本技能实验结果与分析: 1、简单陈述缓冲区溢出的原理。 答案:缓冲区溢出是指当前计算机向缓冲区内填充数据位数超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上,破坏程序的堆栈,使程序转而执行其他指令,以达到攻击的目的。

2、(1)陈述程序如何溢出? 运行程序,返回结果如下: 分析:由代码我们可以看出,在我们的main()函数中并没有调用过why_here()函数,只是定义了一个buffer[1]的数组,但是在我们定义了数组之后,我们同时为buffer[4]赋值为why_here()函数的返回值。我们知道buffer数组并没有buffer[4]这个位置,此时我们为它赋值就会造成该buffer[4]中原来返回地址被覆盖,转去执行why_here(),就会输出以上的语句了。 进入debug模式,查看Selected frame,从中我们可以获取的信息有:EIP为0x401384,在执行main函数之后被保存为0x4010fd,,编码为C语言,涉及到的实参有argc=1, argv=0x1e2e28,局部变量存放在栈的0x60ff08的位置;而目前的frame指针所指示的位置为0x60ff10; 保存的寄存器为EBP存放在0x60ff08,EIP保存在0x60ff0c。 debugging windows的watchs窗口中函数中涉及的参数和变量所对应的值。

缓冲区溢出实验报告

华中科技大学计算机学院《信息系统应用安全》实验报告 实验名称缓冲区溢出实验 团队成员: 教师评语:

一.实验环境 ?操作系统:Windows XP SP3 ?编译平台:Visual C++ 6.0 ?调试环境:OllyDbg 二.实验目的 1.掌握缓冲区溢出的原理; 2.掌握缓冲区溢出漏洞的利用技巧; 3.理解缓冲区溢出漏洞的防范措施。 三.实验内容及步骤 1.缓冲区溢出漏洞产生的的基本原理和攻击方法 ?缓冲区溢出模拟程序 程序源代码如下: 运行该程序产生访问异常:

由于拷贝字符串时产生缓冲区溢出,用“ABCD”字符串的值覆盖了原来EIP的值,所以main函数返回时EIP指向44434241,引发访问异常。 运行命令窗口的shellcode shellcode测试代码如下: #include "string.h" #include "stdio.h" #include 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的地址 "\xff\xd0" "\x55\x8b\xec\x33\xff\x57\x57\x57\xc6\x45\xf4\x73" "\xc6\x45\xf5\x74\xc6\x45\xf6\x61\xc6\x45\xf7\x72" "\xc6\x45\xf8\x74\xc6\x45\xf9\x20\xc6\x45\xfa\x63"

实验4 缓冲区溢出攻击实验

深圳大学实验报告课程名称:计算机系统(2) 实验项目名称:缓冲区溢出攻击实验 学院:计算机与软件学院 专业:计算机科学与技术 指导教师:罗秋明 报告人: 实验时间:2016年5月8日 实验报告提交时间:2016年5月22日 教务处制

一、实验目标: 1.理解程序函数调用中参数传递机制; 2.掌握缓冲区溢出攻击方法; 3.进一步熟练掌握GDB调试工具和objdump反汇编工具。 二、实验环境: 1.计算机(Intel CPU) 2.Linux64位操作系统(CentOs) 3.GDB调试工具 4.objdump反汇编工具 三、实验内容 本实验设计为一个黑客利用缓冲区溢出技术进行攻击的游戏。我们仅给黑客(同学)提供一个二进制可执行文件bufbomb和部分函数的C代码,不提供每个关卡的源代码。程序运行中有3个关卡,每个关卡需要用户输入正确的缓冲区内容,否则无法通过管卡! 要求同学查看各关卡的要求,运用GDB调试工具和objdump反汇编工具,通过分析汇编代码和相应的栈帧结构,通过缓冲区溢出办法在执行了getbuf()函数返回时作攻击,使之返回到各关卡要求的指定函数中。第一关只需要返回到指定函数,第二关不仅返回到指定函数还需要为该指定函数准备好参数,最后一关要求在返回到指定函数之前执行一段汇编代码完成全局变量的修改。 实验代码bufbomb和相关工具(sendstring/makecookie)的更详细内容请参考“实验四缓冲区溢出攻击实验.p ptx”。 本实验要求解决关卡1、2、3,给出实验思路,通过截图把实验过程和结果写在实验报告上。

四、实验步骤和结果 步骤1 返回到smoke() 1.1 解题思路 首先弄清楚getbuf()的栈帧结构,知道存放字符数组buf地址的单元和存放getbuf()返回地址的单元之间相差多少个字节。假设两者之间相差x个字节。 然后找到smoke()函数的入口地址。该值为4个字节。 再构造exploit.txt,前x个字节随意填,然后再填入4个字节的smoke()地址,注意是小端方式存储。 这样操作完成,就可以得到预期结果了。 1.2 解题过程 首先进入GDB对bufbomb进行调试,先在调用getbuf()处设置断点,然后运行。 注:此时的输入文件exploit_raw.txt文件中是随便填的,并不影响我调用smoke(),因为我会在gdb中使用set指令直接修改getbuf()的返回地址。 此时查看运行程序的调用栈帧结构,如下所示: 上图说明当getbuf()执行完后,会返回到test()函数中(返回到地址0x08048db2,我们要修改存放这个值的地址单元,改为smoke的入口地址值)。

实验4:拒绝式服务攻击与防范

实验4:拒绝式服务攻击与防范 【实验目的】 熟悉SYNflood的攻击原理与过程,及IPv4所存在的固有缺陷。 【实验准备】 准备xdos.exe拒绝服务工具。 【注意事项】 实验后将DoS黑客软件从机器彻底删除,避免恶意应用影响网络运行。 【实验步骤】 一、拒绝式服务攻击 拒绝服务攻击的英文意思是Denial of Service,简称DoS。这种攻击行动使网站服务器充斥大量要求回复的信息,消耗网络带宽或系统资源,导致网络或系统不胜负荷直至瘫痪而停止提供正常的网络服务。 SYN-Flood是当前最常见的一种Dos攻击方式,它利用了TCP协议的缺陷进行攻击

用黑客软件xdos.exe对目标计算机进行拒绝服务攻击并运行测试。(1)计算机a登录到windows 2000,打开sniffer pro,在sniffer pro中配置好捕捉从任意 主机发送给本机的ip数据包,并启动捕捉进程。

(2)在计算机B上登录Windows 2000,打开命令提示窗口,运行xdos.exe,命令的格式:‖xdos<目标主机IP>端口号–t 线程数[-s <插入随机IP>’]‖(也可以用―xdos?‖命令查看使用方法)。输入命令:xdos 192.168.19.42 80 –t 200 –s* 确定即可进行攻击,192.168.19.42 是计 算机A的地址。

(3)在A端可以看到电脑的处理速度明显下降,甚至瘫痪死机,在Sniffer Pro的Traffic Map 中看到最大伪造IP的主机请求与A的电脑建立连接。 (4)B停止攻击后,A的电脑恢复快速响应。打开捕捉的数据包,可以看到有大量伪造IP地址的主机请求与A的电脑连接的数据包,且都是只请求不应答。以至于A的电脑保持有大量的半开连接。运行速度下降直至瘫痪死机,拒绝为合法的请求服务。 二、拒绝式服务防范 几乎所有的主机平台都有抵御DoS的设置,常见的有以下几种。(1)关闭不必要的服务。 Windows XP系统步骤如下:

缓冲区溢出攻击实验报告

缓冲区溢出攻击实验报告 班级:10网工三班学生姓名:谢昊天学号:46 实验目的和要求: 1、掌握缓冲区溢出的原理; 2、了解缓冲区溢出常见的攻击方法和攻击工具; 实验内容与分析设计: 1、利用RPC漏洞建立超级用户利用工具文件检测RPC漏洞,利用工具软件对进行攻击。攻击的结果将在对方计算机上建立一个具有管理员权限的用户,并终止了对方的RPC服务。 2、利用IIS溢出进行攻击利用软件Snake IIS溢出工具可以让对方的IIS溢出,还可以捆绑执行的命令和在对方计算机上开辟端口。 3、利用WebDav远程溢出使用工具软件和远程溢出。 实验步骤与调试过程: 1.RPC漏洞出。首先调用RPC(Remote Procedure Call)。当系统启动的时候,自动加载RPC服务。可以在服务列表中看到系统的RPC服务。利用RPC漏洞建立超级用户。首先,把文件拷贝到C盘跟目录下,检查地址段到。点击开始>运行>在运行中输入cmd>确定。进入DOs模式、在C盘根目录下输入 -,回车。检查漏洞。 2.检查缓冲区溢出漏洞。利用工具软件对进行攻击。在进入DOC模式、在C盘根目录下输入 ,回车。 3,利用软件Snake IIS溢出工具可以让对方的IIS溢出。进入IIS溢出工具软件的主界面. PORT:80 监听端口为813 单击IDQ溢出。出现攻击成功地提示对话框。 4.利用工具软件连接到该端口。进入DOs模式,在C盘根目录下输入 -vv 813 回车。5.监听本地端口(1)先利用命令监听本地的813端口。进入DOs模式,在C盘根目录下输入nc -l -p 813回车。(2)这个窗口就这样一直保留,启动工具软件snake,本地的IP 地址是,要攻击的计算机的IP地址是,选择溢出选项中的第一项,设置IP为本地IP地址,端口是813.点击按钮“IDQ溢出”。(3)查看nc命令的DOS框,在该界面下,已经执行了设置的DOS命令。将对方计算机的C盘根目录列出来,进入DOC模式,在C盘根目录下输入nc -l -p 813回车。 6.利用WebDav远程溢出使用工具软件和远程溢出。(1)在DOS命令行下执行,进入DOC 模式,在C盘根目录下输入回车。(2)程序入侵对方的计算机进入DOC模式,在C盘根目录下输入nc -vv 7788 回车。 实验结果: 1.成功加载RPC服务。可以在服务列表中看到系统的RPC服务,见结果图。 2.成功利用工具软件对进行攻击。 3.成功利用IIS溢出进行攻击利用软件Snake IIS溢出工具让对方的IIS溢出,从而捆绑

山东大学信息安全实验报告

山东大学软件学院 信息安全导论课程实验报告 学号:201300301385 姓名:周强班级: 2013级八班 实验题目:缓冲区溢出实验 实验学时:日期: 实验目的: (1)了解缓冲区溢出的原理 (2)利用缓冲区溢出现象构造攻击场景 (3)进一步思考如何防范基于缓冲区溢出的攻击 硬件环境: 软件环境: WindowsXP操作系统 VS2008 实验步骤与内容: (1)了解缓冲区溢出的原理 缓冲区溢出简单来说就是计算机对接收的输入数据没有进行有效的检测(理情况下是程序检测数据长度并不允许输入超过缓冲区长度的字符),向缓冲区内填充数据时超过了缓冲区本身的容量,而导致数据溢出到被分配空间之外的内存空间,使得溢出的数据覆盖了其他内存空间的数据。 看一个代码实例,程序如下: void function(char *str) { char buffer[16]; strcpy(buffer,str); } 上面的strcpy()将直接把str中的内容copy到buffer中。这样只要str的长度大于16,就会造成buffer的溢出,使程序运行出错。

(2)利用缓冲区溢出现象构造攻击场景 首先打开Microsoft Visual C++,新建工程和cpp文件,复制实验指导书的代码进行编译连接: 单击运行按钮,然后第1次输入“zhouqianga”,第2次输入2个“ga”,即可看到输出“correct”。

按F10开始进行逐步调试: 当第一次执行gets()函数之前,内存情况如下图所示

在最新的版本中gets被认为是不安全的,gets从标准输入设备读字符串函数。可以无限读取,不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。现在都被要求改为get_s。来防止溢出。 如下图所示。 (3)学习例子程序2:数据被执行 在xp系统下,直接运行Exploit-1.1.exe,如下图所示:

华科_计算机系统实验报告

课程实验报告课程名称:计算机系统基础 专业班级: 学号: 姓名: 指导教师: 报告日期:年月日 计算机科学与技术学院

目录 实验1: (1) 实验2: (7) 实验3: (24) 实验总结 (34)

实验1:数据表示 1.1 实验概述 实验目的:更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。 实验目标:加深对数据二进制编码表示的了解。 实验要求:使用有限类型和数量的运算操作实现一组给定功能的函数。 实验语言:c。 实验环境:linux 1.2 实验内容 需要完成bits.c中下列函数功能,具体分为三大类:位操作、补码运算和浮点数操作。 1)位操作 表1列出了bits.c中一组操作和测试位组的函数。其中,“级别”栏指出各函数的难度等级(对应于该函数的实验分值),“功能”栏给出函数应实现的输出(即功能),“约束条件”栏指出你的函数实现必须满足的编码规则(具体请查看bits.c中相应函数注释),“最多操作符数量”指出你的函数实现中允许使用的操作符的最大数量。 你也可参考tests.c中对应的测试函数来了解所需实现的功能,但是注意这些测试函数并不满足目标函数必须遵循的编码约束条件,只能用做关于目标函数正确行为的参考。 表1 位操作题目列表

2)补码运算 表2列出了bits.c中一组使用整数的补码表示的函数。可参考bits.c中注释说明和tests.c中对应的测试函数了解其更多具体信息。 表2 补码运算题目列表 3)浮点数操作 表3列出了bits.c中一组浮点数二进制表示的操作函数。可参考bits.c中注释说明和tests.c中对应的测试函数了解其更多具体信息。注意float_abs的输入参数和返回结果(以及float_f2i函数的输入参数)均为unsigned int类型,但应作为单精度浮点数解释其32 bit二进制表示对应的值。 表3 浮点数操作题目列表

网络攻击与防范实验报告

网络攻击与防御技术实验报告 姓名:____刘冰__ ___ 学号:__ 所在班级: 实验名称:网络数据包的捕获与分析实验日期:_2007_年_10 _月_15 _日指导老师:实验评分: 验收评语: 参与人员: 实验目的: 本实验通过研究Winpcap中常用的库函数的使用方式来实现了一个小型的网络数据包抓包器,并通过对原始包文的分析来展示当前网络的运行状况。 实验内容: 1.实现对网络基本数据包的捕获 2.分析捕获到的数据包的详细信息 实验环境: 1.WpdPack_4_0_1支持库 2.VC++6.0开发环境 3.Windows操作系统 实验设计: 系统在设计过程中按照MVC的设计模式,整体分为三层。第一层为Control层即控制层,这里为简化设计,将Control层分为两个部分,一部分为网络报文输入,另一部分为用户输入;第二层是Model层即模型层;第三层为View层即显示层。 系统的整体运行过程为:从Control层得到数据,交到Model层进行处理,将处理完的结果交View层进行显示。Control层主要用于网络数据包的捕获以及获得用户的输入;Model层主要用于分析数据包,处理用户的输入;View层主要用于对处理后的结果进行显示。

详细过程: 程序在执行过程中有两个核心的工作,一是调用Winpcap函数库实现下层抓包。二是对抓到的包文进行分析。下面分别列出两个核心过程的基本算法与相关的实现代码。 抓包算法: 第一:初始化Winpcap开发库 第二:获得当前的网卡列表,同时要求用户指定要操作的网卡 第三:获得当前的过滤规则,可为空 第四:调用库函数,pcap_loop(),同时并指定其回调函数,其中其回调函数为数据包分析过程。 对应的相应核心代码为: I f((pCap=pcap_open_live(getDevice()->name,65536,1,1000,strErrorBuf))==NULL) { return -1; } If(pcap_compile(pCap, &fcode, filter, 1, NetMask) < 0) { return -1; } if(pcap_setfilter(pCap, &fcode)<0) { return -1; } do{ pcap_loop(pCap,1,pcap_handle,NULL); }while(nFlag); 分析算法: 第一:得到数据包,先将其转存到内存里,以备以后再用。 第二:分析当前的数据包,分析过程如下: 1.数据包的前14个字节(Byte)代表数据链路层的报文头,其报文格式是前6Byte 为目的MAC地址,随后的6个Byte为源Mac地址,最后的2Byte代表上层 协议类型这个数据很重要,是我们分析上层协议的依据。 2.根据1所分析到的协议类型进行类似1的迭代分析。这样就可以得到各层中 的报文头信息和数据信息。 第三:结束本次分析。 分析算法部分实现代码: m_pktHeaders.Add(pHeader); m_pktDatas.Add(pData); CFramePacket *pFramePacket = new CFramePacket(pData,14); if(pFramePacket->GetType() == 0x0800) { CIPPacket ipPacket(pData+14,pHeader->len-14); if(ipPacket.GetProtocol() == "UDP") { CUDPPacket*pUDPPacket = new CUDPPacket(ipPacket.GetTData(),ipPacket.GetDataLength()); } else if(ipPacket.GetProtocol() == "TCP") { CTCPPacket *pTCPPacket = new

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

实验六报告

如图2所示的Windows 2000系统(虚拟机环境下)的计算机。显然这2台计算机处于同一个网段中,可以相互通讯,win10系统用作攻击机,下面将在此系统上运行Metasploit进行渗透测试,而Windows 2000系统都是本次任务中需要进行渗透入侵的靶机,保持安装后的默认状态,没有打额外的系统安全补丁。 图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= 。 namap扫描的结果里报告发现MS08-067:DISABLED。这是在暗示我们或许能够对这台主机进行渗透攻击,然后我们在Metasloit里面找到此漏洞的攻击模块,并尝试攻击目标机器。MS08-067是一个对操作系统版本依赖非常高的漏洞,所以在这里,我们只自动payload指定一下目标就可以确保触发正确的溢出代码。 图4漏洞扫描结果 3利用MS08_067漏洞渗透入侵 MS08-067漏洞的全称为“Windows Server服务RPC请求缓冲区溢出漏洞”,如果用户在受影响

网络攻击与防御实验报告全解

西安电子科技大学 本科生实验报告 姓名:王东林 学院:计算机科学院 专业:信息安全 班级:13级本科班 实验课程名称:网络攻击与防御 实验日期:2015年10月15日 指导教师及职称:金涛 实验成绩: 开课时间: 2016-2017 学年第一学期

实验题目网络攻击与防御小组合作否 姓名王东林班级13级信息安全本科班学号201383030115 一、实验目的 1.了解网络连通测试的方法和工作原理。 2.掌握ping命令的用法。 3.了解网络扫描技术的基本原理。 4.掌握xscan工具的使用方法和各项功能。 5.通过使用xscan工具,对网络中的主机安全漏洞信息等进行探测。 6.掌握针对网络扫描技术的防御方法。 7.了解路由的概念和工作原理。 8.掌握探测路由的工具的使用方法和各项功能,如tracert等。 9.通过使用tracert工具,对网络中的路由信息等进行探测,学会排查网络故 障。 10.了解网络扫描技术的基本原理。 11.掌握nmap工具的使用方法和各项功能。 12.通过使用nmap工具,对网络中的主机信息等进行探测。 13.掌握针对网络扫描技术的防御方法。 14.掌握Linux帐号口令破解技术的基本原理、常用方法及相关工具 15.掌握如何有效防范类似攻击的方法和措施 16.掌握帐号口令破解技术的基本原理、常用方法及相关工具 17.掌握如何有效防范类似攻击的方法和措施 18.掌握帐号口令破解技术的基本原理、常用方法及相关工具 19.掌握如何有效防范类似攻击的方法和措施

二.实验环境 1、实验环境 1)本实验需要用到靶机服务器,实验网络环境如图1所示。 靶机服务器配置为Windows2000 Server,安装了IIS服务组件,并允许FTP匿名登录。由于未打任何补丁,存在各种网络安全漏洞。在靶机服务器上安装有虚拟机。该虚拟机同样是Windows2000 Professional系统,但进行了主机加固。做好了安全防范措施,因此几乎不存在安全漏洞。 2)学生首先在实验主机上利用Xscan扫描靶机服务器P3上的漏洞,扫描结束发现大量漏洞之后用相同方法扫描靶机服务器上的虚拟机P4。由于该靶机服务器上的虚拟机是安装了各种补丁和进行了主机加固的,因此几乎没有漏洞。在对比明显的实验结果中可见,做好安全防护措施的靶机服务器虚拟机上的漏洞比未做任何安全措施的靶机服务器少了很多,从而加强学生的网络安全意识。实验网络拓扑如图1。 三. 实验内容与步棸 Ping命令是一种TCP/IP实用工具,在DOS和UNIX系统下都有此命令。它将您的计算机与目标服务器间传输一个数据包,再要求对方返回一个同样大小的数据包来确定两台网络机器是否连接相通。 1.在命令提示符窗口中输入:ping。了解该命令的详细参数说明。

缓冲区溢出攻击详细讲解

缓冲区溢出攻击详细讲解 缓冲区溢出(Buffer Overflow)是计算机安全领域既经典而又古老的话题。随着计算机系统安全性的加强,传统的缓冲区溢出攻击方式可能变得不再奏效,相应的介绍缓冲区溢出原理的资料也变得“大众化”起来。其中看雪的《0day安全:软件漏洞分析技术》一书将缓冲区溢出攻击的原理阐述得简洁明了。本文参考该书对缓冲区溢出原理的讲解,并结合实际的代码实例进行验证。不过即便如此,完成一个简单的溢出代码也需要解决很多书中无法涉及的问题,尤其是面对较新的具有安全特性的编译器——比如MS的Visual Studio2010。接下来,我们结合具体代码,按照对缓冲区溢出原理的循序渐进地理解方式去挖掘缓冲区溢出背后的底层机制。 一、代码 <=> 数据 顾名思义,缓冲区溢出的含义是为缓冲区提供了多于其存储容量的数据,就像往杯子里倒入了过量的水一样。通常情况下,缓冲区溢出的数据只会破坏程序数据,造成意外终止。但是如果有人精心构造溢出数据的容,那么就有可能获得系统的控制权!如果说用户(也可能是黑客)提供了水——缓冲区溢出攻击的数据,那么系统提供了溢出的容器——缓冲区。 缓冲区在系统中的表现形式是多样的,高级语言定义的变量、数组、结构体等在运行时可以说都是保存在缓冲区的,因此所谓缓冲区可以更抽象地理解为一段可读写的存区域,缓冲区攻击的最终目的就是希望系统能执行这块可读写存中已经被蓄意设定好的恶意代码。按照冯·诺依曼存储程序原理,程序代码是作为二进制数据存储在存的,同样程序的数据也在存中,因此直接从存的二进制形式上是无法区分哪些是数据哪些是代码的,这也为缓冲区溢出攻击提供了可能。

网络攻击与防范实验报告

网络攻击与防范实验报告 姓名:_ ___ 学号:__ 所在班级: 实验名称:缓冲区溢出实验实验日期:2014 年11 月9 日指导老师:张玉清实验评分: 验收评语: 实验目的: 1、掌握缓冲区溢出的原理 2、掌握常用的缓冲区溢出方法 3、理解缓冲区溢出的危害性 4、掌握防范和避免缓冲区溢出攻击的方法 实验环境: 主机系统:Windows8 x64位 虚拟机系统:Windows XP(SP3)(IP:192.168.137.128) 溢出对象:war-ftpd 1.65 调试工具:CDB(Debugging Tools for Windows); 开发环境:Visual Studio 2013 开发语言:C语言 缓冲区溢出原理: 在metasploit中搜索war-ftp可以发现war-ftpd1.65在windows下有以下漏洞username overflow,也就是在用户使用user username这个指令时,如果username 过长就会发生缓冲区溢出。 计算机在调用函数function(arg1,…,argm)时,函数栈的布局如图1所示,首先将函数的实参从右往左依次压栈,即argm,…,arg1。然后将函数返回地址RET压栈。这时EBP 指向当前函数的基地址,ESP指向栈顶,将此时的EBP压栈,然后ESP的值赋给EBP,这样EBP就指向新的函数栈的基地址。调用函数后,再将局部变量依次压栈,这时ESP始终指向栈顶。 另外还有一个EIP寄存器,EIP中存放的是下一个要执行的指令的地址,程序崩溃时EIP的值就是RET。通过构造特殊的字符串,即两两都不相同的字符串,我们可以根据EIP 的值定位RET的位置。 知道了RET的位置以后,我们只要在RET这个位置放上我们想要执行的跳转指令就可以实现跳转。为了方便我们找一个系统中现成的指令jmp esp来实现跳转。jmp esp指令在内存中的通用地址是0x7ffa4512,可以通过CDB的U 7ffa4512来确定该地址中存放的是否为jmp esp。 jmp esp将EIP指向了esp指向的位置,我们用定位RET的办法同样定位ESP指向的位置,然后用shellcode替换这块字符串,这样计算机就会执行shellcode,从而实现攻击。 当然,我们还可以用其他的指令,如jmp esi,同样得到jmp esi指令在系统内存中的地址,以及esi指向的内存,我们就可以执行shellcode。也可以使用多次跳转。

缓冲区溢出漏洞

缓冲区溢出漏洞 IBM软件研究院 缓冲区溢出漏洞,是一种在软件中最容易发生的漏洞。它发生的原理是,由于软件在处理用户数据时使用了不限边界的拷贝,导致程序内部一些关键的数据被覆盖,引发了严重的安全问题。 缓冲区指的是操作系统中用来保存临时数据的空间,一般分为栈和堆两种缓冲区类型。缓冲区溢出漏洞是一种非常普通、非常危险的漏洞,在各种操作系统、应用软件,甚至是Web应用程序中广泛存在。 利用缓冲区溢出攻击,可以导致程序运行失败、系统当机、重新启动等后果。更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。 在当前网络与操作系统安全中,50%以上的攻击都是来自于缓冲区溢出漏洞。而缓冲区溢出中,最为危险的是栈溢出,因为入侵者可以利用栈溢出,在函数返回时改变返回程序的地址,让其跳转到任意地址,带来的一种是程序崩溃导致拒绝服务,另外一种就是跳转并且执行一段恶意代码,然后为所欲为。 这里要澄清一个概念,很多人把缓冲区溢出称之为堆栈溢出漏洞,其实是错误的,堆溢出和栈溢出是两个不同的概念,都属于缓冲区溢出。 平时听说的缓冲区溢出大部分都是属于栈溢出。由于程序在实现的过程中,往往会自定义一些内存空间来负责接受或者存储数据,这些被直接定义的空间大小是有限的,因此当程序将过多的数据不经检查而直接放入这些空间中时,就会发生栈溢出。 栈溢出最为直接的危害是,这些被过量放进内存空间的数据会将函数的返回地址覆盖。“返回地址”的概念来自于CPU处理指令的结构设计。如果程序现在准备调用一个函数,CPU首先会将执行完这个函数后将要执行的指令地址存储到栈空间中,然后CPU开始执行函数,执行完毕,CPUCPU取出前面保存的指令地址,然后接着执行。这个“返回地址”是保存在栈空间中的,而程序一般定义的空间也是在栈中进行分配的,这就给了我们覆盖这个“返回地址”的机会。 栈是一个先进后出的空间,而堆则恰恰相反,是一个先进先出的空间。缓冲区溢出就是把这些空间装满后还继续往里面装。 但是对于一个软件来讲,危害可能不仅仅如此,用一个表来表示这个过程在栈溢出发生的时候,软件运行时内存中的情况。 正常: Lower Addresses buf2 buf1 var3 saved %EBP return address function()'s arguments saved %EBP

DNS溢出实验

DNS 溢出实验 应用场景 随着计算机网络的普及和发展,人们利用网络可以方便快捷地进行各种信息处理,例如,网上办公、电子商务、分布式数据处理等。但网络也存在不容忽视的问题,例如,用户的数据被篡改、合法用户被冒充、通信被中断等。面临着大量的网络入侵事件,就必须要求在一个开放式的计算机网络物理环境中构造一个封闭的逻辑环境来保障敏感信息和保密数据不受到攻击。为此迫切需要对网络安全作分类研究,把各种网络安全问题清楚有序地组织起来,从而构建一个合理、安全、高效的网络防御体系。 网络安全保护的核心是如何在网络环境下保证数据本身的秘密性、完整性与操作的正确性、合法性与不可否认性。而网络攻击的目的正相反,其立足于以各种方式通过网络破坏数据的秘密性和完整性或进行某些非法操作。 网络及其应用的广泛发展,安全威胁呈现出攻击的种类、方法和总体数量越来越多、破坏性和系统恢复难度也越来越大。这就要求我们对攻击方法有更进一步的研究;对安全策略有更完善的发展,建立起一个全面的、可靠的、高效的安全体系。 DNS 的设计被发现可攻击的漏洞,攻击者可透过伪装DNS 主要服务器的方式,引导使用者进入恶意网页,以钓鱼方式取得信息,或者植入恶意程序。 MS06‐041:DNS 解析中的漏洞可能允许远程代码执行。 Microsoft Windows 是微软发布的非常流行的操作系统。 Microsoft Windows DNS 服务器的RPC 接口在处理畸形请求时存在栈溢出漏洞,远程攻击者可能利用此漏洞获取服务器的管理权限。 如果远程攻击者能够向有漏洞的系统发送特制的RPC 报文的话,就可以触发这个溢出, 导致以DNS 服务的安全环境执行任意指令(默认为Local?SYSTEM )。? 实验目标: ● 了解程序调入内存中的分段情况 ● 掌握常见缓冲区溢出攻击工具使用方法。 ● 掌握缓冲区溢出攻击防御方法。 实验环境: VM Client 172.16.5.10/16 VM Server 172.16.5.20/16

网络安全缓冲区溢出技术实验报告

网络实验报告 一、实验目的及要求 1、目的 了解和掌握Win32平台缓冲区溢出原理; 学会使用Win32平台Shellcode技术。 2、内容及要求 以windows 2000 server虚拟机为测试对象,修改server.cpp和exploit.c,利用shellcode port bind给出的shellcode,远程获得CMD,并启动目标机器的ftp服务。 二、仪器用具 计算机(分别装有windows server 2000和windows 7操作系统),本实验使用的是虚拟机Wmware8.0在同一台电脑上面安装两个操作系统。 三、实验方法与步骤 在实验开始前,首先编写可能产生缓冲区溢出的程序(server.cpp)和测试程序(exploit.c)。 在server.cpp中能够产生缓冲区溢出的程序片段如下: void overflow(char * s,int size) { char s1[50]; printf("receive %d bytes",size); s[size]=0; strcpy(s1,s); } 这两个程序的完整代码见附件。 由于本实验是在虚拟机环境下测试的,所以在开始实验前,分别记下两个系统的IP地址:运行server程序的系统IP地址为:192.168.209.131 运行exploit程序的系统IP地址为:192.168.209.1 实验的过程如下: 1.在windows2000系统下分别编译server.cpp和exploit.c程序,详细过程如下: C:\test>cl server.cpp C:\test>cl exploit.c 编译完成后分别产生exploit.exe、exploit.obj、server.exe、server.obj 截图如下图1所示:

相关主题