概述 (Overview)
- MACHINE TAGS
- Windows
- Kerberoasting
- Active Directory
- Powershell
攻击链 (Kiillchain)
通过 nmap 识别目标服务开发端口及服务,使用 smbclient 获取到域成员的 gpp password,最后使用该域成员账号获取到 administrator 的 SPN 票据。
TTPs (Tactics, Techniques & Procedures)
- nmap
- smbmap & smbclient
- Kerberoasting
- crackmapexec
- impacket
- john
阶段1:枚举
开局是使用 Nmap 对目标进行端口枚举:
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: 2021-07-07 12:55:39Z)
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
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
Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows_server_2008:r2:sp1, cpe:/o:microsoft:windows
Host script results:
| smb2-security-mode:
| 2.02:
|_ Message signing enabled and required
| smb2-time:
| date: 2021-07-07T12:56:40
|_ start_date: 2021-07-07T12:53:32
可以获悉到目标服务器是 Windows Server 2008 R2 SP1
,运行着 DNS 服务、Kerberos 服务并且存在 Active Directory LDAP
服务,这些信息综合在一起说明目标机器是一台域控服务器(这个我熟,Forest ‘https://jgeek.cn/archive/id/78.html’ 这台机器刚做过)。这里域名称是:Domain: active.htb
阶段2:工具和利用
阶段2.1:smb共享服务
使用 smbmap
查看下是否存在可访问的共享目录:
# smbmap -H 10.10.10.100
[+] IP: 10.10.10.100:445 Name: 10.10.10.100
Disk Permissions Comment
---- ----------- -------
ADMIN$ NO ACCESS Remote Admin
C$ NO ACCESS Default share
IPC$ NO ACCESS Remote IPC
NETLOGON NO ACCESS Logon server share
Replication READ ONLY
SYSVOL NO ACCESS Logon server share
Users NO ACCESS
可以看到匿名用户对 Replication
文件夹具有 READ ONLY
权限。
通过 smbclient
进入该目录在路径 \active.htb\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\Groups\
中得到一个 Groups.xml
文件,里面包含一组用户名和密码信息。
除此之外还有一个 {6AC1786C-016F-11D2-945F-00C04fB984F9}
:
smb: \active.htb\Policies\> dir
. D 0 Sat Jul 21 18:37:44 2018
.. D 0 Sat Jul 21 18:37:44 2018
{31B2F340-016D-11D2-945F-00C04FB984F9} D 0 Sat Jul 21 18:37:44 2018
{6AC1786C-016F-11D2-945F-00C04fB984F9} D 0 Sat Jul 21 18:37:44 2018
阶段2.2:AD安全之GPP
获得的密码并不是明文,尝试去找这个文件及目录的相关信息,通过搜索查到该文章 https://adsecurity.org/?p=2288
。
所有域组策略都存储在:\ <DOMAIN> \ SYSVOL \ <DOMAIN> \ Policies \
当创建新的组策略首选项(GPP)时,在 C:\Windows\SYSVOL 中会创建一个与相关配置数据相关联的XML文件,其中包括与 GPP 关联的任何密码。为了安全起见,Microsoft AES 在将密码存储为 cpassword 但随后微软在 MSDN 上发布了密钥。
由于经过身份验证的用户(任何域用户或受信任域中的用户)都具有对SYSVOL的读取权限,所以域中的任何人都可以搜索包含“cpassword”的XML文件的SYSVOL共享,该文件是包含AES加密密码的值。
随后在其他的文章中找到 ruby decrypt 的代码片段,本地保存后运行该脚本得到明文:
使用 crackmapexec 工具枚举 smb 登录:
OK,成功得到域用户: active.htb\SVC_TGS:GPPstillStandingStrong2k18
,使用 smbclient
在 User\SVC_TGS
目录中获得 user flag。
阶段3:权限提升
使用得到的域账号,运行 GetUserSPNs
来查询下域内帐户的 SPN,得到了一个 administrator 的 krb5tgs:
尝试使用 john 工具配合 rockyou.txt 字典枚举明文密码:
成功解出密码,使用 Administrator:Ticketmaster1968
密码组成功的到一个cmdshell。
复盘
Kerberoasting
Kerberos 是一种在 Windows Active Directory 环境中使用的身份验证协议(尽管它也可用于对 Linux 主机进行身份验证)。
2014 年,Tim Medin 提出了对 Kerberos 的攻击,他称之为Kerberoasting(https://files.sans.org/summit/hackfest2014/PDFs/Kicking%20the%20Guard%20Dog%20of%20Hades%20-%20Attacking%20Microsoft%20Kerberos%20%20-%20Tim%20Medin(1).pdf)
。
当您想使用 Kerberos 对某些服务进行身份验证时,您可以联系 DC 并告诉它您要向哪个系统服务进行身份验证。它使用服务用户的密码哈希加密对您的响应。您将该响应发送给服务,该服务可以使用它的密码对其进行解密,检查您的身份,并决定是否让您进入。
在 Kerberoasting 攻击中,您将使用离线暴力破解与服务关联的密码,而不是将加密的票据从 DC 发送到服务。
大多数情况下,您需要在域上有一个活动帐户才能启动 Kerberoast,但是如果 DC 配置了UserAccountControl (https://www.harmj0y.net/blog/activedirectory/roasting-as-reps/)
设置“不需要 Kerberos 预身份验证”,则可以请求和接收一张票来破解而无需域上的有效帐户。
smbmap
如果已经知道目录名称,可是使用 # smbmap -H 10.10.10.100 -R -A Groups.xml -q
进行查询。
gpp-decrypt
kali 默认已经安装了 gpp 的 decrypt 工具:
# gpp-decrypt edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ
GPPstillStandingStrong2k18
crackmapexec
crackmapexec 其实除了用于登录枚举还有很多有意思的功能模块,通过加入-M参数进行操作,具体使用可以查看github中的modules目录:
参考
- https://adsecurity.org/?p=2288
- https://paper.seebug.org/503/
- https://files.sans.org/summit/hackfest2014/PDFs/Kicking%20the%20Guard%20Dog%20of%20Hades%20-%20Attacking%20Microsoft%20Kerberos%20%20-%20Tim%20Medin(1).pdf
- https://www.harmj0y.net/blog/activedirectory/roasting-as-reps/