先上结论:非预期解利用ret2dl 题目分析 题目很简单,由于fgets遇到\0不会截断,所以那个if判断很容易绕过 问题是没有可以用的gadget,唯一能操作的就是fgets(s,4919,stdin)里面的s是根据rbp来寻址的,所以可以根据这一点打一个栈迁移 思路分析 第一次,修改rbp到bss上,这样下一次fgets时就可以输入到bss段上 第二次,向bss段上输入fake_link_map和rop链,利用ret2dl将puts函数解析为onegadget(64位可以这样操作,32位是根…
这篇文章受密码保护,输入密码才能阅读
题目分析 增删改查都有,存在uaf,可以直接largebin attack 禁用了open,openat,execve等 思路分析 largebin attack之后把_IO_list_all改成堆地址,接着打一个apple2即可劫持程序控制流,但是由于程序禁用了open和openat2,所以常规的orw不能用,故一下有两个思路 1.利用openat2系统调用代替open,调用号为437,其函数原型如下 ssize_t openat2(int dfd, const char* filename,…
一.思路分析 根据汇编代码能够绘制出如下栈帧: 第一次fgets(s, size_0x21, stdin);这里有一个off by one的溢出,可以将fd的低位03改成00,从而使得接下来的read变成标准读入。 下一次read(fd, &v3, size_44)时,可以刚好覆盖返回地址,因此发现栈帧溢出不够,因此考虑栈迁移。同时此处还可以修改buf指针的地址,从而控制接下来读入数据的位置。 一开始我想把buf设置到bss段,但是由于在read(fd, &v3, size_44…