很久没写题目了,所以最近准备重新开始练起来。
该题很考自己对libc的malloc了解,虽然逆过一遍,但还是有些不熟悉比如合并的函数。
不过看了hav1k师傅的博客后,恍然大悟
记录下思路
- 由于是ubuntu16,而且没有开PIE,所以可以进行unlink
- 其次由于释放后未变0,所以我们先申请一个小chunk,再把该位置释放后,在用malloc_consolidate来将fast bin里的函数放入unsorted bin中,后续的操作会放入small bin中
- 由于delete函数里面没有检查机制,所以我们可以再一次delete,造成double free,由于该chunk再fast bin何unsorted bin中,所以我们可以把chunk申请回来,再伪造一个chunk,进行unlink
- 此时指针已经指向自身的-0x18处,我们就操控了中等的chunk与小型的chunk,后面就是常规操作,劫持free为puts,得到libc,接着再劫持别的函数来getshell 即可