好久好久没做ctf题了,今天得空刷刷buuctf,emm,发现好多都忘了。😭😭😭
查看权限
不能利用shellcode,但可以构造栈溢出。
查看源程序
为了方便区分,重命名了下函数。
- open函数的返回值:如果操作成功,它将返回一个文件描述符,如果操作失败,它将返回-1;
- 文件描述符:0,1,2是标准IO输入/输出/错误输出给占用了,当文件open成功了,会返回数值3;
- read(fd,&buf,4u)是把fd所指向的随机数写入到buf文件中,长度是4个字节。 此时,buf是随机数作为参数传入f2;
再看f2函数,里面的变量比较多,我们画栈图分析一下:
f2分析如下:
- 在s中写入方才生成的随机数。
- 终端输入0x20字节长的字符串到buf,buf数组长度为7,可以发生溢出,但溢出不到ret位置。
- strcmp的特性是遇到’\0’就停止比较字符串,这里可以考虑0截断绕过。
- 最后函数把v5作为返回值。但是这个函数并没有对v5做出改动,结合栈图,可以猜测v5是被溢出改变了。
最后查看f3函数: