前言
这道题目反应了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:~$ cat uaf.cpp
#include
#include
#include
#include
#include
using namespace std;
class Human{
private:
virtual void give_shell(){
system("/bin/sh");
}
protected:
int age;
string name;
public:
virtual void introduce(){
cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?
立即登录/注册


微信扫码登录