欢迎来到天天文库
浏览记录
ID:37501173
大小:446.40 KB
页数:31页
时间:2019-05-24
《window下的缓冲区溢出》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、信息安全技术信息安全技术windows下的缓冲区溢出原理windows下的缓冲区溢出原理主讲人:裴士辉e_mail:shihui_pei@sina.com计算机科学与技术学院计算机科学与技术学院栈溢出(stackoverflow)栈溢出(stackoverflow)#include#include高地址charshellcode[]="xebx1fx……";para1charlarge_string[128];para2intmain(intargc,char**argv){charbuffer[96];Returnaddint
2、i;Bufferlong*long_ptr=(long*)large_string;(96bytes)shellcodefor(i=0;i<32;i++)*(long_ptr+i)=(int)buffer;ifor(i=0;i<(int)strlen(shellcode);i++)long_ptrlarge_string[i]=shellcode[i];strcpy(buffer,large_string);低地址return0;}信息安全技术信息安全技术堆溢出(heapoverflow)堆溢出(heapoverflow)内存中的一些数据区•.text包含进程的代码•.
3、data包含已经初始化的数据(全局的,或者static的、并且已经初始化的数据)•.bss包含未经初始化的数据(全局的,或者static的、并且未经初始化的数据)•heap运行时刻动态分配的数据区•还有一些其他的数据区在.data、.bss和heap中溢出的情形,都称为heapoverflow,这些数据区的特点是:数据的增长由低地址向高地址计算机科学与技术学院计算机科学与技术学院信息安全技术信息安全技术关于heapoverflow关于heapoverflow比较少引起人们的关注,原因在于•比栈溢出难度更大•需要结合其他的技术,比如•函数指针改写•Vtable改写•Ma
4、lloc库本身的漏洞•对于内存中变量的组织方式有一定的要求计算机科学与技术学院计算机科学与技术学院信息安全技术信息安全技术指针改写指针改写要求:•先定义一个buffer,再定义一个指针溢出情形•当对buffer填充数据的时候,如果不进行边界判断和控制的话,自然就会溢出到指针的内存区,从而改变指针的值计算机科学与技术学院计算机科学与技术学院信息安全技术信息安全技术C++中的vtable函数指针改写C++中的vtable函数指针改写函数指针与函数体的绑定•Earlybinding,在编译过程中绑定•Latebinding,在运行过程中绑定C++的虚函数机制•编译器为每
5、一个包含虚函数的class建立起vtable,vtable中存放的是虚函数的地址•编译器也在每个class对象的内存区放入一个指向vtable的指针(称为vptr),vptr的位置随编译器的不同而不同,VC放在对象的起始处,gcc放在对象的末尾Overflow•设法改写vptr,让它指向另一段代码计算机科学与技术学院计算机科学与技术学院Vptr指针改写示例代码Vptr指针改写示例代码heap高地址……MyFuncvptrprintBufferbuf(11bytes)低地址对象地址如何发掘:期望让vptr指向构造的函数表,表中函数地址指向构造的代码。比较困难func1…n
6、opshellcodeVptr’信息安全技术信息安全技术windows下的缓冲区溢出windows下的缓冲区溢出实验内容编写具有缓冲区溢出漏洞的程序编写shellcode调试、测试环境MicrosoftVisualC++6.0MicrosoftWindows2000,XP计算机科学与技术学院计算机科学与技术学院信息安全技术信息安全技术编写具有缓冲区溢出漏洞的程序编写具有缓冲区溢出漏洞的程序在VisualC++开发环境中创建一个新的控制台应用程序,选择“AnApplicationthatsupportsMFC”并单击“Finish”。向程序中添加代码计算机科学与技术学院
7、计算机科学与技术学院voidoverflow(char*buff){CFilefile;CFileExceptioner;if(!file.Open(_T("overflow.txt"),File::modeRead,&er)){er.ReportError();return;}intx=file.GetLength();file.Read(buff,x);}int_tmain(intargc,TCHAR*argv[],TCHAR*envp[]){intnRetCode=0;//initializeMFCandprintand
此文档下载收益归作者所有