Use After Free漏洞浅析

一:前言

最近一直在研究浏览器相关的的漏洞,其中很多漏洞都是UAF,很多相关CTF的题也是关于该漏洞的,所以趁着国庆假期间,来捋一捋该方面的东西,谈谈自己对Use After Free漏洞的理解和漏洞原理的解析。

二:UAF介绍

UAF (Use After Free)漏洞是一种内存破坏漏洞,通常存在于浏览器中。该漏洞也称为”释放即free()后重引用”漏洞,触发漏洞在于”重引用”这一步,而重引用之前要通过”占坑”方式来修改要”重引用”的指针对应内存中的数据,然后”重引用”到已经变化了的构造好的数据,导致执行任意代码。

即使浏览器的新版本加入了一系列控件与机制,使得利用这些漏洞变得更加困难。但是它们似乎仍然存在。

三:UAF漏洞原理

首先我们先从hello word 开始:)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>

int mian()
{
char *p0;
p0=(char *)malloc(sizeof(char)*10); //指针p0申请内存;
memcpy(p0,"hello",10);
printf("p0 Addr:%x,%s\n",p0,p0); //打印其地址与值;
free(p0); //释放p0;
char *p1;
p1==(char *)malloc(sizeof(char)*10);
memcpy(p1,"word",10);
printf("p1 Addr:%x,%s\n",p1,p0);
return 0;
}

直接编译并运行如下图:

通过该段代码我们可以知道UAF的利用过程:

  1. 指针p0申请了一段空间,最后并将其释放,但在释放之后并不将指针置为空,故而该指针仍然可以使用p0指针;
  2. 申请空间p1,由于malloc分配的过程使得p1指向的空间为刚刚释放的p0指针的空间,构造恶意的数据将这段内存空间布局好,即覆盖了p0中的数据;
  3. 由代码可以看到p0与p1的地址是相同的,p0与p1指向的内存为同一地址,所以此时的数据即是我们可控制的;

四:利用场景

后续。。。

五:参考

【1】https://www.cnblogs.com/alert123/p/4918041.html

【2】https://www.anquanke.com/post/id/84359

【3】https://www.anquanke.com/post/id/85281