csapp attack lab level2

完成了level1,现在来看看level2.
这是讲义上touch2函数

 void touch2(unsigned val)
{  
     vlevel = 2; /* Part of validation protocol */ 
  if (val == cookie) {
     printf("Touch2!: You called touch2(0x%.8x)\n", val);
     validate(2);
} 
else {
    printf("Misfire: You called touch2(0x%.8x)\n", val);
    fail(2);
      }
 exit(0);
}

touch2函数有个形参,大概意思是这个参数与cookie相等就pass,这个比level1的难点在于多了个参数,并且等于一个值(cookie.txt中的值)。

下边给的建议,大体意思是还是更改getbuf的返回地址到touch2,然后第一个参数是在rdi中,不要调用call和jmp
在这里插入图片描述
考虑到这也算是个栈溢出的问题,先确定个缓冲区,而getbuf是输入,这时我们想把getbuf这一栈帧作为存储shellcode的缓冲区,而返回地址选择为rsp栈顶,因getbuf本就是从栈顶开始输入存储。

画个图
大致这个意思,只不过shellcode得自己写了,写出汇编代码,然后汇编成机器码,在借助hex2raw把机器码转换成字节码。在这里插入图片描述
就像这样(我有个问题,不知道为什么我用inter格式写然后汇编它报错,无奈用at&t格式)
在这里插入图片描述
第1行是rdi等于cookie。
第2行是touc2的地址。
在这里插入图片描述

然后汇编
在这里插入图片描述
反汇编 得到指令的机器码
在这里插入图片描述
所以现在编写攻击脚本,这些指令共13个字节,和level1一样要凑40个字节,剩下的按00凑,然后得确定rsp的地址。
所以gdb调试一下
在这里插入图片描述
我输入了abcd,然后查看栈帧情况
在这里插入图片描述
没错地址为0x5561dc78.
所有东西都备齐了,开始写攻击代码
在这里插入图片描述
然后利用hex2raw进行攻击
在这里插入图片描述
成功!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值