介绍

在 Windows 中我们使用 SID 来标识操作系统中的每个实体,每个 用户/用户组/计算机/服务 都具有 SID,并且 SID 具有唯一性

SID 的组成:

  1. S-1-5-21-1463437245-1224812800-863842198-1128

:::color3

  • S : 表示 SID
  • 1 : 表示版本,始终为 1
  • 5 : 表示 Windows 安全权威机构
  • 21-1463437245-1224812800-863842198 : 子机构值,通常用来表示区域
  • 1128 : 相对标识符

:::

SID - 图1

SID Name
S-1-1-0 World
S-1-3-0 Creator Owner
S-1-5-18 Local SYSTEM
S-1-5-11 Authenticated Users
S-1-5-7 Anonymous

AD 域的 SID

在 AD 域中, 也是使用 SID 来标识一个对象,在 LDAP 中对应的属性名称为: objectSid

SID - 图2

我们需要重点关注的是 LDAP 上的 SIDHistory 属性:

SIDHistory 是为了支持域迁移而设置的属性,当一个对象从一个域迁移到另一个域时,会在新域创建一个新的SID作为该对象的objectSid,在之前域中的SID会添加到该对象的sIDHistory属性中,此时该对象将保留在原来域的SID对应的访问权限

比如此时域 A 有一个 User1 ,其 LDAP 上的属性为:

cn objectSid sIDHistory
User1 S-1-5-21-3464518600-3836984554-627238718-2103 null
当我们将用户User1从域A迁移到域B,那么他的LDAP属性将变为:
cn objectSid sIDHistory
User1 S-1-5-21-549713754-3312163066-842615589-2235 S-1-5-21-3464518600-3836984554-627238718-2103
此时当User1访问域A中的资源时,系统会将目标资源的DACL与User1的sIDHistory进行匹配,也就是说User1仍具有原SID在域A的访问权限 值得注意的是,该属性不仅在两个域之间起作用,它同样也可以用于单个域中,比如实战中我们将一个用户A的sIDHistory属性设置为域管的objectSid,那么该用户就具有域管的权限 另一个实战中常用的利用,是在金票中添加Enterprise Admins组的SID作为sIDHistory,从而实现同一域林下的跨域操作,这个将在后面关于金票的文章中阐述

参考

从mimikatz学习Windows安全之访问控制模型(二) - FreeBuf网络安全行业门户