首先,检查一下程序的保护机制
然后,我们用IDA分析一下,在delete功能里,ptr指针存在未初始化的漏洞,因此其ptr的值可以通过其他函数来控制,造成任意地址free。
首先,检查一下程序的保护机制
然后,我们用IDA分析一下,发现是一个brain fuck语言的解释器,其中在>指令操作中,存在一个off by one,ptr指针可以指向string对象, 
C++的vector的erase函数实现如下
1 | iterator erase(iterator position){ |
就是将position+1 到 finish 之间的元素一个一个复制到从 position 指向的空间,这样,就把 position 原来指向的元素个覆盖了。同时注意到destroy(finish);释放最后一个元素,因此position位置的元素不会被释放,最后一个元素会被释放造成UAF。
首先,检查一下程序的保护机制
然后,我们用IDA分析一下,edit函数里使用了abs函数,abs函数接收4字节有符号int数,当传入0x80000000时,其返回结果仍然是0x80000000,由于4字节int正数将无法表示这么大,因此,其值是一个负数,由此,可以造成堆溢出。