课件网络信息全.pptVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
课件网络信息全

缓冲区溢出攻击 (4)保护堆栈 加入函数建立和销毁代码。前者在函数返回地址后增加一些附加字节,返回时要检查这些字节有无被改动。 使堆栈不可执行——非执行缓冲区技术,使入侵者无法利用缓冲区溢出漏洞。 * 为什么不写出不受影响的代码来? 编程的问题都可以在开发阶段防止,事实上,并没有这么简单 有些开发人员没有意识到问题的存在 有些开发人员不愿意使用边界检查,因为会影响效率和性能 另一方面,许多遗留下来的代码还很多 在开发过程中,尽量使用带有边界检查的函数版本,或者自己进行越界检查 * 一些典型的buffer overflows漏洞 NetMeeting buffer overflow 文章“The Tao of Windows Buffer Overflow”描述了漏洞发掘过程 Outlook 当客户接收邮件的时候,畸形的邮件头信息会导致buffer overflows,然后就可以执行恶意代码或者拒绝服务 Linuxconf Linuxconf允许远程通过Web对系统进行管理,当收到的http头中包含过量的信息时,会产生缓冲区溢出 ToolTalk ToolTalk是一个RPC服务,攻击者连接到ToolTalk端口,然后发送包含恶意代码的命令,可导致缓冲区溢出 ……(大量的服务器应用程序都包含buffer overflows漏洞) * 格式化字符串攻击 格式化字符串攻击也称为格式化字符串漏洞,同其他许多安全漏洞一样是由于程序员的疏漏造成的。不过,这种疏漏来自程序员使用格式化字符串函数的不严谨。 * 格式化字符串攻击 1. 格式化字符串函数族 ANSI C定义了一系列的格式化字符串函数,如 printf——输出到一个stdout流。 fprintf——输出到一个文件流。 sprintf——输出到字符串。 snprintf——输出到字符串并检查长度。 vprintf——从va_arg结构体输出到一个stdout流。 vfprintf——从va_arg结构体输出到一个文件流。 vsprintf——从va_arg结构体输出到一个字符串。 vsnprintf——从va_arg结构体输出到一个字符串并检查长度。 基于这些函数的复杂函数和非标准函数,包括setproctitle、syslog、err*、verr*、warm、*vwarm等。 这些函数有一个共同的特点,就是都要使用一个格式化字符串。例如对于大家熟悉的prontf函数,它的前一个参数,就是格式化字符串。 * 格式化字符串攻击 2. 格式化字符串漏洞 为了说明对格式化字符串使用不当而产生的格式化字符串漏洞,请先看下面的程序。 例 2 #include stdio.h int main() { char *name; gets(s); printf(s); } * abcde abcde%08x,%08x,%08x 000002e2,0000ffe4,0000011d 格式化字符串攻击 下面是该函数的两次运行结果 * 格式化字符串攻击 也就是说,当输入“abcde”时,输出仍然是“abcde”。而当输入“%08x,%08x,%08x”时,输出的却是“000002e2,0000fe4,0000011d”。这就是格式化字符串漏洞所造成的问题。因为,在printf函数中,s被解释成了格式化字符串。当调用该函数时,首先会解析格式化字符串,一次取一个字符进行分析:如果字符不是“%”,就将其原样输出;若字符是“%”,则其后面的字符就要按照格式化参数进行解析。当输入“abcde”时,由于没有包含“%”,所以每个字符都被原样输出了。而当输入“%08x,%08x,%08x”时,就要将每个“%”后面的“x”都解释为一个十六进制的数据项,但函数没有这样3个数据项。于是,就将堆栈中从当前堆栈指针向堆栈底部方向的3个地址的内容按十六进制输出出来,这就是“000002e2,0000fe4,0000011d”。 这就给人们一个启发:当格式化字符串中包含有许多“%”时,就会有机会访问到一个非法地址。 * 格式化字符串攻击 3. 格式化字符串攻击的几种形式 (1)查看内存堆栈指针开始的一些地址的内容 由例子可知,使用类似于 printf (“%08x,%08x,%08x”); 的语句,可以输出当前堆栈指针向栈底方向的一些地址的内容,甚至可以是超过栈底之外的内存地址的内容。 (2)查看内存任何地址的内容 所查看的内存地址内容,也可以从任何一个地址开始的内存内容。例如语句 printf (“\x20\02\x85\x08_%08x,%08x,%08x”); 将会从地址0始,查看连续3个地址的内容。 * 格式化字符串攻击 (3)修改内存任何地址的内容 格式化字符串函数还可

文档评论(0)

181****9125 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档