目录
[🔑 WriteOwner 权限概述](#🔑 WriteOwner 权限概述)
[🛠️ WriteOwner 的底层原理](#🛠️ WriteOwner 的底层原理)
[⚔️ WriteOwner 的典型攻击利用流程](#⚔️ WriteOwner 的典型攻击利用流程)
[📚 典型案例:StreamIO 中的 WriteOwner 利用](#📚 典型案例:StreamIO 中的 WriteOwner 利用)
[🏆 内网渗透中的关键作用与防御思考](#🏆 内网渗透中的关键作用与防御思考)

WriteOwner:内网渗透中的关键ACL滥用权限
🔑 WriteOwner 权限概述
WriteOwner 是 Active Directory(AD)中一种扩展权限(Extended Right),它允许主体修改目标 AD 对象的 所有者(Owner) 属性。
在 AD 中,每个对象(用户、组、计算机、OU 等)都有一个 Owner,默认是对象的创建者。Owner 拥有特殊的隐式权限:无论 DACL(Discretionary Access Control List)如何配置,Owner 始终可以修改该对象的访问控制列表(ACL)。
通俗来说:WriteOwner 就像给你一把"改房本"的钥匙------你不能直接进屋,但能把房本过户到自己名下,过户成功后,你就成了新房主,自然能改锁、加钥匙。
🛠️ WriteOwner 的底层原理
AD 对象的权限控制基于 NTFS/AD ACL 模型,主要包含两部分:
-
Owner(所有者) Owner 拥有隐式权限:WriteDacl(修改 ACL)和 FullControl 的子集。 这意味着:即使 DACL 明确拒绝了某人,Owner 仍能修改 DACL 给自己权限。
-
DACL(访问控制列表) 显式定义谁能做什么。WriteOwner 是 DACL 中的一个 ACE(Access Control Entry),GUID 为:
BF9679C0-0DE6-11D0-A285-00AA003049E2 -
权限继承与传播 WriteOwner 可以继承(Inherited),常出现在组或 OU 上,导致大范围影响。
-
为什么危险? AD 设计时认为 Owner 是可信的(通常是管理员),因此 Owner 的权限是硬编码的,无法通过 DACL 剥夺。这就是 WriteOwner 滥用的根本原因。
⚔️ WriteOwner 的典型攻击利用流程
攻击者通常结合 PowerView 或原生 PowerShell 完成以下链条:
-
发现目标对象(如某个高权限组)授予了当前用户 WriteOwner 权限。
-
将该对象的所有者修改为自己(或自己控制的用户)。
-
作为新 Owner,修改对象的 DACL,授予自己 FullControl。
-
利用 FullControl 执行最终目标(如添加用户到高权限组)。
文本模式通讯流程图(攻击者 → AD 对象)
cpp
攻击者 (控制用户 A) AD 对象 (例如 CORE STAFF 组)
| |
| 1. 修改 Owner → A |
| Set-DomainObjectOwner |
|-------------------------------------->|
| |
| 2. AD 返回成功(Owner 变为 A) |
|<--------------------------------------|
| |
| 3. 以 Owner 身份修改 DACL |
| Add-DomainObjectAcl (Rights All) |
|-------------------------------------->|
| |
| 4. 获得 FullControl |
|<--------------------------------------|
| |
| 5. 执行最终滥用(如 Add Group Member)|
|-------------------------------------->|
📚 典型案例:StreamIO 中的 WriteOwner 利用
在 StreamIO
-
JDgodd 用户对 CORE STAFF 组拥有 WriteOwner 权限。
-
CORE STAFF 组被授予了 LAPS 密码读取权限(ms-MCS-AdmPwd)。
-
攻击者控制 nikk37 → 提取 JDgodd 密码 → 以 JDgodd 身份:
-
将 CORE STAFF 组 Owner 改为 JDgodd
-
授予 JDgodd FullControl
-
将 JDgodd 添加为 CORE STAFF 成员
-
-
JDgodd 获得 LAPS 读取权限 → 读取域控本地 Administrator 密码 → 完全控制域。
实际命令示例(PowerView)
cpp
# 存储 JDgodd 凭据
$SecPassword = ConvertTo-SecureString 'JDgodd1s@d0p3cr3@t0r' -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential('streamio\JDgodd', $SecPassword)
# 修改所有者为 JDgodd
Set-DomainObjectOwner -Identity 'CORE STAFF' -OwnerIdentity JDgodd -Credential $Cred
# 授予 JDgodd 完整 ACL
Add-DomainObjectAcl -TargetIdentity 'CORE STAFF' -PrincipalIdentity JDgodd -Rights All -Credential $Cred
# 将 JDgodd 添加为组成员
Add-DomainGroupMember -Identity 'CORE STAFF' -Members 'JDgodd' -Credential $Cred
🏆 内网渗透中的关键作用与防御思考
WriteOwner 在现代域渗透中的地位:
-
高隐蔽性:不触发 Kerberoasting 或 Golden Ticket 等传统告警。
-
链式提权:常与 LAPS、GPO、组成员等结合,形成从普通域用户到域管的完整路径。
-
真实企业常见:运维误配(如将普通组授予 WriteOwner)导致大量存在。
-
BloodHound 检测:在 BloodHound 中显示为 "WriteOwner" 边,是最常见的提权路径之一。
防御关键点:
-
严格审计 WriteOwner 权限分配。
-
使用 Tiering 模型隔离管理员权限。
-
启用 Advanced Audit Policy 监控 Owner 修改事件(Event ID 5136)。
掌握 WriteOwner 滥用,您在内网 ACL 攻击领域已达到高级水平。结合 RBCD、Shadow Credentials 等,您已具备完整现代域渗透能力!