缓冲区溢出攻击技术

缓冲区溢出攻击技术

ID:37301627

大小:684.97 KB

页数:81页

时间:2019-05-21

缓冲区溢出攻击技术_第1页
缓冲区溢出攻击技术_第2页
缓冲区溢出攻击技术_第3页
缓冲区溢出攻击技术_第4页
缓冲区溢出攻击技术_第5页
资源描述:

《缓冲区溢出攻击技术》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、缓冲区溢出攻击技术文伟平博士副教授weipingwen@ss.pku.edu.cn北京大学软件与微电子学院信息安全系北京大学信科学院软件所信息安全实验室课程内容缓冲区溢出相关背景概念缓冲区溢出原理溢出保护技术安全编程技术引子1988Moosrris蠕虫事件CERT统计数据缓冲区溢出相关概念缓冲区从程序的角度,缓冲区就是应用程序用来保存用户输入数据、程序临时数据的内存空间缓冲区的本质数组存储位置StackHeap数据段缓冲区溢出相关概念缓冲区溢出如果用户输入的数据长度超出了程序为其分配的内存存间空间,这些数据就会覆盖程序

2、为其它数据分配的内存空间,形成所谓的缓冲区溢出缓冲区溢出攻击的发展历史1988Morris蠕虫-fingerd缓冲区溢出攻击1996AlephOne,SmashingtheStackforFunandProfit,Phrack491998Dildog:提出利用栈指针的方法完成跳转TheTaoofWindowsBufferOverflows1999DarkSpyrit:提出使用系统核心DLL中的JmpESP指令完成跳转,Phrack55M.Conover:基于堆的缓冲区溢出教程缓冲区溢出攻击背景知识与技巧编译器、调试器的使用Li

3、nux:gcc+gdb进程内存空间结构汇编语言基本知识栈的基本结构函数调用过程GCC编译器基础著名的GNU的Ansic/c++编译器gcc[options][filenames]编译:gcc-ctest.c生成test.o连接:gcc-otesttest.o同时搞定:gcctest.c-otestmake:用于控制编译过程MakefileHowToGDB调试器的使用断点相关指令break//,clear,disable///enable/deletewatch–表达式值改变时,程序中断执行相关指令run/continu

4、e/next/stepattach–调试已运行的进程finish/return信息查看相关指令inforeg/break/files/args/frame/functions/…backtrace–函数调用栈print/fexp–显示表达式的值x/f/nfuaddr–显示指定内存地址的内容list–列出源码disassfunc–反汇编指定函数Win32平台调试器OllyDbg32-bitassemblerlevelanalysingdebuggerbyOlehYuschukFree支持插件机制OllyUni:查找跳转指令功

5、能UiltraStringReferennce:查找字符串SofticeSyserDebuggerWinDbgIDAPWPro,W32DASM简单溢出实例#includeintmain(){charname[8]={0};printf(“Yourname:”);gets(name);printf(“Hello,%s!”,name);return0;}test0.c缓冲区溢出的危害应用程序异常系统不稳定甚至崩溃程序跳转到恶意代码,控制权被窃缓冲区溢出原理预备知识理解程序内存空间理解堆栈理解函数调用过程理解缓冲

6、区溢出的原理Windows环境下的堆栈程序空间由何构成?堆栈是什么?堆栈里面放的都是什么信息?程序使用超过了堆栈默认的大小怎么办?在一次函数调用中,堆栈是如何工作的?Win32进程内存空间系统核心内存区间0xFFFFFFFF~0x80000000(4G~2G)为Win32操作系统保留用户内存区间0x00000000~0x80000000(2G~0G)堆:动态分配变量(Malloc),向高地址增长静态内存区间:全局变量、静态变量代码区间:从0x00400000开始栈:向低地址增长单线程进程:(栈底地址:0x0012FFXX

7、XX)多线程进程拥有多个堆/栈程序在内存中的映像堆((pHeap))堆的增长方向内存低地址……内堆栈段栈(stack)栈的增长方向存递非初始化数据段(BSS)增数据段方初始化数据段向文本(代码)段代码段内存高地址系统DLLPEB&TEB0x7FFFFFFF内核数据代码0080000000x80000000栈栈是一块连续的内存空间先入后出生长方向与内存的生长方向正好相反,从高地址向低地址生长每一个线程有自己的栈提供一个暂时存放数据的区域使用POP/PUSH指令来对栈进行操作使用ESP寄存器指向栈顶,EBP指向栈帧底栈内容函数的参数函

8、数返回地址EBP的值一些通用寄存器(EDI,ESI…)的值当前正在执行的函数的局部变量三个重要的寄存器

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。