CSAPP: Buffer Lab

本文详细介绍了CSAPP的Buffer Lab实验,涵盖了level0至level4的缓冲溢出攻击。实验中,通过调试bufbomb程序,理解IA-32进程调用和栈的组织,利用栈溢出改变程序执行流程,执行特定函数并传递参数。每个level的解决策略包括获取函数地址,构造攻击字符串,以及理解栈布局和参数传递机制。
摘要由CSDN通过智能技术生成

介绍

该实验能够帮助你更好的理解IA-32的过程调用和程序栈的组织情况。在实验中我们需要对于文件夹中bufbomb可执行文件进行栈溢出攻击


实验前准备

  1. 下载相应的buffer Lab实验文件,里面包含三个可执行文件
    相关实验代码的Github下载链接如下https://github.com/Davon-Feng/CSAPP-Labs 中的Buffer Lab
文件名 作用
bufbomb 栈溢出实验主要的攻击目标
makecookie 根据用户输入的userid生成唯一(很大可能)的4字节字符串
hex2raw 将用户构造的2进制字符串转换为字符串

2. makecookie使用方法
3. hex2raw使用方法
4. bufbomb的参数

在下载的Buffer lab文件夹中buflab.pdf中有以上四点的指导内容,在实验前要仔细阅读

注意:这个程序运行时要有一个userid参数,我的设置的是yzf, 不同的userid会对应不同的结果.我的答案如果换成别的userid的话就不成功.
而且也可能和机器有关,因为程序中一些变量的存放位置可能不同.


实验过程

level0:Candle

在bufbomb中getbuf()方法会被test()调用。两个函数的C语言程序如下所示

 /*Buffer size for getbuf*/
    #define NORMAL_BUFFER_SIZE 32

    int getbuf()
    {
        char bur[NORMAL_BUFFER_SIZE];
        Gets(buf);
        return 1;
    }

    void test()
    {
        int val;
        /* Put canary on stack to detect possible corruption*/
        volatile int local = uniqueval();

        val = getbuf();

        /*Check for corrupted stack*/
        if(local != uniqueval){
            printf("Sabotaged:the stack has been corrupted\n");
        }else if(val == cookie){
            printf("Boom!:getbuf returned 0x%x\n",val);
            validate(3);
        }else{
            printf("Dud:getbuf return 0x%x\n",val);
        }
    }

Level0实验需要我们在getbuf()函数执行返回之后不是接下来执行test()函数的剩余部分,而是改变程序的运行方向,执行下面的smoke()函数。

    vo
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值