CSAPP缓冲区溢出实验

缓冲区溢出实验

实验目的

  • 从硬件层面理解程序调用过程

  • 理解操作系统为实现程序安全提供的保护

  • 理解如何写出更加安全可靠的代码

实验内容

  • 每人一个二进制程序attack

  • attack程序利用缓冲区溢出进行攻击

    • 从exploit.txt中读取输入并执行

    • 通过反汇编找到正确的输入,以实现对特定目标的攻击

实验步骤

  1. 打开gdb调试,在test函数设置断点。跟踪调试到Gets函数,期间分析栈的存储情况,得到:

    在这里插入图片描述

  2. 并且得到buf字符串的存储位置0x7ffffffeddc0gdb调试截图如下:

    在这里插入图片描述

  3. 可以看出buf在栈中最多可以存储40个字节,超出后的结果会覆盖test函数的返回地址。将其设置为touch1函数的入口地址0x8001549

  4. 结果在vscode中报错,而在powershell中产生了段错误。通过在群里提问,得知地址应该设置为0x8001553,跳过指令sub 0x8 %esp,否则会执行该指令会产生栈顶的位置错误。touch1函数如下:

    0000000000001549 <touch1>:
        1549:	f3 0f 1e fa          	endbr64 
        154d:	50                   	push   %rax
        154e:	58                   	pop    %rax
        154f:	48 83 ec 08          	sub    $0x8,%rsp
        1553:	48 8d 3d b0 0b 00 00 	lea    0xbb0(%rip),%rdi        # 210a <_IO_stdin_used+0x10a>
        155a:	e8 71 fb ff ff       	callq  10d0 <puts@plt>
        155f:	bf 00 00 00 00       	mov    $0x0,%edi
        1564:	e8 b7 fb ff ff       	callq  1120 <exit@plt>
    
  5. powershell中 执行成功。

实验总结

  • 实验的关键使用gdb在于分析栈中的存储内容,得到读取的buf字符串的存储位置和最大存储长度。然后设置攻击字符串,使得touch1函数的执行地址覆盖到栈中的一个RetAddr,使得执行该函数的字符串输出函数。注意跳过该函数中的对%esp减8的操作,使得不对栈的结构产生改变,触发段错误。
  • 本次的实验,开始的时候,我花了大量时间分析Gets函数中的内容,没有对栈中的内容进行实时的分析,导致思路混乱,应该反思。而且对汇编指令不够熟悉,导致在分析的时候进度缓慢。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值