缓冲区溢出攻击实验【二】(32位)

步骤2 返回到fizz()并准备相应参数

2.1 解题思路

 

找到fizz()代码如下:

08048e60:

 8048e60:    55                   push   %ebp

 8048e61:    89e5                mov    %esp,%ebp

 8048e63:    83ec 08                sub    $0x8,%esp

 8048e66:    8b45 08               mov    0x8(%ebp),%eax

 8048e69:    3b05 d4 a1 04 08         cmp    0x804a1d4,%eax

//0x804a1d4存放就是用户的cookie值,即运行命令“./bufbomb-t luoxiaolin”时传入的。

 8048e6f:     741f                  je     8048e90

 8048e71:    8944 24 04             mov    %eax,0x4(%esp)

 8048e75:    c704 24 8c 98 04 08        movl   $0x804988c,(%esp)

 8048e7c:     e827 f9 ff ff       call   80487a8

 8048e81:    c704 24 00 00 00 00       movl   $0x0,(%esp)

 8048e88:    e85b f9 ff ff       call   80487e8

 8048e8d:    8d76 00               lea    0x0(%esi),%esi

 8048e90:    8944 24 04             mov    %eax,0x4(%esp)

 8048e94:    c704 24 d9 95 04 08       movl   $0x80495d9,(%esp)

 8048e9b:    e808 f9 ff ff       call   80487a8

 8048ea0:     c704 24 01 00 00 00       movl   $0x1,(%esp)

 8048ea7:     e844 fc ff ff       call   8048af0

 8048eac:     ebd3                jmp    8048e81

 8048eae:     89f6                  mov    %esi,%esi

 

分析:

8048e66:  8b 45 08 mov 0x8(%ebp),%eax 得知,

Fizz的参数位置在%ebp+0x8,在%ebp之前的栈中存的是%ebp的旧值。

 

2.2 解题过程

光看代码还是不能理解的很清楚,所以现在我们把栈帧的结构画出来:

缓冲区溢出攻击实验【二】(32位)_第1张图片

图13

(图中地址是根据gdb调试得出的)

这里假设调用getbuf时,输入正确的字符串后,函数返回到fizz()函数,那么,test的栈帧结构将变成下图。

缓冲区溢出攻击实验【二】(32位)_第2张图片

图14

由图可以看出,deadbeff下面到ebp旧值上面的区域,还有%ebp旧值以下的部分都是fizz函数的栈帧结构。那么这道题的答案也就知道了,这次需要输入40个字节的字符串。倒数第8至倒数第16个字节代表fizz的地址,倒数8个字节是传入的参数,fizz()函数的地址为“08048e60”,参数根据题目要求需要传入一个黑客cookie值,我的cookie值为“0x33102f15”。

2.3 最终结果截图

缓冲区溢出攻击实验【二】(32位)_第3张图片

图15


你可能感兴趣的:(Linux)