big_family
看了别人很久的wp,有两种方:一种是fsop、另一种是直接将top chunk给分配到malloc_hook上
top chunk给分配到malloc_hook思路
- 首先分配若干个fast bin,在释放,由于堆的机制,当申请了一个属于small bin大小时,就会造成fastbin的合并
- 合并后就已经可以leak libc了,在由于释放的许多fasbin合并后,合并后的unsorted bin会修改物理临近的chunk的presize,所以此时可以再一次造成合并,达到overlap
- overlap后,我们可以控制fd指针,所以我们可以把chunk分配到main_arena的地方,从而修改top chunk位置位__malloc_hook附近,在写入one_gadgets即可
orange fsop
easy_note
看了wp后,感觉这道题很简单,当时比赛时,看到这道题感觉逻辑很复杂,所以没看就关了,然后赛后重新看了一遍,发现题目挺简单的,先简单说一下程序流程
- 程序首先会通过mmap函数申请一个很大的空间,并且开启了一个线程进行检查,其中mmap的第一个参数为0,所以申请的位置在libc附近
- 进入主要函数后,有add函数、edit函数、show函数
- add函数就是申请了一个0x30chunk大小后,然后在将缓冲区复制到mmap里,同时还有chunk的一些信息也存储在这,其中有一个随机函数,并在新线程中不断检查
- edit函数有很明显的堆溢出漏洞
- show函数由于size大小在随机函数前,所以我们可以直接通过修改size大小来达到泄露随机数、libc
思路
- 首先修改size泄露random和libc
- 在通过edit来劫持free_hook为onegadget即可
virtual
略
easyrop
一直对rop只是一个简单的概念,所以这道题不会写,但看了别的师傅wp后,发现有两种方法:
- srop
- rop
srop
- 有syscall ret,所以可以用返回值覆盖,然后构造srop来getshell即可,/bin/sh可以写在全局变量buf中
rop
这个还没搞明白....
以上参考的wp与思路都是doudoudedi师傅与L0ne1y师傅的博客