域渗透之 Windows Access Token 攻击

发布于 2024-12-11 02:36:16 字数 4176 浏览 10 评论 0

Windows Access Token 简介

Windows Access Token 概念

微软官方的定义如下:

An access token is an object that describes the security context of a process or thread.The information in token includes the identity and privileges of the user account associatedwith the process or thread.

Windows Access Token(访问令牌),它是一个描述进程或者线程安全上下文的一个对象。不同的用户登录计算机后,都会生成一个 Access Token,这个 Token 在用户创建进程或者线程时会被使用,不断的拷贝,这也就解释了 A 用户创建一个进程而该进程没有 B 用户的权限。当用户注销后,系统将会使主令牌切换为模拟令牌,不会将令牌清除,只有在重启机器后才会清除。

Access Token 分为两种(主令牌、模拟令牌)

Windows Access Token 分类

1、primary token 这种令牌通常用于本地及远程 RDP 登录

2、impersonation token 这种则通常用于各种非交互式的登录,比如,netuse,wmi,winrm 等等

登录方式

  • 交互式登录
    • console login (type 2)
    • rdp login (type 10)
    • psexec (type 2)
  • 网络登录
    • wmi (type 3)
    • winrm (type 3)

Windows Access Token 组成

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

关于 SID

安全标识符(Security identifiers),简称为 SID,分别是 OwnerSidGroupSid 。 所谓 SID 就是每次当我们创建一个用户或一个组的时候,系统会分配给该用户或组一个唯一 SID,当你重新安装系统后,也会得到一个唯一的 SID。SID 是唯一的,不随用户的删除而分配到另外的用户使用。请记住,SID 永远都是唯一的。SIF 是由计算机名、当前时间、当前用户态线程的 CPU 耗费时间的总和三个参数决定以保证它的唯一性。

例:S-1-5-21-1763234323-321265751-1234321321-500(whoami/user)

Windows Access Token 产生过程

用户使用凭据(用户密码) 进行认证 –> 登录 session 创建 –> windows 返回用户的 sid 和用户所在组的 sid –> LSA 创建一个 Access token —> 使用凭据成功认证 –> 登录 session —> token —> 进程、线程

后渗透中的令牌模拟

cobalt strike 模拟令牌

使用 steal_token 模拟令牌, rev2self 恢复令牌

metasploit 模拟令牌

incognito 模块,同样 rev2self 恢复令牌

获取任意进程的令牌权限

手动令牌模拟

模拟过程:

openprocess() –> openprocesstoken() –> impersonateloggedonuser() –> duplicatetokenex() –> createprocesswithtokenw()

openprocess

openprocesstoken

impersonateloggedonuser

duplicatetokenex

createprocesswithtokenw

Bypass Protect Process

并不是所有的进程都是可以被操作的

只获取 system 权限的进程:

get-token where-object {$_.username-eq 'NT AUTHORITY\SYSTEM' -and $_ownername -ne 'NT AUTHORITY\SYSTEM'} | select-object processname, processsid | format-table

然后经过测试发现像 csrss、 service、 wininit、smss 等 token 获取失败。

使用 Access Token 进行 BypassUAC

Fuzzy Security 利用 Windows 令牌实现 UAC 绕过

https://github.com/fuzzysecurity/powershell-suit/blob/master/UAC-TokenMagic.ps1

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

浪漫人生路

暂无简介

文章
评论
29 人气
更多

推荐作者

李珊平

文章 0 评论 0

Quxin

文章 0 评论 0

范无咎

文章 0 评论 0

github_ZOJ2N8YxBm

文章 0 评论 0

若言

文章 0 评论 0

南…巷孤猫

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文