欢迎来到天天文库
浏览记录
ID:9999439
大小:158.50 KB
页数:0页
时间:2018-05-20
《网络 缓冲区溢出 强敏 2010117201》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、网络安全上机作业学号:2010117201姓名:强敏专业:计算机科学与技术二班院系:信息学院一实验题目基于缓冲区溢出的攻击二实验目的1.掌握缓冲区溢出的原理;2.掌握缓冲区溢出漏洞的利用技巧;3.理解缓冲区溢出漏洞的防范措施。三实验环境操作系统:Windows7编译平台:VisualC++6.0调试环境:OllyDbg四实验原理缓冲区是内存中存放数据的地方。在程序试图将数据放到机器内存中的某一个位置的时候,因为没有足够的空间就会发生缓冲区溢出。而人为的溢出则是有一定企图的,攻击者写一个超过缓冲区长度的字符串,植入到缓冲区,然后再向一个有限空间的缓冲区中植入超长的字符串,这时可能会出现
2、两个结果:一是过长的字符串覆盖了相邻的存储单元,引起程序运行失败,严重的可导致系统崩溃;另一个结果就是利用这种漏洞可以执行任意指令,甚至可以取得系统root特级权限。缓冲区是程序运行的时候机器内存中的一个连续块,它保存了给定类型的数据,随着动态分配变量会出现问题。大多时为了不占用太多的内存,一个有动态分配变量的程序在程序运行时才决定给它们分配多少内存。如果程序在动态分配缓冲区放入超长的数据,它就会溢出了。一个缓冲区溢出程序使用这个溢出的数据将汇编语言代码放到机器的内存里,通常是产生root权限的地方。仅仅单个的缓冲区溢出并不是问题的根本所在。但如果溢出送到能够以root权限运行命令的
3、区域,一旦运行这些命令,那可就等于把机器拱手相让了五关键技术分析解题过程33.1Level0:Candle33.2Level1:Sparkler43.3Level2:Firecracker53.4Level3:Dynamite53.5Level4:Nitroglycerin6进入bufbomb所在的文件目录下,输入“objdump-dbufbomb”命令获得程序的反汇编代码。由于我进行实验的操作系统为Ubuntu9.10,GCC版本为4.4.1。这个版本的GCC对堆栈进行了保护。所以需要设置一些东西才能进行该实验:使用“sudoapt-getinstallexecstack”下载该工
4、具。安装完成后。进入bufbomb所在的目录下,输入“execstack–sbufbomb”。使用“sudo-i”进入root权限。输入“echo0>/proc/sys/kernel/randomize_va_space”。注意:该步骤在每次重新开机后都要进行设置。getbuf()的反汇编代码如下:08049160:8049160:55push%ebp8049161:89e5mov%esp,%ebp8049163:83ec18sub$0x18,%esp8049166:8d45f4lea-0xc(%ebp),%eax8049169:890424mov%eax,(%esp
5、)804916c:e8bffdffffcall8048f308049171:b801000000mov$0x1,%eax8049176:c9leave8049177:c3ret8049178:90nop8049179:8db42600000000lea0x0(%esi,%eiz,1),%esi由“lea-0xc(%ebp),%eax”和“mov%eax,(%esp)”两句可知,getbuf()将%ebp栈基址往下12个字节的地址作为参数,调用Gets函数。Gets函数将以这个地址为起点,向上存储字符。返回地址%ebp::buf由上图可得,只要输入的字符串将getbuf()
6、的返回地址覆盖为smoke()函数第一条语句的地址,在函数返回时就能进入并执行smoke()函数。在反汇编代码中查到smoke()函数第一条语句的地址为0x08048ef0。在level0.txt文件中输入“30303030303030303030303030303030f08e0408”。注意字符串在内存中存储顺序为从一个内存单元的低字节向高字节。使用sendstring生成对应上述输入的字符串的文件level0-raw.txt。输入“./bufbomb-t50703790447、oke函数。Level0通过。在getbuf()函数中,堆栈的情况如下:返回地址%ebp::buf进入fizz函数后执行的汇编语句为:8048e80:55push%ebp8048e81:89e5mov%esp,%ebp8048e83:83ec18sub$0x18,%esp8048e86:8b4508mov0x8(%ebp),%eax第一个参数位置new%ebp%ebp::buffizz()函数将第一个参数与cookie进行比较。由上图可得,只要输入字符串将
7、oke函数。Level0通过。在getbuf()函数中,堆栈的情况如下:返回地址%ebp::buf进入fizz函数后执行的汇编语句为:8048e80:55push%ebp8048e81:89e5mov%esp,%ebp8048e83:83ec18sub$0x18,%esp8048e86:8b4508mov0x8(%ebp),%eax第一个参数位置new%ebp%ebp::buffizz()函数将第一个参数与cookie进行比较。由上图可得,只要输入字符串将
此文档下载收益归作者所有