好久没写题目了,因此最近准备从新开始练起来。shell
该题很考本身对libc的malloc了解,虽然逆过一遍,但仍是有些不熟悉好比合并的函数。ubuntu
不过看了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 便可