这是[信安成长计划]的第 21 篇文章

0x00 目录

0x01 介绍

0x02 结构分析

0x03 进程注入测试

0x04 参考文章

0x01 介绍

在 Token 当中还存在一个特别重要的内容——Privileges,它也是权限检查中的一个,当用户去执行一些特权操作的时候,会检查这个位置,看是否有执行的权限。

通过滥用一些特权指令,可以达到权限提升等目的,最常见的一个特权就是 SeDebugPrivilege,除此之外,还有很多的特权

这些权限都可以通过 AdjustTokenPrivileges 来提升权限,代码可以参考微软给的例子

https://docs.microsoft.com/en-us/windows/win32/secauthz/enabling-and-disabling-privileges-in-c--

可以在命令行中查看当前所拥有的特权

其中 SeChangeNotifyPrivilege 是默认会启用的一个特权,即使是 Low 完整性等级的也会有这个特权

0x02 结构分析

可以在 Windbg 当中查看到一下,就用刚刚启动的 cmd-low.exe 来进行

查看它的 TOKEN 结构

可以看到在 0x40 的位置就是 Privileges,继续看它的结构

这三个值的每一位都代表着一个权限,我们重点要看的是 Present 和 Enabled,Present 决定了哪些位是当前可以用,Enabled 则决定了是否启用

可以看到当前是有五个权限位的,在根据上面的 Enabled 可以知道,只有一个权限位是打开的

那这每一位到底代表着什么特权,我没有在微软的文档中找到描述,但是在 Windbg 中找到了另外的方案

我们使用 !token 命令让 Windbg 自己解析一下,可以看到有五个权限位,并且只有一个是启用的,数位数也刚好与上面所解析到的一致

既然通过这样的方法可以知道位置和对应的权限,那么就可以通过全部启用,然后再让 Windbg 来进行解析,就可以得到所有的权限位了

然后就可以看到所有的权限位和对应的权限了

在查资料的时候,还发现了一个情况,在 AdjustTokenPrivileges 的时候,会进行额外的检查,所能启用的权限与进程的完整性挂钩了

文章我贴到最后的参考链接当中

0x03 进程注入测试

在正常情况下,我们当前作为低完整性等级是不能够注入高完整性等级的进程的,在之前的文章中也已经测试过了

在 OpenProcess 的时候就直接出问题了,这是符合我们的预期的

但是在 OpenProcess 当中还有这样的一句话,如果给了 SeDebugPrivilege 权限,那么就会直接授予

这里为了方便起见,直接使用 Windbg 来进行修改

可以看到确实启用了

然后再进行注入,可以发现成功了

如果将其注入到 winlogon 进程当中,再创建一个 cmd,因为继承关系,我们也就拥有了 system 权限

0x04 参考文章

1.https://docs.microsoft.com/en-us/windows/win32/secbp/changing-privileges-in-a-token

2.https://docs.microsoft.com/en-us/windows/win32/secauthz/privilege-constants

3.https://docs.microsoft.com/en-us/windows/win32/secauthz/enabling-and-disabling-privileges-in-c--

4.https://docs.microsoft.com/en-us/windows/win32/secauthz/privileges

5.https://book.hacktricks.xyz/windows/windows-local-privilege-escalation/privilege-escalation-abusing-tokens

6.https://github.com/gtworek/Priv2Admin

7.http://showlinkroom.me/2020/05/02/Windows-Via-C-C-note-4-2/

8.https://paper.seebug.org/1743/

9.https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-openprocess

Windows原理深入学习系列-特权的更多相关文章

  1. Windows原理深入学习系列-信任等级检查

    这是[信安成长计划]的第 23 篇文章 0x00 目录 0x01 介绍 0x02 逆向分析 Win10_x64_20H2 0x03 WinDBG 0x04 参考文章 在之前的时候,一直以为 SACL ...

  2. Windows原理深入学习系列-强制完整性检查

    这是[信安成长计划]的第 24 篇文章 0x00 目录 0x01 介绍 0x02 逆向分析 Win10_x64_20H2 0x03 总结 0x04 参考文章 最近因为一些事情,拖更了三个周,大家见谅啊 ...

  3. Windows原理深入学习系列-强制完整性控制

    欢迎关注微信公众号:[信安成长计划] 0x00 目录 0x01 介绍 0x02 完整性等级 0x03 文件读取测试 0x04 进程注入测试 0x05 原理分析 Win10_x64_20H2 0x06 ...

  4. Windows原理深入学习系列-访问控制列表

    这是[信安成长计划]的第 19 篇文章 0x00 目录 0x01 介绍 0x02 DACL 0x03 创建DACL 0x04 文件读取测试 0x05 进程注入测试 0x06 原理分析 Win10_x6 ...

  5. Windows原理深入学习系列-访问控制列表-关于安全描述符的补充

    这是[信安成长计划]的第 20 篇文章 0x00 目录 0x01 安全描述符的结构 0x02 两个结构的不同点 0x03 真正的查询方案 0x04 参考文章 0x01 安全描述符的结构 在上一篇文章中 ...

  6. Windows原理深入学习系列-Windows内核提权

    这是[信安成长计划]的第 22 篇文章 0x00 目录 0x01 介绍 0x02 替换 Token 0x03 编辑 ACL 0x04 修改 Privileges 0x05 参考文章 继续纠正网上文章中 ...

  7. Git 之Windows环境下学习系列

    Git .SVN .TFS   相同点 不同点 Git     版本控制 优点: 分布式版本控制.无需联网就能版本提交 开源 缺点 入门学习难度高 SVN   优点: 集中式版本控制. 个人开源 缺点 ...

  8. 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

    本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...

  9. 转:深入Java集合学习系列:HashSet的实现原理

    0.参考文献 深入Java集合学习系列:HashSet的实现原理 1.HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持.它不保证set 的迭代顺序:特 ...

随机推荐

  1. java多线程中同步的问题?

    一.通过模拟网络延迟,解决同步的问题. package com.zxf.demo; public class G01 implements Runnable{ private int num=10; ...

  2. React Transition css动画案例解析

    实现React Transition Css动画效果 首先在项目工程中引入react-transition-group: npm install react-transition-group --sa ...

  3. canvas绘制“飞机大战”小游戏,真香!

    canvas是ArkUI开发框架里的画布组件,常用于自定义绘制图形.因为其轻量.灵活.高效等优点,被广泛应用于UI界面开发中. 本期,我们将为大家介绍canvas组件的使用. 一.canvas介绍 1 ...

  4. Objects、Arrays、Collectors、System工具类

    Objects类 定义 位于java.util包中,JDK1.7以后操作对象的类,对对象的空,对象是否相等进行判断. 常用方法 1.public static boolean equals(Objec ...

  5. 普通web项目一直无法访问页面,直接报404

    错误:普通web项目一直无法访问页面,直接报404 原因:写了一个过滤乱码的类: 而在类上加了WebServlet注解,其实应该是WebFilter注解, 总结:基础不扎实,有些东西只会用,而不知道原 ...

  6. bom-offset

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. java基础之抽象类的介绍

    抽象类的特点: 1.当方法只有声明没有具体实现的时候,需要用abstract修饰符修饰.抽象方法必须定义在抽象类当中,所以抽象类也需要用abstract修饰 2.抽象类不可以被实例化,为什么呢?   ...

  8. Math 数学类

    /* Math 数学类, 主要是提供了很多的数学公式. abs(double a) 获取绝对值 ceil(double a) 向上取整 floor(double a) 向下取整 round(float ...

  9. Python—常用语句 if for while

    Python-常用语句 判断语句 循环语句 break语句和continue语句 判断语句: if语句是最简单的添加判断语句,它可以控制程序的执行流程. if结构: if条件: 要执行的操作 ... ...

  10. 类(静态)变量和类(静态)static方法以及main方法、代码块,final方法的使用,单例设计模式

    类的加载:时间 1.创建对象实例(new 一个新对象时) 2.创建子类对象实例,父类也会被加载 3.使用类的静态成员时(静态属性,静态方法) 一.static 静态变量:类变量,静态属性(会被该类的所 ...