堆栈上的舞蹈之释放重引用(UAF) 漏洞原理实验分析

0x01 前言

  • 释放重引用的英文名名称是 Use After Free,也就是著名的 UAF 漏洞的全称。从字面意思可以看出 After Free 就是释放后的内存空间,Use 就是使用的意思,使用释放后的内存空间。该漏洞的历史可以追溯到 2005 年,当时第一个 UAF 漏洞编号为 CVE-2005-4360,到 2008 年之后结合有关技术已经能稳定的利用了
  • 鉴于 UAF 漏洞的特殊性(需要精确的控制堆内存空间的覆盖),所以该漏洞较为成功的利用多出现在浏览器中,因为浏览器可以运行 JavaScript 代码来申请堆空间,而其他软件利用起来则非常的困难在这里插入图片描述

0x02 UAF 漏洞原理

  • 很多程序员在编写程序的时候会使用 new 或者 malloc 等方式动态的申请堆空间来存放数据,之后再使用 delete 或者 free 来释放掉。一般来说这样的方式并不会出现什么问题,但是如果程序员粗心,二次使用释放后堆空间的悬挂指针,那么就会造成安全隐患
  • 举个例子
#include <stdio.h>
#define size 32
 
int main(int argc, char **argv)
{
    
	// 申请两个 char 类型的指针 
	char *buf1; char *buf2;
	
	// 动态申请一个大小为 size 的堆空间 
	buf1 = (char *)malloc(size);
	
	// 打印出 buf1 的指针指向的地址 
	printf("buf1: 0x%p\n", buf1);
	
	// 释放 buf1 的堆 
	free(buf1);
	
	// 动态申请一个大小为 size 的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值