域渗透之 Windows Access Token 攻击


域渗透之 Windows Access Token 攻击

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


文章作者: Geekby
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Geekby !
 上一篇
常见服务类漏洞 常见服务类漏洞
常见服务类漏洞FTP 漏洞FTP 协议介绍FTP(File Transfer Protocol,文件传输协议)是 TCP/IP 协议组中的协议之一。FTP 协议包括两个组成部分,其一为 FTP 服务器,其二为 FTP 客户端。其中 FTP
下一篇 
NTLM 中间人攻击 NTLM 中间人攻击
NTLM 中间人攻击NTLM Relay,中间人攻击或重放攻击是一个意思。 B 是一个 smb 服务器,A 来进行认证,B 将 A 的认证信息转发到 C 上,如果 A 的凭证在 C 上认证成功就能进行下一步操作,如创建服务执行命令。如果在域
2020-05-09
  目录