PWNABLE——uaf

核心考察

1.C++类内存布局

C++类实例的内存块首地址存放vfptr(虚表指针)

2.uaf漏洞
在内存释放后,不会被“真正”释放。当申请相似大小空间内存时,刚”释放”的内存被优先分配。
个人觉得FIFO的说法不准确,在kali linux x64下,64位程序中,当分配的内存大小小于1024时(Fast chunks),是LIFO;当分配的内存大小大于1024(实际测试是1024+8)(Small chunks),是FIFO。(32位程序的分界点貌似是1024-4)
这里的I指的是,内存被free时从链表前段添加,o是指内存被重新new时,从链表后段去除。
当再次通过指针访问”释放”内存时,将发生不可预知的情况。(取决于类实例内存数据如何被改动)

本题思路

本题通过uaf改写释放后对象的虚表指针,将虚表指针“移位”,从而执行我们想要的虚函数。
POC

python -c "print '虚表地址-偏移'+'\x00'*填充个数" > /tmp/temp
cd /home/uaf/uaf
./uaf 对象大小 /tmp/temp
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容