格式化字符串攻击..docx

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
格式化字符串攻击.

《信息系统应用安全》论文选题:格式化漏洞原理及攻击专业: 班级: 学号: 姓名: 指导老师: 时间:2012年4月28日目 录一、选题背景3二、实验原理32.1什么是格式化字符串攻击32.2经典的格式化字符串漏洞32.3 C99标准定义的格式化字符串函数32.4系统栈的工作原理42.5攻击原理5三、实验设计53.1实验目的53.2实验设计思路53.3实验环境63.4实验所用到的工具63.4.1 microsoft visual c++ 6.063.4.2 Immunity Debugger6四、实验验证74.1系统栈的具体工作74.2 printf函数漏洞104.2.1用printf函数读取内存数据104.2.2用printf向指定内存写数据114.2.3用printf向指定内存写入指定数据114.3攻击之一—利用漏洞植入shellcode124.3.1编写shellcode124.3.2编写程序134.3.3获得shellcode存放的内存地址144.3.4找到存放函数返回地址的内存地址154.3.5将存放返回地址单元内容修改为shellcode地址154.3.6实验结果164.4攻击之二—使缓冲区溢出16五、结论或总结17一、经验17二、教训18六、参考文献18一、选题背景格式化函数是一系列ANSI C 函数 (如printf 函数),它们可以接受可变数量的参数,其中一个称为格式化字符串参数 (format string )。格式化函数对输入的格式化字符串参数进行解释,根据该参数的要求使用其它的输入参数,形成输出的字符串。格式化字符串函数几乎被用在所有的C程序中,用来输出、打印错误信息或处理字符串。正因为这些函数使用的广泛性,它们的漏洞对系统安全有重要的影响。攻击者利用格式化字符串漏洞可以获得系统的控制权,这一点对于高可信软件和服务器软件来说是致命的。(引用《格式化字符串漏洞研究》)二、实验原理2.1什么是格式化字符串攻击格式化字符串漏洞同其他许多安全漏洞一样是由于程序员的懒惰造成的。也许有个程序员正在编写代码,他的任务是:打印输出一个字符串或者把这个串拷贝到某缓冲区内。为了节约时间和提高效率,他可能将代码:printf(%s, str);省略为printf(str); printf的第一个参数无论如何都会输出的!实际上他传入的一个他想要逐字打印的字符串被printf函数解释为一个格式化字符串(format string)。函数在其中寻找特殊的格式字符比如%d。如果碰到格式字符,一个变量的参数值就从堆栈中取出。这样程序员在不知不觉中打开了一个安全漏洞,可以让攻击者控制程序的执行。很明显,攻击者至少可以通过打印出堆栈中的这些值来偷看程序的内存。但是有些事情就不那么明显了,这个简单的错误允许向运行中程序的内存里写入任意值,这样修改函数返回地址也就不是件困难的事了。2.2经典的格式化字符串漏洞表一—常见的格式化漏洞2.3 C99标准定义的格式化字符串函数 ①int fprintf(FILE *stream, const char *format, . . . ) 根据format提供的控制信息将输出内容输出到stream; ②int printf(const char *format, . . . ) 根据format提供的控制信息将输出内容输出到stdout; ③int sprintf(char *str, const char *format, . . . ) 根据format提供的控制信息将输出内容输出到s,以0 结尾; ④int snprintf(char *str, size_t size, const char *format, . . . ) 将不大于size个字节的内容输出到str (包括结尾的0 ); ⑤vfprintf(FILE *stream, const char *format, va_list arg) ⑥vprintf(const char *format, va_list arg) ⑦vsprintf(char *str, const char *format, va_list arg) ⑧vsnprintf(char *str, size_t size, const char *format, va_list arg) 以上4个函数用固定长度的arg参数取代了原来的变长参数表,其它功能分别与fprintf, printf, sprintf, snprintf相同。这些函数的工作机制大体相同,我研究针对的是printf函数的漏洞分析和攻击。2.4系统栈的工作原理在windows平台下,高级语言写出的程序经过编译链接,最终会变成PE文件,当PE文件被装载运行后,就成了所谓的进

文档评论(0)

jiulama + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档