zoukankan      html  css  js  c++  java
  • Windows Access Token提权

    前言:记录这篇文章更多的还是想初步的了解下Windows Access Token的概念

    Windows Token介绍:

    Windows Token其实叫Access Token(访问令牌),它是一个描述进程或者线程安全上下文的一个对象。不同的用户登录计算机后, 都会生成一个Access Token,这个Token在用户创建进程或者线程时会被使用,不断的拷贝。

    这也就解释了A用户创建一个进程而该进程没有B用户的权限。


    Access Token种类:

    1、主令牌

    2、模拟令牌

    一般情况下,用户双击运行一个程序,都会拷贝explorer.exe的Access Token,这句话自己突然想起来某些api函数基于反调试的时候的判断点。比如在程序启动后,会有一个STARTUPINFO的结构体变量,来保存程序启动的信息,我们通过其中类型为DWORD的参数的改变来检测程序是正常运行还是在调试器中运行的。

    提权的利用点:当用户注销后,系统将会使主令牌切换为模拟令牌,而模拟令牌不会被清除,只有在重启机器后才会清除

    最重要的点:正常的令牌模拟和窃取,都是需要过了 UAC 的管理员/SYSTEM 权限。并且由于权限的问题,当前账号只能看到自己的访问令牌和比自己权限低的账号的访问令牌,也就是说这种提权方法不适用于 低权限 -> 高权限


    Windows Access Token产生过程:

    每个进程创建时都会根据登录会话权限由LSA(Local Security Authority)分配一个Token(如果CreaetProcess时自己指定了 Token, LSA会用该Token, 否则就继承父进程Token进行运行)


    Windows Access Token组成:

    用户帐户的安全标识符(SID)
    用户所属的组的SID
    用于标识当前登录会话的登录SID
    用户或用户组所拥有的权限列表
    所有者SID
    主要组的SID
    访问控制列表
    访问令牌的来源
    令牌是主要令牌还是模拟令牌
    限制SID的可选列表
    目前的模拟等级
    其他统计数据


    Windows Access Token – SID (Security Identifiers)安全标识符:

    安全标识符是一个唯一的字符串,它可以代表一个账户、一个用户 组、或者是一次登录。通常它还有一个SID固定列表,例如 Everyone 这种已经内置的账户,默认拥有固定的SID。

    SID的表现形式:

    域SID-用户ID
    计算机SID-用户ID
    SID列表都会存储在域控的AD或者计算机本地账户数据库中。


    提权的利用过程(这里的提权可以从域管的令牌进行下手,并且列出令牌需要高权限的操作,可以从administrator->system或domain admins):

    1、进行administrator上线,列出当前的主令牌

    2、进行窃取system权限的模拟令牌,提权成功

    参考文章:https://payloads.online/archivers/2018-11-30/1#windows-access-token-简介

  • 相关阅读:
    explicit构造函数
    Windows内核编程之:结构化异常处理
    驱动对象DRIVER_OBJECT
    Windows内核编程之:内存管理
    Windows内核编程之:链表
    Windows内核编程之:返回状态值
    设备对象DEVICE_OBJECT
    数据恢复
    Windows内核编程之:数据类型
    Windows内核编程之:检查内存的可用性
  • 原文地址:https://www.cnblogs.com/zpchcbd/p/12235193.html
Copyright © 2011-2022 走看看