期待已久的attack lab, handout里没有实验文档,前俩都是看的readme,这次readme直接是txt,好吧,打开看一眼没觉得有啥,不过不怕,做过pwn题,但是没想到,这玩意打开发现不是为了得到shell,看了一会不知道让干嘛的,无奈就去看了眼别人的博客,发现别人有实验文档,好吧,只能照着别人的文档写,限看了眼知道前三题对应三个函数touch1
、touch2
、touch3
,然后自己写,本来想用pwntool,但是发现运行不起来,要加-q参数,不清楚在pwntool里怎么加,就按文档上的提的hex2raw来,
第一题,在ida里看函数位置然后把缓冲区随便填,把ebp也填上,注意是64位程序,填ebp要8个字符,然后再在返回地址出填写touch1的地址
第二题,看到需要传参,看汇编发现第一个参数在rdi里,然后利用rop,找pop rdi; ret;这个gadget
构造,在返回地址处填写这个gedget的地址,下面接着是要放到传的参数的值,也就是cookie.txt文件里的值,其余和第一题一样
第三题,这次传的值是一个指针,也就是地址,我们可以通过一个全局变量,把cookie输入到bss段,这样地址就直接传到edi里像第二题一样,但是这毕竟不是一般pwn题,所以看了眼别人的写法,发现可以放栈桢里,然后在缓冲区随便一个位置放cookie,记录下位置,在第二问里原本放cookie的地方改成地址,这样就o了
第四题
gedgit地址都没变,跟第二题一样
第五题
似乎一样
看了别人写的才发现他们都是前三题把可执行代码放栈里,我是直接rop,,所以造成第4.5文就在前面就解决了,借鉴了一下别人的答案,又写了遍2.3题
csapp牛逼!!