信息收集與系統(tǒng)攻擊之緩沖區(qū)溢出基本概念
2.溢出攻擊
1)緩沖區(qū)溢出基本概念
緩沖區(qū):緩沖區(qū)也稱堆棧,是一種抽象的數(shù)據(jù)結(jié)構(gòu),物理上就是一段連續(xù)分配的內(nèi)存空間。堆( heap)和棧(stack)是不同的兩個(gè)概念,堆是由程序申請(qǐng)并釋放的內(nèi)存空間,而棧是由操作系統(tǒng)自動(dòng)分配的內(nèi)存空間。堆棧有兩個(gè)特點(diǎn),一數(shù)據(jù)操作(壓棧( push)和出棧( pop))遵循“后進(jìn)先出”原則,就象往有底的竹筒里面放乒乓球,最后放進(jìn)去的必須最先取出來(lái)。二是堆棧的增長(zhǎng)方向與內(nèi)存地址增長(zhǎng)方向相反,也就是堆棧是從內(nèi)存的高地址向低地址增長(zhǎng)的。
指針:編程語(yǔ)言中的一個(gè)對(duì)象,是一個(gè)內(nèi)存地址。
寄存器:有限存貯容量的高速存貯部件,它們可用來(lái)暫存指令、數(shù)據(jù)和地址。以X86 32位CPU為例,其通常包含8個(gè)通用寄存器和1個(gè)指令指針寄存器。8個(gè)通用寄存器分別是EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP和指令指針寄存器EIP。其中ESP和EBP被稱為堆棧指針寄存器,在一個(gè)函數(shù)中,ESP和EBP共同決定了一個(gè)堆棧,其中ESP指向棧頂, EBP指向棧底。而指令指針寄存器(EIP)作為馮。諾依曼計(jì)算機(jī)體系結(jié)構(gòu)的核心,其指向CPU要執(zhí)行的下一條指令的地址。
在堆棧分配中,其是從高往底分配內(nèi)存(注意:這和內(nèi)存從低往高分配的方式截然相反),并且遵循“后進(jìn)先出”的原則。堆棧涉及壓棧( push)和出棧(pop)兩種操作,堆棧的棧頂位置由寄存器ESP指定,壓棧時(shí),ESP=ESP-4,同時(shí)在ESP處存放需要壓人堆棧的數(shù)據(jù);出棧時(shí),ESP=ESP+4,原先的棧頂數(shù)據(jù)將不再屬于堆棧范圍之內(nèi),即相當(dāng)于數(shù)據(jù)出棧了。