HITCON-training lab10 wp

0x00

开始堆利用的学习了,做一道HITCON-training的题目,UAF漏洞利用。

0x01

看保护:

在这里插入图片描述
一个32位的开了canary和nx保护
0x02
ida分析
在这里插入图片描述
一个菜单有加、减、查看功能
看add是什么样子
在这里插入图片描述1-2 .先会malloc一个8字节的空间,指向print_note_content函数,用来打印content。
3-4 .再malloc一个size用来存放你写入的content
再看看del_note函数。可以看到这里free了两次,第一次free掉content。第二次free掉note。我们发现并没有把note置null。导致free后我们还可以再次使用。
在这里插入图片描述
在这里插入图片描述
这里还有一个cat flag的函数
这里放上网上一个师傅写的,我感觉写的挺明白的
存在UAF漏洞。
1.首先分配note0,content大小为32字节。
2.再次分配note1,content大小为32字节。
3.free(note0),存入fast bin chunk(fastbins 是单向链表)
4.free(note1),存入fast bin chunk
5.再次分配note2,content大小为8字节。因为note1是最后free的,所以应该在fastbin的末尾,当分配note2时,第一个malloc会先把note1的八个字节拿过来,当第二次malloc(8)的时候,会把note0的八个字节拿过来,因为当malloc的时候,首先会匹配大小相同的chunk。
6.此时,note2的content指向note0->put。我们在note2的content输入magic的地址,则覆盖note0->put的地址,即当我们调用note->put打印消息时,就会调用magci函数。
exp网上大都一样我就不贴了。
一开始我一直有一个疑问就是为啥要malloc两次note。一次不行吗?
我这里试了一下:
在这里插入图片描述好像是可以的。。。。 但具体不知道为什么,望路过的大佬们帮帮刚入门的萌新吧