Back

AD域攻击思路

基础知识

LDAP协议

即轻量目录访问协议,LDAP 之于 AD 域服务就相当于 SQL 之于 sql 服务器,在攻击链中,它主要用来做两件事:

  • 读:查询域内对象的大部分属性,枚举用户及组成员关系
  • 写:修改ACL、将用户加入某个组

相关工具:ldapsearch是底层的 LDAP 查询工具,适用于需要精确查询的场景;ldapdomaindump是针对 AD 场景进行封装的自动化枚举工具,适用于自动化批量导出 HTML 或 JSON 格式的域内信息

LDAP 本身不是认证协议,需要先经过绑定(bind)才可以读写。除开允许匿名绑定的情况,一般情况下需要通过其他认证协议来证明身份

Kerberos协议与NTLM协议

Kerberos 是 AD 默认的认证协议,由域控上的 KDC 发放票据,具体工作流程参考文章Kerberos_(protocol)
在身份认证过程中,KDC(密钥分发中心)需要用到两个组件:AS(身份验证服务器)与 TGS(票据授予服务)

简单概括流程:

  • AS-REQ/AS-REP:客户端使用获得的凭据(账号密码)向 AS 申请一张 TGT
  • TGS-REQ/TGS-REP:客户端使用 TGT 向 TGS 申请访问另一个服务,该服务需要注册 SPN(服务主体名称)

Kerberos 攻击面:

  • AS-REP Roasting:如果某个账号关闭了“需要预身份认证”,攻击者就可以在不提供密码的情况下获取 AS-REP,其中的一部分用该账号自己的 Hash 加密,可用于离线爆破密码
  • Kerberoasting:任何已认证的用户都可以为注册了 SPN 的账号申请 TGS,其中的一部分是用该服务账号的 Hash 加密的,因此可用于离线爆破密码

NTLM 是在 Kerberos 之前的传统认证方式,走challenge-response机制,工作流程参考NTLM

NTLM 攻击面:

  • PTH:即 Hash 传递,NTLM 认证可以不需要明文密码,使用secretsdumpmimikatzdump 下来的 Hash 不用破解就可以用于登录
  • 由于没有强制的防重放/防中继保护,因此一次 NTLM 请求可以被各种手段截获,可进行离线破解或中继攻击

MSRPC

MSRPC 本身只是一套框架,其中挂载了许多 Windows 服务的管理接口
LDAP 负责读写数据、Kerberos/NTLM 用于身份认证,而 MSRPC 则负责具体的系统操作

渗透常用接口:

  • SAMR:用于管理和查询 SAM 数据库,可实现用户、组和密码策略枚举等
  • LSARPC:用于与 LSA 交互,可实现 SID 和用户名的互查,读取凭据(secretsdump)等
  • DRSUAPI:处理域控之间的数据同步,可实现 DCSync 攻击

DACL与ACE

  • DACL:即某个 AD 对象安全描述符中存储的访问控制列表,由一组 ACE 构成
  • ACE:每一条规定了某个安全主体对该对象拥有的具体权限
  • 安全主体:指可由操作系统进行身份验证的实体,包括用户、组、计算机等 AD 对象‘

常见可利用 ACE 类型:

  • GenericAll:拥有对该对象的完全控制权
  • WriteDacl:有权限修改该对象的 DACL
  • WriteOwner:有权将该对象的所有者修改为当前账户
  • GetChanges 与 GetChangesAll:对域本身拥有这两个权限时,可实现 DCSync 攻击

攻击链

无凭据枚举

初步扫描结束后,需要一个可用的用户名进入下一阶段,根据目标端口开放与配置情况,可用手段包括但不限于:

  • LDAP 匿名绑定查询,可用工具:ldapsearchldapdomaindump
  • SMB 匿名/Guest访问,在共享目录中寻找可用用户名,可用工具:smbclientnxc
  • 通过 RPC 接口匿名枚举用户名,可用工具:rpcclientenum4linux(相对暴力)
  • Web 页面信息收集,用kerbrute工具的userenum模块验证,或直接上大字典爆破,走88端口

凭据获取

  • 检查预认证缺失,可直接 AS-REP Roasting,impacket-GetNPUsers
  • 密码喷洒测试,工具:kerbrutepasswordspray模块

上述内容是我个人习惯的测试流程,且并非是要严格遵守的固定步骤,具体顺序应根据目标的实际暴露面灵活调整、针对性测试
举例:靶机 Active 中,SMB 允许匿名访问共享文件夹Replication,其内容为SYSVOL的复制,因此可以优先测试是否存在 GPP-cpassword 漏洞,有概率直接获得可用凭据; 靶机 Sizzle 中,同样是 SMB 匿名可访问的共享文件夹,但该目录可写,因此思路转为写入scf文件诱导目标发起NTLM认证、捕获哈希后离线爆破,获得可用凭据

每获得一个新凭据,都应该重新扩大一轮信息收集面,不同凭据对应的权限、能读取和查询的范围都可能存在差异。具体到 LDAP 上,体现为可查询到的对象属性范围不同(例如读到了此前受限的敏感属性);具体到 SMB 上,体现为对各个共享目录的读写权限不同(此前不可读的共享变为可读,此前只读的目录变为可写)

立足点与域内枚举

获取到凭据后,若目标开放了WinRM端口,可优先尝试直接建立立足点,但也存在例外情况:

  • WinRM 监听器配置为仅接受客户端证书认证,不接受用户名密码:需要在本地生成密钥对并构造 CSR(证书签名请求),提交至 AD CS 为当前持有的凭据申请一张证书,再用该证书完成 WinRM 认证。参考靶机 Sizzle 中通过 CA 的 Web 注册服务(certsrv)为已有凭据申请证书,进而完成认证
  • 目标未开放 WinRM 端口:可寻找类似 PSWA 这类替代性的远程控制台组件,参考靶机 Search中,在可访问的 SMB 共享目录下发现了一份用于 PSWA Web页面认证的 .pfx 证书文件,离线爆破出保护密码后,即可凭该证书访问 PSWA 页面,使用凭据登录获取立足点

此外,使用凭据进行域内枚举也是具有价值的尝试,如通过LDAP绑定查询和MSRPC的接口查询,或直接使用是封装了这些操作的bloodhound采集器(例如bloodhound-pySharpHound),采集到的数据经BloodHound本体处理后,会被绘制成一张完整的权限关系图,用于识别从当前身份出发、通往域管理员的复杂攻击路径,这是 AD 权限边界分析中不可或缺的工具

权限提升

核心思路:从当前凭据出发,找到一条可触及域管理员的攻击路线

DACL滥用

利用某个账号所拥有的对高权限账号的 GenericAll、WriteDacl 等权限,直接篡改目标的授权关系

举例:靶机 Forest 中,用户svc-alfresco可通过嵌套组间接获得对域对象的 WriteDacl 权限,可自授予 DCSync 权限;靶机 Sauna 中,获取的服务账号svc_loanmgr被直接授予 DCSync 相关的权限(GetChangesGetChangesAll

内置特权组滥用

利用某些内置组虽未出现在 Domain Admins 等显式特权组中,却在执行层的某个具体功能上被赋予了系统级权限

举例:靶机 Resolute 中,用户ryan隶属于DnsAdmins组,可通过 MSRPC 中的 MS-DNSP 接口令 DNS 服务以 System 权限加载任意 dll,只要同时具备重启(或以其他方式触发)DNS 服务的权限,即可远程加载恶意 DLL 完成提权

本地存储凭据泄露

寻找第三方组件以某种方式存储在本地的高权限凭据,如 Azure AD Connect

举例:靶机 Monteverde 中,Azure AD Connect 采用 PHS 同步模式,负责同步的本地服务账号被授予了 DCSync 相关权限;该账号的凭据以加密形式存放在本地 sql server 实例中,可通过脚本读取解密还原明文密码

AD-CS ESC系列提权

要从 AD CS 获取一张证书,客户端需要先完成注册,大致流程如下:

  1. 客户端生成一对公私钥,并构造一份 CSR,其中包含了公钥、证书的主体信息与要使用的证书模板名称
  2. 客户端用私钥签名该 CSR,并将其发送给指定的企业 CA 服务器
  3. CA 在确定客户端有权限申请证书后,会查找 CSR 中指定的证书模板(本质是一个 AD 对象),检查该模板对象中的权限设置是否允许当前的客户端申请证书
  4. 权限检查通过后,CA 根据模板中定义的配置项生成证书,用自己的私钥对该证书签名并返回客户端

问题出在模板的配置上,例如存在 ESC1 配置错误的证书模板允许客户端在 CSR 中自行指定主体信息,从而能以 Administrator 或域内任意账号的名义申请证书;由于证书模板本质上是一个 AD 对象,可通过 LDAP 查询获取,因此客户端能够枚举模板并筛选存在危险配置的模板去申请

封装了上述步骤的工具有certifycertipy,均支持模板枚举、危险配置识别与证书申请/利用的完整流程

举例:靶机 Sizzle 的非预期解法便是利用一个存在 ESC4 配置错误的模板,由于低权限对象对该模板有写权限,可将该模板配置为 ESC1 的状态

AD-CS提权相关的内容相当庞大,我记下的不过是精简后的结果,
全面的系统性讲解可看Certified_Pre-Owned

总结与复盘

感谢朋友送来的一个月HTB-Labs vip,由于时间紧迫,期间只记录了Write-Up,而没有对每一台靶机进行针对性复盘,原本打算花些时间把这些WP整理成8篇打靶记录,但各靶机的考点分布相当零散,或是横跨好几个板块,或是只触及了某个主题中的冰山一角,按机器分篇记录不成体系且对沉淀经验帮助有限

因此这篇文章梳理了一个可复用的 AD 域攻击链框架,每台靶机的个中细节不过是简单记录,而非深入分析,
待到积累了足够多的案例与经验后,再成体系地总结

Licensed under CC BY-NC-SA 4.0