0day缓冲区溢出实验报告分解.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
网络安全缓冲区溢出实践班级:信安一班学号:2013308880017姓名:吴双可1 栈溢出1.1 修改邻接值首先写一个密码验证程序,正确密码为1234567在ollydbg中进行调试在验证密码时输入8888888提示错误。堆栈情况:可以看出,输入的password储存在0012FB7C处authenticated变量存储在0012FF7C处。由于88888881234567,所以值为1。如果输入溢出,情况是这样的:输入8888888wsk,发现sk溢出到了authenticated变量处而我们的目标是使authenticated被覆盖为0,因此,输入8个字符,字符串最后的’\0\即null会覆盖authenticated使它成为0。不过并不是所有的8个字符都可以。如果输入的字符串小于1234567,那么authenticated是-1的补码即FFFFFFFF,这时只修改最后的一位还是不能使authenticated成如这时authenticated值为=====================================================================1.2 修改函数返回地址改为从文件中读取密码超出buffer范围的字符会依次淹没authenticated、EBP和返回地址。观察反汇编:此为验证函数,取出EAX中的返回值与0比较,如果相等则跳所以将password文件修改如下:可以覆盖返回地址,使程序跳入验证正确的分支2 代码植入通过栈溢出让程序执行输入数据中植入的代码在输入数据里包含自己想要执行的代码,然后通过返回地址让程序跳转到系统栈里执行。向password.txt文件里植入二进制的机器码。调用windows的API函数将buffer长度扩展为44,先将password文件修改为11个4321来进行实验,验证通过后堆栈情况如图:buffer起始还是0012FB7C,authenticated也还是0012FF7C,后面依次为EBP和返回地址。接下来,我们需要给password.txt植入机器代码。因为我们在汇编语言中调用MessageboxA,所以需要获得这个函数的入口地址在dependencywaker中有:可得MessageboxA在内存中的入口地址为0x77D507EA机器代码汇编指令注释33DBXOR EBX,EBX压入以NULL结尾的”overflow”字符串。53PUSH EBX68 666C6F77PUSH 776F6C6668 6F766572PUSH 7265766F8BC4MOV EAX,ESPEAX存放字符串指针53PUSH EBX4个参数依次入栈,分别为0,overflow,overflow,050PUSH EAX50 PUSH EAX53PUSH EBXB8EA07D577MOV EAX, 0x77D507EA调用MessageBoxAFFD0CALL EAX将上述汇编指令对应的机器代码逐字写入password.txt,一共26个字节。再填充0x90即nop指令至第52字节(第45-52字节为authenticated和EBP),然后在53-56字节填入buffer的起始0x0012FB7C。如图所示:执行injection,出现overflow对话框溢出攻击发生的根源,其实是计算机内存中,数据和代码没有明确区分的。当一块内存中的数据被执行时,它就是代码。所以我们需要DEP,它的基本原理是将数据所在内存页标识为不可执行,这样就不能够利用溢出攻击来执行不应该被执行的地方,如果尝试这样做,CPU就会抛出异常,而不是去执行恶意指令。DEP针对溢出攻击的本源,完善了内存管理机制,它将内存页设置为不可执行状态,来阻止堆栈中shellcode的执行。我们将上述实验环境中的DEP打开noexcute不可执行状态,即开启DEP然后调试刚才的代码,发现在跳转至堆栈段中的shellcode时出现问题:虽然跳转到堆栈段中取指令,但是无法执行。这就是DEP的功劳了。但是它并不能彻底阻止缓冲区溢出攻击。3 挑战DEP3.1 利用Ret2Libc挑战DEP即利用内存中可执行的指令代替shellcode中的指令3.1.1 跳转到NtSetInformationProcess函数关闭DEP既然DEP是让我们无法执行被保护的数据段中的内容,那么我们只需要在内存中找到一段在内存中找到一段可执行的用于关闭DEP的指令,跳转到那里,关闭DEP后再跳转到shellcode即可。首先要在内存中找到关闭DEP的指令由于要关闭DEP需要验证AL为1,所以首先要找到类似mov al,1 retn的指令:但是在跳入关闭DEP的指令前,我们还需要修正

文档评论(0)

119220 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档