您当前的位置: 首页 > 

合天网安实验室

暂无认证

  • 0浏览

    0关注

    748博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

听说你还不会UAF?

合天网安实验室 发布时间:2020-05-26 10:06:35 ,浏览量:0

前言 

这道题目反应了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             
关注
打赏
1665306545
查看更多评论
0.0381s