实验四缓冲区溢出攻击技术.doc
文本预览下载声明
实验单元四. 缓冲区溢出攻击技术
一、实验目的和要求
掌握缓冲区溢出的原理;
掌握缓冲区溢出漏洞的利用技巧;
理解缓冲区溢出漏洞的防范措施。
二、实验内容和原理
缓冲区溢出的原理:通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的根本原因是程序中缺少错误检测。
当然,随便往缓冲区中填东西造成它溢出一般只会出现“分段错误”( ),而不能达到攻击的目的。最常见的手段是通过制造缓冲区溢出使程序运行一个用户 ,再通过 执行其它命令。如果该程序属于 ,攻击者就获得了一个有 权限的 ,可以对系统进行任意操作。 缓冲区溢出攻击之所以成为一种常见安全攻击手段其原因在于缓冲区溢出漏洞太普遍了,并且易于实现。而且,缓冲区溢出成为远程攻击的主要手段其原因在于缓冲区溢出漏洞给予了攻击者他所想要的一切:植入并且执行攻击代码。被植入的攻击代码以一定的权限运行有缓冲区溢出漏洞的程序,从而得到被攻击主机的控制权。 缓冲区溢出漏洞和攻击有很多种形式,而相应的防范手段也随者攻击方法的不同而不同。
三、实验项目
缓冲区溢出产生窗口;
改写函数返回地址;
的编写;
的植入。
四、实验所需软硬件
)仪器设备条件:及其网络环境;
)物质条件: 、、、 编译器等,;
)相关文献资料:课件及网上收集的资料。
五、操作方法与实验步骤
缓冲区溢出漏洞产生的的基本原理和攻击方法
缓冲区溢出模拟程序
程序源代码如下:
[];
[];
()
{
[];
(, )内存拷贝,如果长度超过,则出现缓冲区溢出
( [])
{
(\\[]);
}
(\);
;
}
运行该程序产生访问异常:
由于拷贝字符串时产生缓冲区溢出,用“”字符串的值覆盖了原来的值,所以函数返回时指向,引发访问异常。
运行命令窗口的
测试代码如下:
[]
\\\ \\\ \\\\ 覆盖
\\\\ 覆盖, 地址
\\\\\\\\\\\ \\\\\\\\\\\ \\\\\\\\\\\ \\\\\\\\\\\ \\\\ \\\\ 的地址
\ \\\\\\\\\\\ \\\\\\\\\\\ \\\\\\\\\\\ \\\\\\\\\\\ \\\\ 的地址
\\;
()
{
[];
(, );
( [])
{
(\\[]);
}
(\);
;
}
测试代码运行效果如下:
由于把函数的返回地址替换成了 的地址,函数返回的时候就会执行我们的代码。该,运行命令窗口。
缓冲区溢出漏洞分析和利用
溢出点定位
溢出点定位源代码
(*)();
()
{
[];
[];
;
[];
;
;
;
;
[] ;
[] ;
()加载当前目录的
() (, )获得的调用地址
填充参数
(())先清零内存
(,())必须使用结束符,填充
[];
[];
[];
[];
(())先清零内存
(,())必须使用结束符,填充
()()调用
();
;
}
程序运行效果如下:
可以看到错误访问地址为,即为‘’的编码,所以成功得定位了溢出点。
漏洞利用
漏洞利用的源代码如下:
(*)();
[]
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
()
{
[];
[];
;
[];
;
;
;
[] ;
[] ;
();
() (, );
(());
(());
(());
(,());
();
[] 的地址
[];
[];
[];
()();
();
}
漏洞利用的效果如下:
可以看到成功的利用该漏洞,弹出了一个对话框。
溢出漏洞分析与利用
溢出点定位
.构造
中包含个,这个
显示全部