首页 格式化字符串攻击

格式化字符串攻击

举报
开通vip

格式化字符串攻击《信息系统应用安全》论文 选题:格式化漏洞原理及攻击 专业: 班级: 学号: 姓名: 指导老师: 时间:2012年4月28日 目录 一、选题背景    3 二、实验原理    3 2.1什么是格式化字符串攻击    3 2.2经典的格式化字符串漏洞    3 2.3 C99标准定义的格式化字符串函数    3 2.4系统栈的工作原理    4 2.5攻击原理    5 三、实验设计    5 3.1实验目的    5 3.2实验设计思路    5 3.3实验环境    6 3.4实验所用到的工具    6 3.4...

格式化字符串攻击
《信息系统应用安全》论文 选 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 :格式化漏洞原理及攻击 专业: 班级: 学号: 姓名: 指导老师: 时间:2012年4月28日 目录 一、选题背景    3 二、实验原理    3 2.1什么是格式化字符串攻击    3 2.2经典的格式化字符串漏洞    3 2.3 C99标准定义的格式化字符串函数    3 2.4系统栈的工作原理    4 2.5攻击原理    5 三、实验 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计     5 3.1实验目的    5 3.2实验设计思路    5 3.3实验环境    6 3.4实验所用到的工具    6 3.4.1 microsoft visual c++ 6.0    6 3.4.2 Immunity Debugger    6 四、实验验证    7 4.1系统栈的具体工作    7 4.2printf函数漏洞    10 4.2.1用printf函数读取内存数据    10 4.2.2用printf向指定内存写数据    11 4.2.3用printf向指定内存写入指定数据    11 4.3攻击之一—利用漏洞植入shellcode    12 4.3.1编写shellcode    12 4.3.2编写程序    13 4.3.3获得shellcode存放的内存地址    14 4.3.4找到存放函数返回地址的内存地址    15 4.3.5将存放返回地址单元内容修改为shellcode地址    15 4.3.6实验结果    16 4.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函数的漏洞 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 和攻击。 2.4系统栈的工作原理 在windows平台下,高级语言写出的程序经过编译链接,最终会变成PE文件,当PE文件被装载运行后,就成了所谓的进程。 进程使用的内存可以按照功能分为下面4个部分: 1.代码段:存储着执行程序的二进制机器代码,计算机会到这个区域取指令并执行。 2.数据段:用于存储全局变量、静态变量等数据。 3.堆区:进程可以在通过 malloc 等函数动态地在堆区申请一定大小的内存,并在用完之后释放内存。 由程序员申请和释放,若程序结束而有些存储单元还未释放,则一般由操作系统释放。 4.堆栈区:用于动态地存储函数之间的调用关系,以保证被调用的函数在返回时恢复到母函数中继续执行。函数调用时的参数和局部变量都保存在堆栈中。由系统自动分配。 ESP:栈指针寄存器,总是指向系统栈的栈顶 EBP:基址寄存器,总是指向函数栈帧的栈底 EIP:指令寄存器,总是指向下一条等待的指令 机器上的堆栈被认为是反向的,即堆栈是由高端地址向下增长的。即当一个信息被压栈时,ESP 减少,新元素被写入目标地址,当一个信息被弹出时,则从ESP 指针所指向的地址中读出一个元素,ESP 增加,向上边界移动并压缩堆栈。 当调用函数时: 1)参数入栈,参数从右向左依次压入系统栈 2)返回地址入栈,母函数调用处下一条指令的地址 3)栈帧调整,包括EBP入栈,将ESP值装入EBP,更新栈底部,ESP减去所需空间大小,抬高栈顶。 当函数返回时: 1)保存返回值 2)弹出当前栈帧,恢复下一个栈帧,包括将ESP加上栈帧的大小,降低栈顶,回收当前栈,将当前栈底部保存的前栈帧EBP弹入EBP寄存器,将返回地址弹给EIP寄存器 3)跳转,回到母函数中继续执行。 2.5攻击原理 传统的缓冲区溢出攻击只能覆盖缓冲区相邻的内存地址。而格式化字符串漏洞攻击几乎可以改写任何内存地址。因此,除了修改函数的返回地址以外,利用格式化字符串漏洞还可以有其它的攻击目标和 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 。例如: ? 改写GOT段[7] ; ? 改写.dtors段[8] ; ? 改写函数指针[9] ; ?  利用可变长度数组[10] ; 此次实验,我采用的基本 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 是: 由于printf函数漏洞,可以查看和修改内存的值,我们利用该性能可以修改调用函数的返回值,如果修改为我们恶意代码的地址值,那在函数调用返回值,就不再跳转到母函数执行,而是执行我们的恶意代码,这样我们就控制了程序。 三、实验设计 3.1实验目的 1、了解系统栈的工作流程,特别注意返回地址的存放细节。 2、使用具体例子介绍利用格式化字符串漏洞的基本方法。这些例子并不是实际的系统攻击程序,而是为了说明格式化字符串漏洞而编写的说明性程序。 2、利用格式化字符串漏洞尝试植入shellcode。 3.2实验设计思路 由系统栈的工作原理可以发现存在一个重要的问题,即栈和其它内存区域一样,只是存储某些内容,而没有一个标签说明某个地址的内容是否printf 的参数。printf只是根据格式化字符串参数的控制要求从栈上取得其它参数。如果格式化字符串参数被故意或不故意的写错了,那么printf 函数就可能被利用来对系统进行攻击。 普通的缓冲区溢出就是利用了堆栈生长方向和数据存储方向相反的特点,用后存入的数据覆盖先前压栈的数据。而格式化字符串漏洞是因为printf的%d(%x、%f等)格式检测功能,使得内存被非法读取,而利用%n使得内存内容被非法写入,若黑客写入的内存单元恰好是函数的返回地址,即覆盖返回地址,那程序的流程将会改变,这样,子函数返回时就跳到了攻击者指定的地址,就可以按照攻击者的意愿做任何事情了。 于是可以确定这样的实验思路: 1、确定函数调用过程,通过反汇编,查看寄存器、内存内容确定函数在调用过程中的ESP、EBP、EIP的变换,从而清晰了解具体调用过程,为之后的攻击打下良好的理论基础。 2、分析printf函数漏洞,通过构造一些针对的格式化字符串,尝试一些强有力的格式化字符串的用法,查看输出结果。 3、尝试利用printf函数漏洞,找到子函数返回的EIP地址,并更改该地址,即植入shellcode。shellcode为简单的弹出cmd对话框。 3.3实验环境 3.3.1主机操作系统: Window7旗舰版 处理器: 3.3.2虚拟机环境 Vmwork station 8.0 操作系统:Windows xp3 IDE:microsoft visual c++ 6.0(debug版本和release版本都有用过) 3.4实验所用到的工具 3.4.1 microsoft visual c++ 6.0 1)工具概述 Visual c++ 6.0由microsoft开发,不仅仅是c++编译器,而且是基于windows操作系统的可视化集成开发环境。
本文档为【格式化字符串攻击】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_668482
暂无简介~
格式:doc
大小:26KB
软件:Word
页数:0
分类:互联网
上传时间:2019-08-31
浏览量:10