CSAPP 深入理解计算机系统 Buflab实验,缓冲区溢出攻击实验(6)

level4

前面4个level都是栈基址是固定的,所以我们可以猜测到栈帧的结构进行覆盖篡改,这一关就是引入了缓冲区溢出攻击的一种保护措施,就是栈基址随机化,让栈基址不可以猜测,我们来实施缓冲区溢出攻击,那么我们就要用到nop雪橇了。nop只是执行eip自加1不进行其他的操作。在我们无法猜测的时候,只需要找到最大的地址,然后前面用nop雪橇那么只要在nop段中都会自动划入。

这一level用的不再是getbuf而是getbufn,和testn,都是为了随机化栈基址。这一level运行bufbomb时要用到参数-n模式下。另外要求输入5次连续相同的string,我们需要借助一个不同的指令来完成这个输入。


也就是批量输入

首先来看一下getbufn函数的汇编代码:


可以看到buf的首地址为-0x208(%ebp)为十进制520个字节大小。

在这一level中每次运行testn的ebp都不同,所以每次getbufn里面保存的test的ebp也是随机的,但是栈顶的esp是不变的,我们就要找到每次随机的ebp与esp之间的关系来恢复ebp。我们先通过调试来看一下getbuf里面保存的ebp的值的随机范围为多少。

我们在0x8049247处设置断点,注意与前面不同的是设置为-n模式,然后每次输入一次string来看一下ebp的值,然后continue,再次输入,一共输入5次。




ebp的值              减去0x208为buf的首地址

0x55683270             0x55683068

0x556832c0             0x556830b8

0x55683280             0x55683078

0x55683290             0x55683088

0x556832f0             0x556830e8

接下来再来看一下testn的反汇编代码:


这里我们可以看到,call getbufn的下一条指令的地址为0x8048ce2

还可以看到,mov  %esp,%ebp 此时esp和ebp相等

push  %ebx  此时ebp=esp+0x4

sub   $0x24,%esp 这个时候执行完后,ebp=esp+0x28,这就是esp和ebp每次的变化关系,通过esp来恢复我们的每次的ebp

我们首先来编写我们的exploit代码:


接下来生成我们的字节码



接下来构造我们的level4.txt exploit sting



另外一种:可见lea和mov的顺序是不影响的





猜你喜欢

转载自blog.csdn.net/shiyuqing1207/article/details/46316519
今日推荐