CSAPP实验四----缓冲区溢出实验bufbomb

    在网上关于这个的实验有几个版本,这个版本只有三关,都比较基础,为了不让大家混淆,对本实验做一下说明:

文件说明

    1. bufbomb : 主程序,有四个选项,最常用的是 -t ,后面加自己的姓名等,运行时会根据加入的参数生成cookie,第二关和第三关都会用到。

    2.  sendstring :  翻译程序,实验要求将字符转化成ascii码输入,两位输入,即想输入0也要输入00,1对应01,以此类推。可以通过 sendstring < exploit.txt > exploit_raw..txt 将翻译结果输入到 exploit_raw.txt 文件中。一般如果输入的文件中有地址时都尽量不要打开输出文件,里面会有一些无法显示的字符,尽量用管道或者重定位来进行输入。gdb下可以提通过重定位将 exploit_raw.txt 文件中的内容作为输入,例如 : run -t pangjingyu < exploit_raw.txt

    3. makecookie: 根据输入的字符串输出唯一的cookie,作为标识,bufbomb中含有此程序。以  -t  选项运行bufbomb时要求输入标识,会自动生成并显示对应的cookie。


关卡说明

    1  getbuf()返回时,不返回到test(),而是直接返回到指定的smoke()函数。

    2  getbuf()返回时,不返回到test(),而是直接返回到指定的fizz()函数,而且要求给fizz()函数传入一个黑客cookie值作为参数

    3  getbuf()返回时,不返回到test(),而是直接返回到指定的bang()函数,并且在返回到band()之前,先修改全局变量global_value为你的黑客cookie值。

关卡1

     思路

       目的是当getbuf()函数返回时不是到test(),而是smoke()。所以要在返回时更改getbuf()ebp+4的位置的返回地址。而该处地址可以通过给其输入一个超长的字数串来更改。

    解决步骤

     1. 首先观察getbuf()和gets(),save_char()函数。第一关只涉及这三个函数,整理其调用顺序是:getbuf() -> gets()-> save_char()。

      2. 观察getbuf()函数:

                                                            

                                                                                图1  getbuf()函数

                            

                                                                      图2  gdb设置断点并输入参数运行

   通过单步执行可以得到如下栈数据:

                         

                                                                                 图3  观察栈参数

                                                          

                                                                            图4  返回地址和栈参数

根据图3和4可以的到在进入Gets()前 栈的参数设置如图:

                   

  • 4
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值