pwnable.kr题解之uaf

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

前言:
这道题目反应了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:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值