0%

首先,检查一下程序的保护机制

然后,我们用IDA分析一下,在delete功能里,ptr指针存在未初始化的漏洞,因此其ptr的值可以通过其他函数来控制,造成任意地址free。

阅读全文 »

首先,检查一下程序的保护机制

然后,我们用IDA分析一下,test功能里abs函数存在溢出,由此可以造成下标越界,进而可以泄露程序的地址。

阅读全文 »

首先,检查一下程序的保护机制

然后,我们用IDA分析一下,发现是一个brain fuck语言的解释器,其中在>指令操作中,存在一个off by one,ptr指针可以指向string对象,

阅读全文 »

C++的vector的erase函数实现如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
iterator erase(iterator position){
if (position + 1 != end())
{
// 把从 position+1 到 finish 之间的元素一个一个复制到从 position 指向
//的空间,这样,就把 position 原来指向的元素个覆盖了

copy(position + 1, finish, position);
}

--finish;

destroy(finish);

return position;
}

就是将position+1 到 finish 之间的元素一个一个复制到从 position 指向的空间,这样,就把 position 原来指向的元素个覆盖了。同时注意到destroy(finish);释放最后一个元素,因此position位置的元素不会被释放,最后一个元素会被释放造成UAF。

阅读全文 »

首先,检查一下程序的保护机制

然后,我们用IDA分析一下,add函数中,如果字符串长度大于15,则单独malloc一块内存存放字符串,否则直接存结点里。

阅读全文 »

首先,检查一下程序的保护机制

然后,我们用IDA分析一下,edit函数里使用了abs函数,abs函数接收4字节有符号int数,当传入0x80000000时,其返回结果仍然是0x80000000,由于4字节int正数将无法表示这么大,因此,其值是一个负数,由此,可以造成堆溢出。

阅读全文 »