缓冲区溢出(bufferoverflow),是针对程序设计缺陷,向程序输入缓冲区写入使之溢出的内容(通常是超过缓冲区能保存的最大数据量的数据),从而破坏程序运行、趁著中断之际并获取程序乃至系统的控制权。
什么意思呢,让人摸不着头脑,算了,放弃吧。少年,坚持一下,从此文开始,通过三期内容,我们一起一步一步的揭开缓冲区溢出的神秘面纱吧:
缓冲区溢出之寄存器篇;
缓冲区溢出之堆栈原理;
缓冲区溢出之漏洞原理。
【说明】
请重点关注文中加粗、下划线内容,其它内容了解即可。
【正文】
寄存器(Register)是CPU内部用来存放数据的一些小型存储区域。寄存器主要分成4类:
通用寄存器(8个)
段寄存器(6个)
程序状态与控制寄存器(1个)
指令指针寄存器(1个)
接下来分别介绍一下这4类的作用。
通用寄存器。主要用于传送和暂存数据,也可参与算术逻辑运算,保存运算结果。32位通用寄存器主要包括累加器(EAX)、基址寄存器(EBX)、计数器(ECX)、数据存储器(EDX)、扩展基址指针寄存器(EBP)、源变址寄存器(ESI)、目的变址寄存器(EDI)、栈指针寄存器(ESP)。
前面4个寄存器(累加器(EAX)、基址寄存器(EBX)、计数器(ECX)、数据存储器(EDX))主要用于算术运算;后面4个寄存器(扩展基址指针寄存器(EBP)、源变址寄存器(ESI)、目的变址寄存器(EDI)、栈指针寄存器(ESP))主要用于保存内存地址的指针。
段寄存器。段是一种内存保护技术,它把内存划分为多个区段,并为每个区段赋予起始地址、范围、访问权限等,以保护内存。段寄存器主要包括CS代码段寄存器、SS栈段寄存器、DS数据段寄存器、ES附加(数据)段寄存器、FS数据段寄存器、GS数据段寄存器。
程序状态与控制寄存器。EFLAGS共计32位,每1位的值为0或1,代表off或on,我们前期只需关注ZF(零标志)、OF(溢出标志)、CF(进位标志)。
指令指针寄存器(EIP)。程序运行时,EIP会存放程序执行的下一命令的地址,告诉CPU接下来要做什么。
Ok,到这里,我们需要了解的寄存器知识就差不多了,在下一篇“缓冲区溢出之堆栈原理”中,将带大家学习堆栈原理,其中就会用到寄存器的部分知识。
未完待续…
来源:freebuf.com 2018-09-20 17:50:52 by: 360网络安全学院
请登录后发表评论
注册