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

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

2.1 解题思路

 

找到fizz()代码如下:

08048e60<fizz>:

 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<fizz+0x30>

 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<printf@plt>

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

 8048e88:    e85b f9 ff ff       call   80487e8<exit@plt>

 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<printf@plt>

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

 8048ea7:     e844 fc ff ff       call   8048af0<validate>

 8048eac:     ebd3                jmp    8048e81<fizz+0x21>

 8048eae:     89f6                  mov    %esi,%esi

 

分析:

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

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

 

2.2 解题过程

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

图13

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

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

图14

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

2.3 最终结果截图


图15


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值