祥云杯2022-unexploitable - wp
祥云杯2022-unexploitable - wp
题目分析
分析一下文件,发现只有一个read函数来读取数据,但是给的空间非常大,基本上是随便溢出了。但是还是出了点小问题,刚好这是我第一道爆破的题,记录一下,以后要是忘了还可以回来看看
exp
看栈上返回地址的后面第二位是libc_start_main一定偏移的地址,于是我们可以通过部分覆盖法来将该地址覆盖为one_gaget的地址,看师傅们的wp
- 有用vsyacall来使返回地址滑到libc那里去的
- 也有通过返回到push ebp之后的地址使返回地址的上一位被弹出的
- 好像还能用ret2_dl_runtime来做(还没有自己试过)
前两种方法都是爆破法来求解,但是爆破的概率有点小,需要爆破三位。全凭运气了,概率为4096分之一。但还是写一下。最近发现爆破法用得挺多的。
通过ret_push_after 的exp在下面
1 | from pwn import * |
这是通过vsyscall的方法来滑到libc那里(但是不建议用,因为vsyscall仅在部分发行版上使用,例如unbuntu 16.04,现在已经被vdso替代了)
1 | from pwn import * |
小插曲
在调试这个题的源文件的时候,发现竟然不允许我输入,直接跳过read的系统调用了,导致我无法调试,后来才发现是我关闭了本身自带的ASLR,然后他本身的输入太大了,导致系统调用报错了,要么开启ASLR就能运行,要么输入的size不大于0x1000即可,具体原因还没有debug出来,要是有师傅知道可以联系我一下。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Daily Study!