一:前言
最近一直在研究浏览器相关的的漏洞,其中很多漏洞都是UAF,很多相关CTF的题也是关于该漏洞的,所以趁着国庆假期间,来捋一捋该方面的东西,谈谈自己对Use After Free漏洞的理解和漏洞原理的解析。
二:UAF介绍
UAF (Use After Free)漏洞是一种内存破坏漏洞,通常存在于浏览器中。该漏洞也称为”释放即free()
后重引用”漏洞,触发漏洞在于”重引用”这一步,而重引用之前要通过”占坑”方式来修改要”重引用”的指针对应内存中的数据,然后”重引用”到已经变化了的构造好的数据,导致执行任意代码。
即使浏览器的新版本加入了一系列控件与机制,使得利用这些漏洞变得更加困难。但是它们似乎仍然存在。
三:UAF漏洞原理
首先我们先从hello word 开始:)
1 |
|
直接编译并运行如下图:
通过该段代码我们可以知道UAF
的利用过程:
- 指针p0申请了一段空间,最后并将其释放,但在释放之后并不将指针置为空,故而该指针仍然可以使用p0指针;
- 申请空间p1,由于
malloc
分配的过程使得p1指向的空间为刚刚释放的p0指针的空间,构造恶意的数据将这段内存空间布局好,即覆盖了p0中的数据; - 由代码可以看到p0与p1的地址是相同的,p0与p1指向的内存为同一地址,所以此时的数据即是我们可控制的;
四:利用场景
后续。。。
五:参考
【1】https://www.cnblogs.com/alert123/p/4918041.html