欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]Windows Kernel Exploit 内核漏洞学习(1)-UAF

[原创]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。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功