然而对比 check 和 vm 中的执行过程,可以找到一条指令没有进行校验,用该指令加载字符串作为对象(越界)即可。
堆风水 TBC.
babyaegis
题目背景
题目开启了 address sanitizer
delete 函数可存在 UAF
关键位置
secret 函数写一个地方为0
通过一些操作,制造出一个 UAF
利用 uaf 进行任意地址读写
__sanitizer::Die()函数内部call rax 可挟持程序流程
babyheap
题目背景
题目实现了一个简单的堆分配,有Allocate,Update,Delete,View四个功能
题目限制了堆块大小只能是0x00 - 0x58
关键位置
题目漏洞在于Update中,存在着一个null off by one,但是这里没有unsorted bin,而想要unsorted bin需要触发malloc_consolidate来让多余的fast bin合并成unsorted bin,这一第一个问题就是,top比较大,很难触发malloc_consolidate,解决思路:利用null off by one来缩小top chunk,当top小到无法满足分配的时候,就会触发malloc_consolidate。
由于是libc 2.28的库,在null off by one攻击之后,可以使堆块重叠,如何获取shell是一个难题,在libc 2.28中,io vtable被废,所以劫持unsorted bin没有作用,而又不能申请0x60的块,这样无法直接分配到malloc hook位置,解决方案,任然选择利用fastbin attack,这里利用堆块高位0x55和0x53来最为合法的size,直接分配堆块到main arena,而top的指针就在fastbin下面,这样可以修改top指针,指向某个合法的位置,达到任意内存分配。