前言:
这道题目反应了uaf的基本原理,pwn入门必做的题目,如果这一块了解的不够透彻,直接去打现在涉及各种奇技淫巧的pwn,肯定会被绕晕掉。所以为了照顾萌新(其实是我自己菜)把这道题目单独拿出来写一下。
这是一道uaf的题目,把二进制文件拉到本地来研究

在分析前,先简单说一下c++的虚函数和uaf的前置知识
在c++中,如果类中有虚函数,那么这个类就会有一个虚函数表的指针vfptr,而子类会继承。

uaf的原理:
在释放内存后未将指向原内存的指针置为null,use after free的意思就是在释放以后进行use。
举个简单的例子:

原来的p指针指向一个结构体,当结构体没释放之后没有将p置为null,如果我们重新分配原结构体大小的空间,则指针p可以继续使用。但是再次使用时,因为p指针指向的内存包含的数据不是原来的数据了,此时的引用对于正常程序来说是有风险的,不过对于黑客来说,反而方便其进行控制。比如可以进行这些攻击:
任意地址读:puts(p->name)—————>puts(char*(addr2))
任意地址写:strcpy(p->name,data);——>strcpy((char *)(addr2),data)
控制流劫持:p->func()———————>call addr3
这次的uaf题目基本相当于任意地址写
先看源码
uaf@pwnable:

本文深入解析UAF(Use After Free)漏洞原理,通过C++虚函数与内存管理探讨,结合PWN题目的实际操作,演示如何利用UAF实现任意地址读写及控制流劫持,最终获取shell权限。
最低0.47元/天 解锁文章
1260

被折叠的 条评论
为什么被折叠?



