CSAPP Attack Lab 实验记录 [yy-b]

前言

写这个的目的就是想记录一下自己做过的东西,内容可能比较简单,不喜请略过.
写得比较详细,按步骤大概率可重复进行实验.
本次的内容是CSAPP上的实验Attack Lab.
部分参考了CSDN上的其他一些文章,感谢大佬们

实验环境

  1. MobaXterm
  2. Linux系统
  3. Objdump命令反汇编
  4. GDB调试工具

实验内容

准备阶段

(实验所需材料略)

  1. 先读一遍实验介绍文档,其中有基本步骤,包括c函数本来长什么样子之类的.
  2. tar -xvf target30.tar解压实验文件.

阶段1

  1. 从实验介绍中得知会运行test函数,然后调用getbuf,任务是在执行完getbuf函数之后执行touch1函数而不是继续执行test函数
  2. 先反汇编ctarget程序,储存为c.d
objdump -d ctarget > c.d
  1. 用vi查看c.d,找到getbuf和touch1函数
    在这里插入图片描述
    注意看816行,%rsp减了0x18也就是说缓存区大小为24;
    824行,touch1函数的地址为0x4017d4;
    这两个是关键信息,然后可以构造攻击字符串了:先输一堆无关的值把缓存区填满(为了简洁我们就用00来填充一个单元,共需24个00,为了便于计数每四个换个行),再在后面接上我们想要返回的地址,这样会溢出到缓存区外面,也就是读取返回地址的地方,即可调到touch1函数执行,构造完如图(命名为1.txt):
    注意要遵循小端规则
    注意要遵循小端规则.
  2. 再执行指令
	./hex2raw <1.text >2.txt

把16进制串转换为字符(2.txt)

	./ctarget < 2.txt

将2.txt输入到ctarget中,通过
在这里插入图片描述

阶段2

  1. 第二关的任务是执行touch2函数,然后还要传入我们的cookie
    先找到touch2:
    在这里插入图片描述
    touch2的参数 val 存储于寄存器 %rdi ,我们要先跳转到一个地方执行一段代码,这段代码能够将寄存器 %rdi 的值设置为cookie,然后再跳转到 touch2执行。
    第835行,touch2起始地址为0x401800。
    那么要注入的汇编代码应该写成:(0x4bca8e48为cookie)
    在这里插入图片描述
    把这个文件储存为3.s
  2. 执行指令 gcc -c 3.s -o 4.o 把源代码链接
    执行指令 objdump -d 4.o > 5.txt 反汇编4.o,储存为5.txt,如图:
    在这里插入图片描述
    这样就可以看到汇编指令对应的十六进制串了,这就是我们要注入的字符串
  3. 利用缓冲区溢出将返回地址修改为这段代码的起始地址,就能让程序执行注入的这段代码。内存中存储这段代码的地方便是 getbuf开辟的缓冲区(因为我们把传入这段代码的方式是让getbuf读取它,所以会存在这里),我们利用gdb查看此时缓冲区的起始地址(设断点、看寄存器):
    在这里插入图片描述
    可以看到%rsp地址为0x556489a8,就是要找的地址
    4.结合第2,3步,构造如下:
    在这里插入图片描述
    1到4行是注入的代码的十六进制串,第七行是溢出的地址,接下来就与阶段1一样了,把这段代码变成字符串再输入到ctarget中就通过了

阶段3

  1. Touch3的汇编代码:
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值