UAF漏洞
Use After Free
利用原理
UAF漏洞是一块内存被释放后又被使用。
操作系统将新申请的内存的指针指向了已经被释放的内存且被释放的内存指针不为null,则会出现悬挂指针,在新申请的块写入数据,就会覆盖已经被释放的内存块
1、申请一块存储int类型的内存,大小为4字节,标记为test,赋值255
2、释放test
3、申请一块和test大小一样的内存4字节,标记为hacker 赋值1024
4、看结果显示hacker的数值,已经覆盖了test的数值
代码如下
#include <iostream>
int main()
{
system("chcp 65001");
using namespace std;
int *test;
cout << "---------申请test内存块----------------" << endl;
test=new int;
*test=255;
cout << "test 地址: " << test << endl;
cout << "test 值: " << *test << endl;
cout << "---------释放test内存块----------------" << endl;
delete test;
int *hacker;
cout << "-----------申请hacker内存块-------------" << endl;
hacker=new int; //申请与test块相同大小的内存块
*hacker=1024;
cout << "hacker 地址: " << hacker << endl;//和之前test块地址是一样的,由于内存的管理机制,我们申请的内存块与我们所释放的内存块地址是一样的
cout << "hacker 值: " << *hacker << endl;
cout << "test 值: " << *test << endl; //发现hacker块的值覆盖了test块的值
delete hacker;
system("pause");
return 0;
}
下面是程序的运行情况