信息对抗技术-溢出攻击.ppt

信息对抗技术-溢出攻击.ppt

ID:48242858

大小:626.00 KB

页数:188页

时间:2020-01-18

信息对抗技术-溢出攻击.ppt_第1页
信息对抗技术-溢出攻击.ppt_第2页
信息对抗技术-溢出攻击.ppt_第3页
信息对抗技术-溢出攻击.ppt_第4页
信息对抗技术-溢出攻击.ppt_第5页
资源描述:

《信息对抗技术-溢出攻击.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、信息对抗技术韩宏缓冲区溢出攻击什么是缓冲区溢出攻击网络中占60%-70%的攻击是缓冲区溢出攻击。攻击的目的是什么?获得系统的控制权限。而不是破坏。基本攻击方式通过向有漏洞的程序发送特别数据,使得程序将这段特别数据当作代码并跳转过去运行。而这段被当作的代码,可以和攻击者交互,从而实现了对被攻击机器的控制。如何控制别人的程序流向怎样使程序跳转到指定的代码呢?有以下三种方式:jmp地址;call地址;ret;如果要想程序跳转到攻击者给定的内存执行,需要有对应的代码执行这个跳转过程。比如jmp0x1234;就将程序跳转到0x1234地址运行。

2、但被攻击的程序中不可能存在这样的语句跳转到攻击者指定的位置。同理,call0x1234这种也不行。只剩下ret了。请回忆前边反汇编基础部分讲解的ret指令的用处和工作过程这个ret进行了如下操作:将返回地址从栈顶中弹出,并放入EIP寄存器,使得程序下一步执行EIP指向的地址。也就是说,ret将使程序执行栈顶保存的那个地址

3、-------参数2--------------

4、0x0012ff84

5、-------参数1--------------

6、0x0012ff80

7、-------返回地址---------

8、0x0012ff7c

9、----

10、--保留原来的ebp---

11、0x0012ff78

12、----局部变量1----------

13、0x0012ff74

14、-----局部变量2---------

15、0x0012ff70如果能修改栈上保存的返回地址的值,将它指向我们希望跳转的位置,不就可以了吗我们来尝试修改ret地址procedureFunc1();beginend;procedureTForm1.Button1Click(Sender:TObject);beginFunc1();end;procedureFunc1();beginend;的end处打断点,然后执行到此处。到esp

16、指向的内存0x12f3e4,该地址指向的是0x44dbb5地址,即返回地址好,我们修改这个地址中存的地址修改后,执行一个单步动作,执行ret指令,代码窗口指向了0x11111地址正常的代码中不可能有这样的修改语句存在,但在一些特定的条件下,可能修改那个保存的地址。请回忆C语言中的strcpy,以及str作为前缀的函数有什么限制条件。Str系列的函数要求空字符结尾,也就是0这个byte值结尾。Strcpy会分析从源地址开始的每一个字节看是否是0,如果是表示源字符串已经结束,否则会一直拷贝下去。它并不关心目标地址是否有足够的空间保存被复制

17、的内容。以下是一个strcpy的示意实现strcpy(char*des,char*src){char*cursrc,curdes;cursrc=src;curdes=des;while(*cursrc!=0){*des=*src;src++;des++;}}该实现中没有也无法判定目标地址指向的内存是否有足够的空间存放被复制的内容。以下是strcpy的一般用法{Charbuf[100];...Strcpy(buf,src);...{请注意,这个buf的大小,是程序员估计出来的比正常使用还多的空间。如果src的字符串长度大于buf,str

18、cpy并不会在100处停止复制,而是会继续往后复制。那这时拷贝的内容就会依次覆盖后边的内容DesBuf复制前的目标和源地址的状况SrcBufDesBufSrcBuf复制后的目标和源地址的状况如果前图中多余的复制的那部分蓝色的部分正好存放的是ret的返回地址,那么我们就可以改变程序的流向了!!!!而这只需要在给strcpy的源地址的内容(0字符前的部分)长度大于目标缓存预先分配的地址。这里一个关键是,需要保存ret地址的内存紧接在目标缓存的后面,可能吗?我们需要分析反汇编基础中对一个函数调用过程的分析了。首先,函数的局部变量和函数的返回

19、地址都是保存在栈上,因此他们具备了相互比邻的可能。后图中,returnaddress保存在比局部变量sum高8个字节的地方,很容易被strcpy拷贝的过长部分覆盖下面是一段c语言函数intAdd(intx,inty){intsum;sum=x+y;returnsum;}Voidmain(){intz;z=Add(1,2);printf("z=%d",z);}21ReturnaddressPush2;Push1;Call….ebpPushebp局部变量存储区intsum高地址低地址栈的布局请观察一下代码和其对应的栈布局Voidfun

20、c(char*src){charbuf[10];strcpy(buf,src);}…srcReturnaddressebp高地址低地址这部分是哪个变量请观察一下代码和其对应的栈布局Voidfunc(char*src){c

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。