网络攻防溢出漏洞实验报告

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

网络攻击与防御实验报告

姓名:项中村

班级:信安0803

学号:U200814066

指导老师:付才

日期:2011.7.6

一、实验目的

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

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

3.掌握CCProxy的溢出方法;

4.利用溢出漏洞设计Shellcode。

二、实验环境

操作系统:Windows XP SP2

破解软件:OllyICE v1.10

编译环境:VC++6.0

三、实验过程及截图

1.验证漏洞: a.打开CCProxy;

b.命令行输入telnet 127.0.0.1登录ccproxy;

c.发送一条含超长字符串的ping命令。

我使用了大量的0123456789的循环字符串,如下图发生溢出错误,证明CCProxy存在溢出漏洞

2.定位溢出点:由图可知溢出点在0x35343332处,可以知道溢出位置个位为3,然后逐步缩主机名字符串的长度,最后结果是在文件名长度为1013时恰好溢出,并且EIP的地址被1013-1016位覆盖。

3.漏洞分析:同学通过搜索得知在CCProxy的消息传输机制中有一个十分重要的函数:WSAsend(),在他的指点下,我通过查找WSAsend()函数得到如下图所示结果:

找到WSAsend()函数对应的的指令地址,然后在相应位置设置断点,F9运行程序,发送超长ping命令给ccproxy,再进入OllyDbg进行单步调试。当程序运行到call 00426B20这条指令时,发生了如下图所示溢出:

继续在地址0x0041735C处设断点,用OllyDbg重新加载ccproxy程序,再次运行到call 00426B20时,按F7进入函数。继续单步执行,可以发现程序在执行指令call 00430300时发生了溢出,具体情况如下图所示:

在0x00426B40处设断点,重新跟踪到call 00430300处,然后按F7进入函数,当运行

到retn 0c这条指令时,esp为0x014066F0,如下图:

F8单步执行程序之后马上发生溢出。观察0x014066F0是在哪条指令后被覆盖,就可以分析出造成溢出的原因了。

用OllyDbg重新载入ccproxy ,用客户端重新发送超长的ping命令,进入call 00430300单步执行,观察堆栈区:

继续单步执行,发现执行完指令call 00440057后,堆栈地址0x014066F0被覆盖为0x35343332,:

数值0x35343332用来覆盖EIP的,由此可判断CCProxy的缓冲区溢出正是调用call 00440057造成的,进一步跟踪,可发现溢出是由于call 00440057的子函数call 00445923的一段拷贝指令造成的。

4.Shellcode:由于学期末时间紧张,直到考试前夕仍未完成这部分的实验,在此深深感到自己的能力有限。

在课上已经听老师详细讲述过相关知识,自己也去网上搜索过不少信息,虽然有大致的

实验思路,但是在付诸于实际的过程中却困难重重,最后只能无奈放弃。

我的想法是编写一段非常简单的弹窗程序:

#include

int main()

{

LoadLibrary("msvcrt.dll");

system("");

return 0;

}

然后反汇编得到二进制代码,按步骤获得所要的Shellcode,然后在栈上构造字符串以覆盖EIP,通过JMP ESP跳转到该程序,但是尝试了很久都无法成功,苦于时间不足,不能深入寻找问题,无奈之下只能先放弃该部分实验。

四、实验中的问题及心得

这次实验的第一部分的大部分工作是在实验室进行的,除了一开始找到软件后的开始时有点无头绪,在老师和同学的帮助下大致有了实验思路后就比较顺利了。因为进度慢于一同做实验的另外一位同学,所以在中途漏洞分析时直接通过他得知了导致漏洞的函数,然后所需要做的就是设置断点后一步步执行,因为已经在多次实验中使用过该软件,所以在也算是有不少经验。

不过之后的Shellcode编写对我而言就非常难了,毫无经验再加上期末时间比较紧张,复习压力大,一拖再拖还是没能完成,不过在之后的时间内我会继续努力争取完成。

相关文档
最新文档