CSAPP3e:Attacklab
简介 这是CSAPP这本书的第三个实验,实验所需要的材料在 CSAPP3e。 这个实验分为两部分,第一部分是代码注入实验,主要是通过Gets()函数的堆栈溢出传入指令,然后跳转到指定位置执行的方式来实现执行指定指令;第二部分是ROP实验,因为这里采用栈随机化和堆栈不可执行所以代码注入失效了。ROP利用截取已知某指令序列来创建目的指令的方法来实现的,其中在实验中可利用的指令序列限制为farm.c生成的部分,通过Gets()函数的堆栈溢出传入一系列指令地址和数据实现。 Code injection attacks Phase 1 实验目的是test()函数调用getbuf()后执行touch1()函数而不返回test(),所以这里用touch1()的地址覆盖掉test()的地址就可以。getbuf()里面分配了0x28个字节栈空间,所以这里把栈顶的0x28个字节覆盖掉,在末尾添加touch1()的地址就可以了。需要注意字节顺序。 1 2 3 4 5 6 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 00 00 00 00 00 /* 0x4017c0 即为touch1()起始地址*/ ...