[原创]Windows Kernel Exploit 内核漏洞学习(1)-UAF
0x00:前言
最近重新开始了我的Windows内核之旅,这是我总结的Windows kernel exploit系列的第一部分,前一篇我们讲了如何配置环境,这一篇我们开始实战,从简单的UAF入手,为什么第一篇是UAF呢,因为我参考的是wjllz师傅的文章,他写的非常好,这里我记录一下自己的学习过程供大家参考,第一篇我尽量写的详细一些,实验环境是Windows 7 x86 sp1,研究内核漏洞是一件令人兴奋的事情,希望能通过文章遇到更多志同道合的朋友,看此文章之前你需要有以下准备:
- Windows 7 x86 sp1虚拟机
- 配置好windbg等调试工具,建议配合VirtualKD使用
- HEVD+OSR Loader配合构造漏洞环境
0x01:漏洞原理
提权原理
首先我们要明白一个道理,运行一个普通的程序在正常情况下是没有系统权限的,但是往往在一些漏洞利用中,我们会想要让一个普通的程序达到很高的权限就比如系统权限,下面做一个实验,我们在虚拟机中用普通权限打开一个cmd然后断下来,用!dml_proc命令查看当前进程的信息
kd> !dml_proc Address PID Image file name 865ce8a8 4 System 87aa9970 10c smss.exe 880d4d40 164 csrss.exe 881e6200 198 wininit.exe 881e69e0 1a0 csrss.exe ... 87040ca0 bc0 cmd.exe
我们可以看到System的地址是 865ce8a8 ,cmd的地址是 87040ca0 ,我们可以通过下面的方式查看地址中的成员信息,这里之所以 +f8 是因为token的位置是在进程偏移为 0xf8 的地方,也就是Value的值,那么什么是token?你可以把它比做等级,不同的权限等级不同,比如系统权限等级是5级(最高),那么普通权限就好比是1级,我们可以通过修改我们的等级达到系统的5级权限,这也就是提权的基本原理,如果我们可以修改进程的token为系统的token,那么就可以提权成功,我们手动操作一次下面是修改前token值的对比
kd> dt nt!_EX_FAST_REF 865ce8a8+f8 +0x000 Object : 0x8a201275 Void +0x000 RefCnt : 0y101 +0x000 Value : 0x8a201275 // system token kd> dt nt!_EX_FAST_REF 87040ca0+f8 +0x000 Object : 0x944a2c02 Void +0x000 RefCnt : 0y010 +0x000 Value : 0x944a2c02 // cmd token
我们通过ed命令修改cmd token的值为system token
kd> ed 87040ca0+f8 8a201275 kd> dt nt!_EX_FAST_REF 87040ca0+f8 +0x000 Object : 0x8a201275 Void +0x000 RefCnt : 0y101 +0x000 Value : 0x8a201275
用whoami命令发现权限已经变成了系统权限
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
