Windows原理深入学习系列-Windows内核提权
这是[信安成长计划]的第 22 篇文章
0x00 目录
0x01 介绍
0x02 替换 Token
0x03 编辑 ACL
0x04 修改 Privileges
0x05 参考文章
继续纠正网上文章中那些奇怪的情况和问题
0x01 介绍
虽然主题是 Windows 内核提权,但实际上还是对之前文章的一个总结,这篇文章中所用到的东西全都是前几篇文章所提到的知识点,所有的操作都是之前文章中所讲述过的,以下所有的实验都是在 Win10_x64_20H2 上进行的。
0x02 替换 Token
主要原理就是将 System 进程的 Token 替换到我们当前进程的 Token 中
先新起一个 cmd,可以看到当前是普通用户

根据之前的方法找到 Token 位置所存储的值

让 Windbg 自己来解析一下是这样子的

之后以同样的方法取到 System 进程的 Token 位置的内容
可以看到 User 是 S-1-5-18,代表了当前就是 System 账户

然后进行 Token 的替换

再回来执行一下 whoami 可以看到权限已经是 System 权限了

0x03 编辑 ACL
在之前分析 ACL 的时候,我们提到过,如果安全描述符中没有 DACL,即 DACL 为 NULL,Windows 会允许任何用户的完全访问权限。
如果我们对 winlogon 进程的 ACL 进行修改,这样我们就可以用任意进程对其进行注入了,然后派生出来一个 System 权限的进程
首先查看 winlogon 进程的安全描述符

注意这里使用的结构是 _SECURITY_DESCRIPTOR_RELATIVE,而不是 _SECURITY_DESCRIPTOR

然后对其进行修改

可以发现,已经没有了 ACL 的验证,任何人都拥有所有权

然后来尝试注入一下,但是发现并没有成功

这是因为进程的完整性等级检查所导致的,接下来我们对我们自己的 Token 进行修改

在 TOKEN 当中有一个值 MandatoryPolicy,在微软文档中可以看到解释

我们当前的值是 3,然后将其改为 0

然后再次来进行注入,成功了,权限是 System

再插句题外话,在网上找到的资料都是直接干掉了安全描述符,将整个安全描述符都置 NULL 了,说是在低版本的时候还可以,在高版本 Windows 增加了判断的验证,直接修改的话会蓝屏。
这里他们选择直接抹安全描述符的操作我没有理解,按照微软文档所描述的,这些操作是对 DACL 有效的,为什么要直接干安全描述符呢?

所以,一定要自己查资料自己实践,一定要自己查资料自己实践,一定要自己查资料自己实践。
为了能够实现提权操作,就有了第二种方案,直接对 ACE 进行修改,对于查找等各种细节,我们在前面也分析过了,这里直接来进行操作

接下来对其进行修改

这样 SID 就从原来的 S-1-5-18 变成了 S-1-5-11

可以看到已经发生了变化

然后对当前进程的 Token 进行修改

接着再来进行注入,可以发现已经是 System 权限了

0x04 修改 Privileges
其实这个操作在上一篇文章中也已经用到过了
先取出来 System 的 Privileges

再取出我们当前的 cmd 进程的 Privileges

然后将 System 的权限位都直接替换到我们的上面

在修改完成后可以看到权限都已经有了

可以看到有 SeDebugPrivilege 的权限,所以就跟上一篇文章中所提到的是一样的了,可以来注入 winlogon 进程来获得 System 权限

0x05 参考文章
1.https://mp.weixin.qq.com/s/s_3fQYe9rHLYaOuXUqJCgg
2.https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-token_mandatory_policy
3.https://docs.microsoft.com/en-us/windows/win32/secauthz/access-control-lists
Windows原理深入学习系列-Windows内核提权的更多相关文章
- Windows原理深入学习系列-信任等级检查
		这是[信安成长计划]的第 23 篇文章 0x00 目录 0x01 介绍 0x02 逆向分析 Win10_x64_20H2 0x03 WinDBG 0x04 参考文章 在之前的时候,一直以为 SACL ... 
- Windows原理深入学习系列-强制完整性检查
		这是[信安成长计划]的第 24 篇文章 0x00 目录 0x01 介绍 0x02 逆向分析 Win10_x64_20H2 0x03 总结 0x04 参考文章 最近因为一些事情,拖更了三个周,大家见谅啊 ... 
- Windows原理深入学习系列-强制完整性控制
		欢迎关注微信公众号:[信安成长计划] 0x00 目录 0x01 介绍 0x02 完整性等级 0x03 文件读取测试 0x04 进程注入测试 0x05 原理分析 Win10_x64_20H2 0x06 ... 
- Windows原理深入学习系列-访问控制列表
		这是[信安成长计划]的第 19 篇文章 0x00 目录 0x01 介绍 0x02 DACL 0x03 创建DACL 0x04 文件读取测试 0x05 进程注入测试 0x06 原理分析 Win10_x6 ... 
- Windows原理深入学习系列-访问控制列表-关于安全描述符的补充
		这是[信安成长计划]的第 20 篇文章 0x00 目录 0x01 安全描述符的结构 0x02 两个结构的不同点 0x03 真正的查询方案 0x04 参考文章 0x01 安全描述符的结构 在上一篇文章中 ... 
- Windows原理深入学习系列-特权
		这是[信安成长计划]的第 21 篇文章 0x00 目录 0x01 介绍 0x02 结构分析 0x03 进程注入测试 0x04 参考文章 0x01 介绍 在 Token 当中还存在一个特别重要的内容-- ... 
- 2018-2019-2 20165215《网络对抗技术》Exp10 Final Windows本地内核提权+Exploit-Exercises Nebula学习与实践
		目录 PART ONE :Windows本地内核提权 漏洞概述 漏洞原理 漏洞复现 windbg调试本地内核 查看SSDT表和SSDTShadow表 查看窗口站结构体信息 利用Poc验证漏洞 漏洞利用 ... 
- msf利用- windows内核提权漏洞
		windows内核提权漏洞 环境: Kali Linux(攻击机) 192.168.190.141 Windows2003SP2(靶机) 192.168.190.147 0x01寻找可利用的exp 实 ... 
- 9.CVE-2016-5195(脏牛)内核提权漏洞分析
		漏洞描述: 漏洞编号:CVE-2016-5195 漏洞名称:脏牛(Dirty COW) 漏洞危害:低权限用户利用该漏洞技术可以在全版本Linux系统上实现本地提权 影响范围:Linux内核>=2 ... 
随机推荐
- JSP response.setCharacterEncoding与response.setContentType的区别
			问题描述 昨天在参考别人的项目时,发现页面引用js,css等文件总是乱码,后来才发现是MIME类型统一设置为text/html,并且仅仅编码设置了浏览器端的解析编码.另外,可以先通过文本编辑器(如no ... 
- 为CentOS 6、7升级gcc至4.8、4.9、5.2、6.3、7.3等高版本
			CentOS 7虽然已经出了很多年了,但依然会有很多人选择安装CentOS 6,CentOS 6有些依赖包和软件都比较老旧,如今天的主角gcc编译器,CentOS 6的gcc版本为4.4,CentOS ... 
- 模仿UIApplication单例
			要求:程序一启动就创建创建对象.创建的对象只能通过share的⽅方式获取对象.不能够进行alloc 操作,当执⾏行alloc时, 程序发生崩溃 1.程序一启动的时候就创建对象.当类被加载到内存的时候就 ... 
- nodejs 文件上传服务端实现
			前段时间在做个人项目的时候,用到了nodejs服务端上传文件,现在回头把这个小结一下,作为记录. 本人上传文件时是基于express的multiparty,当然也可以使用connect-multipa ... 
- 注解的使用、拦截器使用、AOP切面使用
			Java 自定义注解及使用场景 转载: https://www.jianshu.com/p/a7bedc771204 Java自定义注解一般使用场景为:自定义注解+拦截器或者AOP,使用自定义注解来自 ... 
- springboot自动扫描添加的BeanDefinition源码解析
			1. springboot启动过程中,首先会收集需要加载的bean的定义,作为BeanDefinition对象,添加到BeanFactory中去. 由于BeanFactory中只有getBean之类获 ... 
- Solution -「多校联训」假人
			\(\mathcal{Description}\) Link. 一种物品有 长度 和 权值 两种属性,现给定 \(n\) 组物品,第 \(i\) 组有 \(k_i\) 个,分别为 \((1,a ... 
- 痞子衡嵌入式:对比MbedTLS算法库纯软件实现与i.MXRT上DCP,CAAM硬件加速器实现性能差异
			大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是MbedTLS算法库纯软件实现与i.MXRT上DCP,CAAM硬件加速器实现性能差异. 近期有 i.MXRT 客户在集成 OTA SBL ... 
- 第三章 in,not in 的理解,limit限制结果集
			IN 运算符用来判断表达式的值是否位于给出的列表中:如果是,返回值为 1,否则返回值为 0.NOT IN 的作用和 IN 恰好相反,NOT IN 用来判断表达式的值是否不存在于给出的列表中:如果不是 ... 
- java运行原理、静态代理和动态代理区分
			1.java的编译和运行原理: ■ 编译:将源文件 .java 文件,通过编译器(javac 命令) 编译成 字节码文件 .class 文件. ■ 运行,通过类加载器(以二进制流形式)把字节码加载进J ... 
